顶部显示 100% CPU 使用,但 50% 的核心空闲?

顶部显示 100% CPU 使用,但 50% 的核心空闲?
top - 08:43:16 up 96 days, 22:16,  1 user,  load average: 4.03, 3.92, 3.98
Tasks: 199 total,   1 running, 198 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.5%sy, 50.0%ni, 49.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  3.9%sy, 46.8%ni, 49.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  3.0%sy, 47.5%ni, 49.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  5.0%sy, 45.5%ni, 49.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3593 foldinga  39  19  276m  80m 2972 S  402  1.0  12:55.42 FahCore_a3.exe

现在,为什么 top 说它正在使用 100% 的 CPU(400%/4 核),而恰好有一半的处理器处于空闲状态?

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 30
model name      : Intel(R) Xeon(R) CPU           X3440  @ 2.53GHz
stepping        : 5
cpu MHz         : 2526.932
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 6
initial apicid  : 6
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
bogomips        : 5054.02
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

编辑:为了响应 i_grok 和 Max Alginin,我确保在服务器上启用了超线程。一旦我打开它,下面是 top 现在的结果。请注意,相同的症状很明显。

top - 10:17:01 up 47 days, 10:28,  3 users,  load average: 7.93, 7.96, 8.02
Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  2.8%sy, 42.0%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  2.2%sy, 42.5%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  1.2%us,  3.7%sy, 95.1%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  1.7%sy, 43.1%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  1.1%sy, 43.6%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy, 44.8%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  2.2%sy, 42.5%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  1.7%sy, 43.1%ni, 55.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8177700k total,  6258704k used,  1918996k free,    29248k buffers
Swap:        0k total,        0k used,        0k free,  5203172k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8132 foldinga  39  19  557m  99m 3060 S  796  1.2   1510:53 FahCore_a3.exe

答案1

扩展 Max 的答案:当确实只有一个物理核心时,具有超线程的处理器会向操作系统报告两个核心。 Linux 有 4 个核心,但您的处理器有 2 个物理核心。

物理核心具有先进的调度功能和一些额外的晶体管来处理第二个线程,但对于许多处理器密集型应用程序来说,超线程并没有提供实际的好处。

在我的领域,我们对将在系统上运行的应用程序进行基准测试,并在 BIOS 中禁用超线程(如果它妨碍性能)。

编辑:

如果我使用这里加载一半的核心,那么cat /dev/urandom > /dev/null我在运行 CentOS 6 的现代 Xeon 上得到的结果是:

top - 19:32:38 up 1 day,  8:17,  3 users,  load average: 12.13, 8.73, 4.07
Tasks: 694 total,  13 running, 681 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us, 50.4%sy,  0.0%ni, 49.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  49552656k total,  2693452k used, 46859204k free,   186448k buffers
Swap: 15999992k total,        0k used, 15999992k free,   469560k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                           
21193 root      20   0 98.5m  560  452 R 100.0  0.0   6:23.31 cat                                                                                               
21194 root      20   0 98.5m  560  452 R 100.0  0.0   6:22.76 cat                                                                                               
21195 root      20   0 98.5m  560  452 R 100.0  0.0   6:22.38 cat                                                                                               
21201 root      20   0 98.5m  560  452 R 100.0  0.0   6:21.98 cat                                                                                               
21202 root      20   0 98.5m  560  452 R 100.0  0.0   6:21.62 cat                                                                                               
21203 root      20   0 98.5m  560  452 R 100.0  0.0   6:21.36 cat                                                                                               
21206 root      20   0 98.5m  560  452 R 100.0  0.0   6:20.43 cat                                                                                               
21187 root      20   0 98.5m  560  452 R 99.6  0.0   6:24.45 cat                                                                                                
21204 root      20   0 98.5m  560  452 R 99.6  0.0   6:21.03 cat                                                                                                
21205 root      20   0 98.5m  560  452 R 99.6  0.0   6:20.73 cat                                                                                                
21213 root      20   0 98.5m  560  452 R 99.6  0.0   6:20.09 cat                                                                                                
21214 root      20   0 98.5m  560  452 R 99.6  0.0   6:19.70 cat

答案2

四年多了,公平地说,我完全忘记了这个问题,只是因为我看到我收到了一份值得注意的问题它的徽章。

问题是切向地与超线程有关,但正如我不断向响应者指出的那样,不是怠速50%的原因。

原因与内核动态刻度配置配置不当有关。我正在运行 Gentoo 并使用定制的内核。在我升级内核后,在 2012 年中期的某个时候,问题自行解决了。

答案3

我不认为超线程是这里的问题。如果您查看其中一行:

Cpu0  :  0.0%us,  0.5%sy, 50.0%ni, 49.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

问题不在于一半的核心处于闲置状态,而在于每个核心有 50% 的时间处于空闲状态!但与此相矛盾的是:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
3593 foldinga  39  19  276m  80m 2972 S  402  1.0  12:55.42 FahCore_a3.exe

也就是说,foldingathome 最大化了所有四个核心。这很奇怪,让我怀疑你在内核的 CPU 统计数据报告中发现了一个错误。这里有一些可以尝试的事情:

  • 在家里运行 Folding,无需重新启动它。
  • 运行一个不同的程序,该程序将淹没所有核心,并查看您得到的数字。

另外,foldingathome 是仅使用 CPU 进行计算,还是同时使用 GPU 进行计算?

答案4

我在 Centos 6 上的 AMD 双四核(每个处理器有 8 个“明显”核心,因为 AMD 有 HT 等效项)上测试了 i_groks 的场景,并运行 22 个进程,如下所示

cat /dev/urandom > /dev/null

我们观察到总 CPU 使用率饱和在 95% 左右。我仔细检查了 atop,总使用量是一致的。

额外的进程不会增加总使用量,可能是由于争用。

查看核心级别:16 个“明显”核心(每个物理核心有 2 个同级)显示为以接近 100% 的速度运行。

因此,我无法重现最初报告的情况/问题。

相关内容