LinuxのハイパースレッディングでのCPU負荷測定


12

マルチコアハイパースレッディング対応のCPUの実際の使用方法を取得するにはどうすればよいですか?

たとえば、4つの仮想コアを表す2コアCPUについて考えてみましょう。

top仮想コアの1つのコアが完全に使用されるため、シングルスレッドのワークロードはで100%と表示されます。top4つの実際のコアがあるように、CPUと期待どおりに動作します。

ただし、2つのスレッドでは問題が発生します。すべてが正常に機能する場合、2つの実際のコアとバランスが取れているため、200%の使用率が得られます。 。私には大丈夫だと思います。

ただし、2つのスレッドが単一の実際のコアで実行される場合、100%を2回使用するように表示され、仮想コアの使用率は200%になります。しかし、実際には、1つのコアが2つのスレッドでパワーを共有し、合計CPUパワーの半分しか使用していません。

したがって、で示される使用数topは、CPUのワークロードの合計を測定するために使用することはできません。

また、ハイパースレッディングが実際のコアで2つの仮想マシンをどのようにバランスさせるかについても疑問に思います。2つのスレッドが異なるサイクル数をとる場合、実際の負荷が異なっていても仮想コアが両方とも100%の負荷を示すように「適応」しますか?


1
ハイパースレッディング仮想コアと物理コアの違いをオペレーターシステムが認識していないことを理解していますか?
ラムハウンド2013年

それはそうですが、そうする必要はありませんか?実際のコアと仮想コアのマッピングは、単純な1対2のマップです。問題は、実際のコアで別のコアを使用してスケジュールを設定することにより、使用可能なパフォーマンスを実際に変更する仮想コアの負荷を測定する方法です。しかし、すべてのデータは利用可能だと思います。問題は、それらから適切な結果を得るツールがどこにあるのかということです。
ドローヌス2013

1
100%がすべての実際のコアのすべてのサイクルが使用されることを意味する負荷測定値が欲しいだけです。
ドローヌス2013

1
簡単に言うと、CPUが現在進行中の作業を遅くすることなく、さらに作業を行うことができるかどうか、特定の瞬間にどのように判断するのですか?
dronus 2013

1
@Ramhound、つまり、8つの論理コアを持つ物理4コアプロセッサがあり、負荷平均が4.00である場合、私は100%の使用率ですか、50%ですか?
Buttle Butkus、2015年

回答:


5

OracleのMartin Tegtmeierが昨年の興味深いブログ投稿を書いています:https ://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

短い答え。ハイパースレッディングは、全体的なCPU使用率/ CPUアイドル率を報告するtopの機能を実際に混乱させます。

最悪の場合、コアあたり100%の使用率で2つのスレッドを実行する2コア4仮想コアCPUは、CPUをほぼ飽和させる可能性があります。(実行ポートの使用状況に応じて、CPUでまったく異なるコンピューティングリソースを使用するスレッドのみが、現在のスレッドのパフォーマンスに影響を与えることなく実行できます。)ただし、この場合もtopは50%のアイドルを報告します。


1
現在作業中のリンク:blogs.oracle.com/partnertech/...
JANLalinský

4

コアの使用率は、システムの負荷とは大きく異なります。コア使用率は、コアが何かを計算したり、命令を待ったりしている量を示しているだけです。CPUが何かを計算している任意の時間に対応する100%にすることができます。

ただし、負荷は別のものです。負荷は、通常、プロセスがリソースを待機する必要があるかどうかを判断するために測定されます。プロセスがリソースを待機していない場合は、非常にパフォーマンスの高いシステムが表示されます。ただし、システムが遅いのにCPU使用率が低い場合があります。これは通常、一部のプロセスがリソースを待機していて、CPUを解放していないことを意味します。この種のシナリオでは、CPU使用率が高くなることはありませんが、システムがその容量をかなり超えている可能性があります。

Linuxシステムでは、負荷平均は、システムの全体的なパフォーマンスを測定するための計算値です。負荷平均の値は、並列計算リソース、具体的にはコアと比較する必要があります。したがって、4つの物理コアを備えたシステムの負荷平均が4以上であれば、一部のプロセスがリソースを待機すると言っても安全です。

CPU使用率が100パーセントか10パーセントかは重要ではありません。負荷平均は200または300にもなる可能性があり、これらの場合、システムはほとんど応答しなくなります。

通常の動作状態では、サーバーの平均負荷が長時間コアの数を超えないようにする必要があります。短いスパイクは私の意見では重要ではありません。w出力に表示される3つの数値はload avです。1/5/15分間。


0

私の意見では、上記の答えはどれも満足のいくものではありません。

次のリンクで参照している記事は、この質問に答えるのに的を絞っていると思います:http : //perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

見積もり:

HTの背後にある考え方は、現在実行中のアプリがストールしたときに別のアプリケーションスレッドを実行できるようにすることです。分岐予測ミス、パイプラインのバブルなどが原因です。これを可能にするには、別のポートまたはASレジスタが必要です。そのレジスタは、HTが有効になるとOSから見えるようになります。ただし、OS(およびフードチェーンから使用しているパフォーマンスツールまで)は、プロセッサ容量の2倍、つまり各ASポートで100%のCPUが利用可能であると考えています。

ただし、内部的には実行ユニットは1つしかありません。HTが有効になる前に開始した単一の物理コアです。違いは、2つのASポート間で何らかの方法で共有されていることです。シングルコアが2つのポート間でどのように切り替えられるかは非常に複雑ですが、ポーリングキューの観点から最も簡単に理解できます。私はGCaPクラスでその詳細レベルに進みます。

私が持っているベストケースのテスト測定では、各HTポートがビジー状態になるのは平均で75%を超えることはなく、OSによって予想される合計200%の容量の150%になることはありません。以前に言及した「不足している」50%容量は幻想です。Intelは、120%から130%の範囲のものが一般的なアプリケーションに期待できると主張しています。

実際、オペレーティングシステムは各仮想コアで100%に到達できると確信しています。私はちょうどした:

mvn clean install -DskipTests -T 5

そして、8つの仮想コアと4つの物理コアがすべてCPU使用率100%になることを保証できます。そして、私は間違いなく私のマシンに8つのコアを持っていません。

要するに、合計CPU負荷が最大で100%を超えた場合は、物理コアの正確に100%を使用して、次のように推測できます。そのメナス、物理コア1をオペレーティングシステムのCPU 1とCPU 2に分割している場合、CPU 1の総使用量は50%で、CPU 2の総使用量は50%です。そのCPUの合計使用率が100%になるというプレッシャーがかかります。あなたはそれを使い果たしました。

しかしもちろん、そのシステム監視ツールのオペレーティングシステムは、それがあなたに幻想を売り込んでいることを知りません。オペレーティングシステムとリソースの管理方法の観点から見ると、2つの仮想コアのそれぞれがまだ50%アイドルであると信じているため、実行するタスクがさらにある場合は、これらの2つのコアに均等に分散しようとします。 。したがって、CPU使用率が100%を超えると、CPU使用率の期間中、CPUでタイムスライスを取得するための変更がなかった期間に、キューに入れられた作業が常に実行されます。最終的にはそれを取得しますが、実行するようにスケジュールされていても、実際には実行されていないスレッドが常に存在します。

ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.