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