仮想マシンでCPUアフィニティ(SCHED_SETAFFINITYなど)を設定するとはどういう意味ですか?

仮想マシンでCPUアフィニティ(SCHED_SETAFFINITYなど)を設定するとはどういう意味ですか?

プロセス/スレッドの好みを設定する方法はいくつかあります。
たとえば、オペレーティングシステムに特定のコアでのみ実行するように指示します。
または、スレッドが特定のコアで実行されるように指示します。

CPUが実際に仮想である(とにかく物理CPUにマッピングされる)仮想マシンでは、これはどういう意味ですか?

答え1

VM 内および vCPU 内の優先度のみを設定します。これは実際のホストCPUと静的関係がない可能性がありますが、VMホストが仮想CPUを別の物理CPU(おそらくそうでなければならない)に維持しようとすると、ゲストに好みを設定するとプロセスを維持するのに役立ちます。 。単一の物理CPUが優れています。 CPU(ホストとゲストのロードタイプによって異なります)

ゲストの仮想 CPU 数だけホストに物理 CPU がある場合、VM ホストは仮想 CPU を移動する必要はありません。ただし、より多くのVMが存在する可能性があるため、VMを移動する必要があり、ゲストがこれを行うことができることはありません。必要に応じて、ホストレベルでアフィニティを設定する必要があります。

つまり、ホストシステムCPUを仮想マシンに公開する特別なドライバがないとします。

答え2

仮想マシンがこれにより利点を得ることができるケースを見ることができます。SCHED_SETAFFINITY(2)。それぞれ2つの「仮想ソケット」(同じホスト上の2つの異なる物理CPUにマッピングおよび固定)と2つの「仮想コア」を持つ「特殊」VMを見てみましょう。マンページで説明されているように、ゲスト内部の好みを設定したいプロセスのパフォーマンスコストが低いことを確認できます。

スレッドが単一のCPUで実行されるように制限すると、スレッドが1つのCPUで実行を停止し、別のCPUで実行を再開したときに発生するキャッシュの無効化によるパフォーマンスコストも回避されます。

なぜこれを設定するのですか?わからない :) しかし、2つの仮想ソケットがある場合、まだキャッシュ無効化の問題が発生します。

24コアを使ったベンチマークもありますvmwareでは、さまざまな構成で利用可能です(1ソケット、24コア - 24ソケット、1コア - 2ソケット、12コア)。以前は、プロセスがソケットにバインドされていることを証明できる場合は、「CPUソケット権限」(cof、cof、Oracle ...)を必要とするソフトウェアでこのアフィニティセットが機能していましたが、今日ではこれらのアフィニティセットがたくさんあります。仮想マシンを実行する物理CPU全体のライセンスを必要とする仮想環境ライセンスについて、ますます明確になっているソフトウェアソリューションです。ご覧のとおり、vmwareソリューションは、お持ちのvSocketの数に応じてさまざまなvNUMASを作成します。

これに加えて、ゲスト内でアフィニティを設定すると、ハイパーバイザーで仮想マシンを移動するときにアフィニティを設定することによって実行される作業がより複雑になる可能性があります。

関連情報