상단에는 CPU 사용량이 100%로 표시되지만 코어 유휴 상태는 50%입니까?

상단에는 CPU 사용량이 100%로 표시되지만 코어 유휴 상태는 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은 프로세서의 정확히 절반이 유휴 상태인데 CPU의 100%(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 - 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/nullCentOS 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

4년이 넘었는데 공평하게 말하면 나는 사본을 받은 것을 보고 그 문제에 대해 완전히 잊어버렸습니다.주목할만한 문제그 문장.

문제는접선적으로하이퍼스레딩과 관련이 있지만 응답자에게 계속 지적했듯이아니요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은 4개의 코어를 모두 최대화합니다. 이것은 이상하며 커널의 CPU 통계 보고에서 버그를 발견한 것으로 의심됩니다. 시도해 볼 수 있는 사항은 다음과 같습니다.

  • 다시 시작하지 않고 집에서 Folding을 실행해보세요.
  • 모든 코어를 플러딩하는 다른 프로그램을 실행하고 어떤 숫자를 얻는지 확인하십시오.

게다가 Foldingathome은 계산을 위해 CPU만 사용합니까, 아니면 계산을 위해 GPU도 사용합니까?

답변4

AMD 듀얼 쿼드 코어(AMD에는 HT와 동등한 프로세서가 있으므로 프로세서당 "분명히" 8개의 코어)의 Centos 6에서 i_groks를 사용하여 시나리오를 테스트했으며 아래와 같이 22개의 프로세스를 실행했습니다.

cat /dev/urandom > /dev/null

총 CPU 사용량이 약 95%로 포화되는 것을 관찰했습니다. 위에서 다시 확인했는데 총 사용량이 일관됩니다.

추가 프로세스는 경합으로 인해 총 사용량을 늘리지 않습니다.

코어 수준을 살펴보면 16개의 "명백한" 코어(물리적 코어당 2개의 형제)가 거의 100% 속도로 실행되는 것으로 표시됩니다.

따라서 원래 보고된 상황/문제를 재현할 수 없습니다.

관련 정보