次のシナリオを達成しようとしています。
それぞれに 6 つの CPU を持つ 4 つの numa ノードを備えた Linux ボックスがあります。kvm ゲストのパフォーマンスを向上させるために、各 vcpu を一連の CPU に、できれば同じ Numa セルに固定します。
たとえば、12 コアのゲストを開始する場合、最初の 6 個の vcpus を NUMA ノード 1 の cpuset に固定し、2 番目の 6 個を NUMA ノード 2 の cpuset に固定します。
これまでのところ、そのトポロジをゲストに公開しようとすると、問題が発生し始めます。つまり、2 つの NUMA ノードに 2 つの cpuset があることをゲストに認識させます。
qemu-kvmのオプションを使用する-smp 12,sockets=2,cores=6,threads=1
と、最初の 6 つを 1 つのソケットに、2 つ目の 6 つを別のソケットにグループ化し、-numa
オプションを使用して適切な vcpus に 2 つの numa ノードを設定することで、それらを半分に分割する可能性が高いと思います。だから私の質問は次のとおりです:
-numa
オプションはその役目を果たしますか?ドキュメントでは、numa シミュレーション用であると言われています。そのシミュレーションなら、それはパフォーマンスを損なうことを意味しませんか? 私が必要としているのは、ゲストに「これらの CPU は同じ NUMA ノード上にあります」と言う方法です (そうでない場合でも)。これはそれを達成する方法ですか?qemu (1.2.0) にバグがあり、トポロジーがひどく公開されているようです。CPU トポロジを (たとえば) に設定すると
-smp 9,sockets=3,cores=3,threads=1
、何らかの奇妙な理由で、ゲスト内で ( lstopo を使用して) 3 つのソケットに配置されていることがわかりますが、最初のソケットに 4 コア、2 番目のコアに 4 コア、3 番目のコアに 1 コアが配置されています。 ( 4|4|1 )。私は、それらを均等ではなく、2のべき乗に分割すると考えました。sockets=2,cores=10
;でも同じ動作を観察しました。sockets=2,cores=18
、名前を付けると、常に半分ではなく、2 のべき乗 (つまり 8|2 と 16|2 ) で分割されます。sockets=2,cores=8
ただし、正常に動作します(これは一種の予想です)。誰かがそのようなことを経験したことがありますか?