これを書いている時点で、htop
は、カーネルスレッド(赤いバー)にそれぞれ約50%の2つのコアを示しています。私が知っている以前のブートから、これは時間の経過とともにそれぞれ50%で3コア、さらには4コアに増加するでしょう。 htopが示すスレッドには、1%を超えるCPU使用率はありません。これはちょっと変ですね。
さらに調査を試みたところ、ルートとしてperf record -a
を使用したところ、すべてのサンプルの11.3%が関数intel_idle
のコマンドswapper
のカーネルスレッドにあることがわかりました。
この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: [...]
pdate:負荷がかかっている場合の動作は少し異なります。 (最初に、それぞれ50%の3つのコアになり、perfがintel_idle
内で27%を報告することに注意してください)sysbench --test=cpu --num-threads=8 --max-requests=1000000 run
でCPUにストレスをかけ、htop
とperf
を再度確認しました。 Htopは、カーネルで100%の3つのコア(アイドル時に50%で表示される同じコア)と100%のユーザーランドで5つのコアを報告しました。 Perfは、sysbenchが私のCPUの85%を占め、残りの15%を説明していないと報告しました...これが何を意味するのかわかりません私のCPUは効果的に85%のパフォーマンスに削減されますか?
私はIntelプロセッサーの電源管理について何も知りませんし、Linuxコードも見ていないので、この答えはほとんど投機的なものです。
電源管理に関するデロバートの説明 が起こっていると思います。電源管理は、消費電力とパフォーマンスの間の妥協です。プロセッサがピークパフォーマンスの100%で使用されていない場合は、周波数を下げると効果的ですが、速度は遅くなりますが、温度は下がります。
Linuxは、CPU周波数を時間とともに変化させます。その方法は governors と呼ばれるポリシーによって制御されます。一般的な考え方は、システムがCPUをフルパフォーマンスでしばらく使用していないと、CPU周波数が低下するということです。逆に、CPUがしばらくの間ビジー状態である場合、カーネルは頻度を増やします。
intel_idle
がスケジュールされていることは、コアがコードを実行していないことを意味しますが、実際には電力をほとんど消費しない「サスペンド」モードです。これは、周波数を単に下げるよりも大幅に電力を節約しますが、コストが高くなります。CPUは interrupt が発生すると復帰しますが、これには時間がかかります(数十マイクロ秒?もっと?)。
すべてのコアを十分に活用していないときにintel_idle
が表示されるのはまったく正常です。これにより、CPUを常にフルスピードで動作させる場合と比較して、多くの電力(プロセッサ自体と冷却装置の両方)が節約されます。このメカニズムを無効にする必要がある唯一の理由は、非常に低い latency が必要な場合です。 CPUを集中的に使用するアプリケーションを実行すると、表示されるintel_idle
が少なくなります。 CPUアイドルモードを使用しても、システムが大量のCPUパワーを必要とすることをカーネルがまだ完全に決定していない移行期間を除いて、パフォーマンスは低下しません。
コアを完全に飽和させると、0%に達しますintel_idle
。実行中のすべてのコードとデータがCPUキャッシュに収まらないため、すべてのコアを飽和させることは難しい場合があります(特別に設計されたベンチマークで行うことができます)。制限要因はRAMアクセス速度。 「すべてのコードとデータ」には、ユーザーインターフェイスを含め、マシンで実行されているすべてのものが含まれます。実際には、すべてのコアを飽和させることはまれです。