intel_idleに多くの時間を費やします。

intel_idleに多くの時間を費やします。

この記事を書いた時点で、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%に低下しますか?htopperf

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

おすすめ記事