web-dev-qa-db-ja.com

仮想化:ハイパースレッディングホストCPUを使用したvCPUの固定?

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

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

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

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

1
lynix

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

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

4
ewwhite

オプション1はほとんどの場合遅くなることはありませんが、OSとプログラムはワークロードに満足してトリガーされる可能性があります。積み重なる場合があります。あなたの隣人が〜小さな〜減速を気にしないのであれば、オプション2の方が良いと思います。

0
PNDA