ハイパースレッディングで使用するCPUの数は?


22

ハイパースレッディングがオンになっている18コアのサーバーCPUがあるとします。つまり、htopに36 cpusが表示されます。

CPUを十分に活用し、シングルスレッドのパフォーマンスに影響を与えないようにするには、36個すべての「コア」が100%で実行されるようにします。 「フル」コアは、その「HTコア」のタスクによってすでに中断されているため、シングルスレッドの作業が少なくなっていますか?

HTのパフォーマンスに影響する多くの変数があることを認識しています。HTを扱う場合のCPUメーターの意味を知りたいだけです。


6
ハイパースレッディングは、実際に2倍のCPUを提供するわけではありません。CPUが2つのプログラムを読み取り、1つのプログラムが数サイクルかかる何かをしようとしているとき、またはすべてのリソース(加算器、乗算器、ローダーなど)を使用していないときは、それらを使用できるように他のプログラム。そのため、すべてのスレッドで 100%を見るには、コアで実行されている互換性のあるプログラムをうまく一致させる必要があります。
-simpleuser

4
その設計のため、ハイパースレッディングは混合ワークロードでうまく機能します。たとえば、すべてのVMが異なるサービスを実行するハイパーバイザー。そのようなシナリオでは、おそらくテストする必要さえありません。より均一なワークロードの場合、通常は確認するためにテストが必要です。
マイケルハンプトン

回答:


14

2番目の仮想コアが1番目の仮想コアがスタックしているときに貢献できる場合、そうでないよりはましなので、(少なくとも)少し余分な作業を完了します。

問題は次のとおりです。2つの異なるスレッドがあると、1つが悪化するのはいつですか?分岐予測と命令間の依存関係は変わりません。現在メモリアクセスを待機しています... 2つのスレッドは、キャッシュ使用率と帯域幅の両方でメモリアクセスを巡って競合しています。

HTで実行しているCPUとそうでないCPUがある場合、特定のスレッドをいずれかのタイプに割り当てることも意味しますか?私はそうは思わない:あなたのプログラムはランダムな仮想コア上でスレッドを実行するだろう。では、構成の分割はどのように役立ちますか?各CPUには独自のキャッシュがあるため、唯一の影響はメモリ帯域幅とキャッシュの一貫性の負荷によるものです。

一般的に、あなたはポイントに達しより多くのあなたがやっている可能性が何かをすることは、いくつかのCPUの実行ユニットがアイドル手放すよりも高価ですが。これは、スレッドの数に直接依存するのではなく、スレッドが何をしいるか、さまざまなコンポーネントの詳細なメモリアーキテクチャとパフォーマンスの微妙な違いに依存します。

簡単な答えはありません。特定のプログラムを念頭に置いても、マシンは自分の経験に関係する人々のマシンとは異なる場合があります。

あなたはそれを自分で試して、その正確なマシンでの特定の作業で最速のものを測定する必要があります。そして、それでも、ソフトウェアの更新と時間の経過に伴う使用の変化によって変化する可能性があります。

見てみましょう怒りののボリューム3 の最高傑作を。特定のプロセッサを注意深く見ると、コードの実行に必要な多くのステップの深いパイプラインの中でリソースが制限されていることがわかります。より多くの作業を引き受けるのではなく、過剰なコミットにより実行が遅くなるケースを見つける必要があります。一般的に、それは何らかのキャッシュを意味します。リソースがスレッド間で共有される場所。


CPUメーターの意味:アイドルスレッドの実行に費やされていないすべての時間を報告します。コアに割り当てられた両方の論理スレッドは、それらの1つで実行される実際の作業が小さい場合でも、アイドル状態になりません。パイプラインが結果の準備が整うまで、メモリがフェッチされ、アトミック操作がフェンスされるなど、パイプラインが数サイクル停止するのに費やされた時間も同様に、スレッドが「準備ができていない」として棚上げされないため、アイドル状態になりません。時間が使用中として表示されます。RAMで待機しても、アイドルとして表示されません。I / Oのようなものだけがスレッドをブロックし、スレッドへの充電を停止します。一般的には、オペレーティング・システムのミューテックスはそうだろう、しかし、「スピンロック」など、もはや確実なことだマルチコアシステム、の立ち上がりになりません棚上のスレッド行く背中を作ります。

したがって、CPUがメモリを待機していることが多い場合、CPUメーターが100%であっても、すべてがスムーズに航行できるというわけではありません。90%を示す論理コアの数が少なくなると、処理が終了し、ディスクで待機するため、より多くの作業を完了できます。

したがって、CPUメーターについて心配する必要はありません。実際の進捗状況のみを確認してください


23

CPUメーターは、ハイパースレッドCPUからどれだけ多くのパフォーマンスを引き出すことができるかを伝えるには非常に悪いです。そのためには、さまざまな物理コアのオーバーサブスクリプション率で独自のベンチマークを実行する必要があります。HTを完全にオフにした場合に最適に機能するワークロードがいくつかあります。そのため、その場合もテストに含めてください。1:2(36並列ワーカー)、1:1.5、または1:2.5になります!ワークロードに依存します。

より詳細には、HTは、コンテキストを切り替える必要がある場合や分岐予測が失敗した場合にプロセッサがアイドル状態になる時間を短縮する方法でシリコンに実装されます。これにより、純粋なオペレーティングシステムのトリックを使用するよりも、実行ユニットの使用率を100%に簡単に到達できます。HTは導入以来進化しており、最近のチップでは、10年前に使用していたものよりも多くの並列処理が行われています。

最適なオーバーサブスクリプションポイントの場所に影響を与える2つの実行プロファイルがあります。

  • 実行時間が長い。大規模なレンダリングジョブや環境モデリングなど、リサイクルする前に数分または数時間労働者を実行すると、労働者あたりの効率的なシングルコアパフォーマンスが得られます。これにより、比率が低下します。
  • 実行時間が短い。Webアプリのスレッドなど、ワーカーが数秒または数分で循環する場合、新しいプロセスをオンにすることに伴うオーバーヘッドは、比率が高くなることを意味します。

ちょっと?数分ですか?
イスマエルミゲル

かなり。1〜5程度。18人の従業員がいる1人の従業員あたり120秒では、7秒ごとに新しい従業員を引き継いでいます。その多くは、キャッシュの局所性に帰着します。
sysadmin1138

1
あなたはそれを得なかった..あなたはあなたの2番目の点で「小さい分」と言っている。分には常に同じ「サイズ」があり、これは60秒です。時々61秒。
イスマエルミゲル

4

36個すべてのコアが100%で実行されていることを確認する必要があります-ソフトウェアがそれを行うことができると仮定すると(これは簡単ではありません-多数のコアではスケジューリングが難しいため、100%未満の低下は許容されます)。

明らかに、ハイパースレッディングで鉱石を「分割」するとき、それらの200%の意味は「2x100%-作業完了」ではありません。しかし、これは、測定値(CPU使用率に由来し、作業の概念がない)には見えません。これがどの程度の作業を行うかは、作業内容によって異なります-ほとんどの場合、ハイパースレッディングのない1.5倍以上の作業が予想されます。


3

ハイパースレッディングの実装方法は、特定のCPUアーキテクチャによって異なります。ネハレムからスカイレイクまで、インテルはパイプラインの固定比率(50:50)共有部分を大幅に削減し、ダイナミカルに共有される構造に向かいました。

とにかく、一般的に言えば、HTを有効にすると、シングルスレッドの実行がわずかに遅くなりますが、Linuxスケジューラの動作方法により、これは物理コアの数よりも実行中のスレッドの数が多い場合にのみ発生します。そのような状況(スレッド>コアの場合)で、通常、最も重要な合計スループットを高く評価するため、ハイパースレッディングは最終的な利点です。

これはどのように可能ですか?理解すべき重要な点は、CPUは物理コアと仮想コアを同等のコアとして提示せず、Linuxスケジューラが他の物理コアが利用可能な場合にそれらのスケジューリングを回避できる方法で後者を公開することです。つまり、最初にすべての物理コアを使用し、次に仮想コアを使用し始めます。

つまり、一般的に、ハイパースレッディングは非常に価値のある機能であり(Power8などの他のプロセッサーはさらに深いSMT技術を使用する)、スループットを最大化するには、仮想コアまたは物理コアごとに少なくとも1つのスレッドでCPUをロードする必要があります。実際の例として、18コアCPUから完全なパフォーマンスを引き出すには、少なくとも36スレッドを使用する必要があります。

次の2つの例外があります。

  1. 限られたスレッドセット(スレッド<物理コア)からの遅延を最小限に抑えたい場合は、HTを無効にできます。
  2. 非常に古いCPU(Pentium4およびはるかに小さい方法でNehalem)には、CPUが2番目のスレッドのステータス/負荷から独立して、50/50比率で多くの主要なリソースを分割する柔軟性のないパーティションルールがあります。この場合、追加のスループットが大幅に低いシングルスレッドのパフォーマンスに見合うかどうかを確認するために、ユースケースのベンチマークを行う必要がありました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.