VMWare ESXi 4.1
Гость: ядро Linux 2.6.32 64bit (тоже пробовал старую)
В многопроцессорной виртуальной машине все прерывания (eth0, ata_piix) привязаны к одному процессору. При работе на чистом железе все нормально сбалансировано.
Пробовал сетевой драйвер E1000, а также паравиртуализированный VMXNET3.
Какие-либо предложения? Невозможно получить нормальную привязку irq в виртуализированной среде?
Извините, но это что-то вроде бессмысленного вопроса, виртуализированная аппаратная модель просто виртуализирована. Прерывания не реальны, адаптеры не реальны, любая «балансировка», которую вы выполняете, нереальна, любая перегрузка vCPU 0 для этого нереальна. Невозможно сделать это стабильным способом, не имея двух выделенных сетевых адаптеров, переданных через VT-d и настроив их соответствующим образом.
Если возможно, не могли бы вы обозначить некоторые симптомы? Есть ли заметное снижение производительности (привязан 1 виртуальный ЦП), когда он выполняет тяжелое прерывание? Я не уверен в официальном ответе VMware, но они в значительной степени полагаются на тот факт, что все виды «магии» происходят без ведома гостевой ОС, так что это может быть просто своего рода абстракцией.
Используя e1000, можно связать эти прерывания с одним ядром с помощью "echo 3> / proc / irq / $ irq / smp_affinity" (3 == 00000010 == core1). с vmxnet3 он остается на core0, что бы я ни делал. Независимо от того, что здесь виртуализировано или нет, загрузка процессора Linux с мягкими прерываниями и друзьями, которые едят почти на 100%, действительно очень реальна.