
VMware ESXi 4.1 の場合
ゲスト: Linux カーネル 2.6.32 64 ビット (古いバージョンも試しました)
マルチ CPU 仮想マシンでは、すべての割り込み (eth0、ata_piix) が単一の CPU に固定されます。純粋なハードウェアで実行する場合、すべてが適切にバランスされます。
E1000 ネットワーク ドライバーと準仮想化 VMXNET3 を試しました。
何か提案はありますか? 仮想化環境で通常の IRQ アフィニティを取得することは不可能ですか?
答え1
申し訳ありませんが、これは無意味な質問です。仮想化ハードウェア モデルは、仮想化されているだけです。割り込みは現実のものではなく、アダプタは現実のものではなく、実行する「バランス調整」も現実のものではなく、これに対する vCPU 0 のオーバーロードも現実のものではありません。VT-d を使用して 2 つの専用 NIC をパススルーし、適切に構成しない限り、これを安定して実行する方法はありません。
答え2
可能であれば、症状のいくつかを教えていただけますか? 大量の割り込みが発生すると、パフォーマンスが著しく低下します (1 つの vCPU が固定されます)。 VMware の公式回答はわかりませんが、VMware は、ゲスト OS に知られずにあらゆる種類の「魔法」が発生するという事実に大きく依存しているため、これは単なる抽象化である可能性があります。
答え3
e1000 を使用すると、"echo 3 > /proc/irq/$irq/smp_affinity" (3 == 00000010 == core1) でこれらの割り込みを 1 つのコアに固定できます。vmxnet3 では、何をしても core0 に留まります。ここで仮想化されているかどうかに関係なく、ソフト割り込みなどで Linux の CPU 負荷が 100% 近くになるというのは、実に現実的です。