この記事を書いた時点で、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アクセス速度であるため、すべてのコアを飽和させることは困難です(特別に設計されたベンチマークを使用すると可能です)。 「すべてのコードとデータ」には、実際にユーザーインターフェイスを含むシステムで実行されているすべてが含まれ、すべてのコアが飽和することはほとんどありません。