次の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コアからホストコアへのマッピングです。
VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7
このようにして、VMの2つの仮想コアはホストCPU上の兄弟ハイパースレッドにマップされます。2つのホストコアがいくつかのキャッシュを共有するため、ゲストコードはキャッシュの局所性から利益を得るでしょう。
ただし、2つのハイパースレッドもいくつかの機能ユニットを共有しているため、計算負荷がかかると互いに速度が低下します。
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)を実行するため、質問はかなり理論的な性質のものであることがわかりますが、それでも知りたいと思います。
あなたはこれを考えすぎているかもしれません。
ここでコアを手動で割り当てると、実際にはパフォーマンスが低下する可能性があります。 VMwareの世界では、非常に具体的な要件がない限りこれを行いませんが、説明したワークロードとアプリケーションの場合は必要ありません。 KVMスケジュールを立てて実行します。疑わしい場合は、コアとソケットを増やします。ただし、このような小規模な展開では、CPUが制限要因になることはありません。
オプション1はほとんどの場合遅くなることはありませんが、OSとプログラムはワークロードに満足してトリガーされる可能性があります。積み重なる場合があります。あなたの隣人が〜小さな〜減速を気にしないのであれば、オプション2の方が良いと思います。