
VMware ESXi 4.1
Invitado: Kernel de Linux 2.6.32 de 64 bits (también probé versiones anteriores)
En una máquina virtual con múltiples CPU, todas las interrupciones (eth0,ata_piix) están pegadas a una única CPU. Cuando se ejecuta en hardware puro, todo está bien equilibrado.
Probé el controlador de red E1000 y VMXNET3 paravirtualizado.
¿Alguna sugerencia? ¿Es imposible conseguir una afinidad irq normal en el entorno virtualizado?
Respuesta1
Lo siento, pero esta es una pregunta inútil, el modelo de hardware virtualizado es solo eso, virtualizado. Las interrupciones no son reales, los adaptadores no son reales, cualquier "equilibrio" que haga no es real, cualquier sobrecarga de vCPU 0 para esto no es real. No hay manera de hacer esto, de manera estable, sin pasar dos NIC dedicadas usando VT-d y configurarlo adecuadamente.
Respuesta2
Si es posible, ¿podría indicar algunos de los síntomas? ¿Hay una degradación notable del rendimiento (1 vCPU vinculada) cuando se realiza una interrupción importante? No estoy seguro de la respuesta oficial de VMware, pero dependen en gran medida del hecho de que todo tipo de "magia" ocurre sin que el sistema operativo invitado lo sepa, por lo que esto puede ser simplemente una especie de abstracción.
Respuesta3
Al usar e1000, es posible fijar esas interrupciones a un solo núcleo con "echo 3 > /proc/irq/$irq/smp_affinity" (3 == 00000010 == core1). con vmxnet3, permanece en core0 haga lo que haga. Independientemente de lo que esté virtualizado o no aquí, la carga de la CPU en Linux con interrupciones suaves y amigos comiendo cerca del 100% es realmente muy real.