Redhat 5.5:multithreading进程只使用可用的8个CPU

奇怪的情况:HP z800工作站上的Redhat Enterprise 5.5(股票安装,无更新,x64)。 (Dual Xeon 2.2 Ghz。8个内核,如果你计算超线程,则为16个,RH看到16个内核。

我们有一个应用程序,可以利用1,2或4线程进行繁重的计算。 不知何故,所有这些线程都以100%的负载运行在相同的内核上(其他15个内核几乎空闲),所以多余的线程绝对没有任何好处。 事实上,随着线程在单核上相互进入,有一个轻微的放缓。

我如何让他们运行在不同的核心(如果可能的话)? 应用程序是64位。 除了更改线程设置之外,不能更改软件的任何内容。 有一些模糊的Linux设置,我可以尝试改变? (我是一个True64和Aix的人,我使用Linux,但是没有深入的关于Linux进程调度的知识。)


/ proc / cpuinfo list al 16. top en gnome cpu-monitor都表示只使用1个内核。 我也尝试了类似于perl的东西。 我们可以加载所有的CPU几乎100%,如果我们想。 应用程序供应商声称:是的,它是multithreading的,但尚未优化。 这将是下一个版本(8月份)。

所以我认为应用程序在它自己的进程空间内执行子线程而不是真正独立的进程线程。 真的没什么我可以做的,然后….

从RPMforge或yum下载压力工具,然后运行:

stress --cpu 16生成16名工人。 如上所述,使用1开关运行top以显示列表中的所有CPU。

一旦你已经validation了CPU列表和活动,Ctrl-C超出压力并运行你的应用程序。 用同一个开关开始,然后用H开关显示所有的进程线程。

你是否100%确定它只在一个核心上运行? 你是怎么检查的? 顶部,然后按下“1”? 按“1”后,你看到所有的16核心在“顶部”? 或在“猫/ proc / cpuinfo”?

其他应用程序会发生什么? 如果你开始像

 perl -e 'foreach (1..9e9) { sqrt(1234) }' & 

16倍,你看到你所有的16核心在100%?

我认为这更多的是你的应用程序的configuration,而不是特定于Linux系统的configuration。