仮想化: ハイパースレッディング ホスト CPU による vCPU 固定?

仮想化: ハイパースレッディング ホスト CPU による vCPU 固定?

私は、Core i7-2600 CPU を搭載した Linux サーバーで KVM/libvirt を使用しています。このサーバーの CPU トポロジは次のようになります (1 ソケット、4 コア、8 スレッド)。

Physical | Logical
---------+--------
Core 0   | 0, 4
Core 1   | 1, 5
Core 2   | 2, 6
Core 3   | 3, 7

通常、このホストでは 3 台の仮想マシンを実行しており、各仮想マシンには 2 つの仮想 CPU が搭載されています。キャッシュをホットな状態に保つことでパフォーマンスを向上させるために、VM の vCore を固定ホスト コアに固定したいと考えています。

ここで問題となるのは、ホスト CPU がハイパースレッディングを使用していることを考慮すると、VM コアをホスト コアにマッピングすることです。

オプション 1: 物理ホスト コアごとに 1 つの VM

VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7

この方法では、VM の 2 つの仮想コアがホスト CPU 上の兄弟ハイパースレッドにマップされます。2 つのホスト コアが一部のキャッシュを共有するため、ゲスト コードはキャッシュの局所性から利益を得ます。

しかし、2 つのハイパースレッドがいくつかの機能ユニットを共有していることを考えると、計算負荷がかかると、お互いの速度が低下します。

オプション 2: 分散 VM コア

VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7

このマッピングの利点は、VM の 2 つの仮想コアの両方で計算負荷が発生した場合、この負荷がホスト上の 2 つの別々の物理コアにマッピングされることです。その時点で他の VM に負荷がかかっていない場合は、オプション 1 の場合の 1 つの物理コアではなく、2 つの物理コアを使用できます。

VM はすべて主に Web サービス (Nginx、MySQL、PHP-FPM) を実行しているため、この質問は理論的な性質のものであることは承知していますが、それでも知りたいのです。

答え1

あなたは考えすぎているかもしれません。

ここでコアを手動で割り当てると、実際にはパフォーマンスが低下する可能性があります。VMware の世界では、非常に特殊な要件がない限り、これを行いませんが、説明されたワークロードとアプリケーションでは、これは必要ありません。KVM にスケジュールを設定させて、実行させます。疑問がある場合は、コアとソケットを増やしてください。ただし、このような小規模な展開では、CPU が制限要因になることはありません。

答え2

オプション 1 ではほとんどの場合速度低下は発生しませんが、OS とプログラムが負荷を集中して処理しすぎる可能性があります。負荷が蓄積される可能性があります。隣人が ~わずかな~ 速度低下を気にしないのであれば、オプション 2 の方が良いと思います。

関連情報