
VMWare ESXi 4.1
Gast: Linux-Kernel 2.6.32 64bit (auch ältere ausprobiert)
In virtuellen Maschinen mit mehreren CPUs sind alle Interrupts (eth0,ata_piix) an die einzelne CPU gebunden. Beim Betrieb auf reiner Hardware ist alles in Ordnung.
Habe den E1000-Netzwerktreiber sowie das paravirtualisierte VMXNET3 ausprobiert.
Irgendwelche Vorschläge? Ist es unmöglich, in der virtualisierten Umgebung eine normale IRQ-Affinität zu erreichen?
Antwort1
Tut mir leid, aber das ist eine ziemlich sinnlose Frage, das virtualisierte Hardwaremodell ist eben genau das: virtualisiert. Die Unterbrechungen sind nicht real, die Adapter sind nicht real, jedes „Balancing“, das Sie durchführen, ist nicht real, jede Überlastung von vCPU 0 hierfür ist nicht real. Es gibt keine Möglichkeit, dies auf stabile Weise zu tun, ohne zwei dedizierte NICs mit VT-d durchzureichen und es entsprechend zu konfigurieren.
Antwort2
Könnten Sie, wenn möglich, einige der Symptome benennen? Gibt es eine merkliche Leistungsminderung (1 vCPU blockiert), wenn es seine starken Interrupts ausführt? Ich bin mir nicht sicher, was die offizielle Antwort von VMware ist, aber sie verlassen sich stark auf die Tatsache, dass allerlei „Magie“ passiert, ohne dass das Gastbetriebssystem davon etwas weiß, also ist das vielleicht nur eine Art Abstraktion.
Antwort3
Mit e1000 ist es möglich, diese Interrupts mit „echo 3 > /proc/irq/$irq/smp_affinity“ (3 == 00000010 == core1) auf einen einzelnen Kern zu beschränken. Mit vmxnet3 bleibt es bei core0, was auch immer ich tue. Ob hier nun virtualisiert ist oder nicht, die CPU-Auslastung unter Linux mit Soft-Interrupts und Co., die fast 100 % verbraucht, ist in der Tat sehr real.