이 글을 쓰는 시점에서 htop
두 코어 모두 약 50%(빨간색 막대)의 커널 스레드 활용률을 보여주고 있습니다. 이전 출시를 통해 시간이 지남에 따라 각각 50% 활용률로 3개 또는 심지어 4개의 코어로 증가할 것이라는 것을 알고 있습니다. htop은 모든 스레드에 대해 1% 이하의 CPU 사용량을 표시합니다. 좀 이상하지 않나요?
더 자세히 조사해 본 결과 perf record -a
루트로서 모든 샘플의 11.3%가 swapper
함수 내 명령의 커널 스레드 에 있음을 발견했습니다 intel_idle
.
swapper
나는 이 명령이 htop에서 볼 수 있는 이상한 CPU 사용량과 일치한다고 가정합니다 . 그러나 누군가 다음 중 일부를 나에게 설명해 줄 수 있습니까?
- 원인은 무엇입니까? 버그인가요 아니면 설정에 문제가 있나요?
- 이것이 내 시스템의 전반적인 성능에 영향을 줍니까?
- 이 문제를 어떻게 제거할 수 있나요?
내 시스템에 대한 자세한 내용:
$ uname -a
Linux [...] 4.8.0-0.rc2.git2.2.fc26.x86_64 #1 SMP Wed Aug 17 22:16:04 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 94
Model name: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
Stepping: 3
CPU MHz: 799.804
CPU max MHz: 4200.0000
CPU min MHz: 800.0000
BogoMIPS: 8016.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Flags: [...]
고쳐 쓰다:로드된 상태에서는 동작이 약간 다릅니다. (첫 번째 참고로, 현재 3개의 코어가 있으며 각 코어의 활용도는 50%이며 성능은 내부적으로 27%로 보고됩니다 intel_idle
.) CPU에 스트레스를 주고 확인 sysbench --test=cpu --num-threads=8 --max-requests=1000000 run
했습니다 . Htop은 커널에서 100% 코어 3개(유휴 상태에서 50%를 표시하는 동일한 코어)와 100% 사용자 공간에서 코어 5개를 보고합니다. Perf는 sysbench가 내 CPU의 85%를 사용하고 있다고 보고하고 나머지 15%는 설명하지 않습니다... 그게 무슨 뜻인지 잘 모르겠습니다. 내 CPU 성능이 사실상 85%로 감소됩니까?htop
perf
답변1
나는 Intel 프로세서의 전원 관리에 대해 아무것도 모르고 Linux 코드도 본 적이 없기 때문에 이 답변은 대부분 추측에 불과하지만 합리적이라고 생각합니다.
제 생각에는Derobert의 전원 관리 설명이것이 지금 일어나고 있는 일입니다. 전원 관리는 전력 소비와 성능 간의 절충안입니다. 프로세서가 100% 최고 성능으로 사용되지 않는 경우에는 주파수를 낮추는 것이 유리합니다. 그러면 속도가 느려지지만 더 시원해집니다.
Linux는 시간이 지남에 따라 CPU 주파수를 변경합니다. 이것이 어떻게 이루어지는지지사. 일반적인 개념은 시스템이 일정 기간 동안 CPU 성능을 완전히 활용하지 않을 때 CPU 주파수가 감소한다는 것입니다. 반대로, CPU가 일정 기간 동안 계속 사용 중이면 코어는 주파수를 높입니다.
디스패치가 표시된다는 intel_idle
것은 코어가 코드를 실행하고 있지 않지만 실제로는 "일시 중지" 모드에 있어 전력을 거의 소비하지 않는다는 의미입니다. 이는 단순히 주파수를 낮추는 것보다 전력을 더 많이 절약하지만 비용은 더 많이 듭니다.방해하다발생하면 시간이 좀 걸립니다(수십 마이크로초? 그 이상?).
intel_idle
코어를 모두 활용하지 않는 것은 완전히 정상입니다. 이렇게 하면 CPU를 항상 최고 속도로 실행하는 것에 비해 프로세서 자체와 냉각 장치 모두에서 많은 전력이 절약됩니다. 이 메커니즘을 비활성화해야 하는 유일한 이유는 매우 낮은 수준이 필요한 경우입니다.숨어있는. CPU 집약적인 애플리케이션을 실행하는 경우 less 와 less 가 표시됩니다 intel_idle
. CPU 유휴 모드를 사용해도 커널이 시스템에 많은 CPU 전력이 필요하다고 완전히 판단하지 않은 전환 중을 제외하고는 성능에 영향을 주지 않습니다.
코어가 완전히 포화되면 0%에 도달하게 됩니다 intel_idle
. 실행되는 모든 코드와 데이터가 CPU 캐시에 맞지 않고 제한 요소가 RAM 액세스 속도이기 때문에 모든 코어를 포화시키는 것이 어려울 수 있습니다(특별히 설계된 벤치마크를 사용하면 가능함). "모든 코드 및 데이터"에는 실제로 사용자 인터페이스를 포함하여 시스템에서 실행되는 모든 것이 포함되며 모든 코어가 포화되는 경우는 거의 없습니다.