KVM и Libvirt: плохая производительность процессора/сети гостя

У меня есть хост Arch Linux, на котором работает виртуализированный маршрутизатор.

При использовании гостя LXC в качестве маршрутизатора все в порядке. Я получаю 100 Мбит вверх / вниз и почти не использую процессор.

Однако, когда я использую libvirt gest (pfSense FreeBSD) в качестве маршрутизатора, всякий раз, когда через гостевую систему проходит большой сетевой трафик, загрузка ЦП становится неоправданно высокой (до 100%), но хуже всего то, что пропускная способность сети уменьшается вдвое! У меня максимум 45-49Мбит.

Хост не поддерживает прохождение PCI, так что это моя конфигурация для виртуальной машины libvirtd:

Nic1 (wan)
Network source: Direct ‘eth0’
Source mode: passthrough
Device model: virtio

Nic2 (lan)
Bridge name: br0
Device model: virtio

Вместо этого я попробовал e1000, но это абсолютно ничего не меняет.

Host CPU: AMD A4-5000 Kabini
Guest CPU: default or Opteron_G3

Так было уже больше года, как я начал использовать KVM. Если я не решу эту проблему, мне придется сбросить libvirt, потому что такая производительность недопустима.


person lockheed    schedule 17.12.2016    source источник
comment
pfSense может использовать опрос для повышения производительности, который может не работать должным образом в виртуализированной среде. Внимательное прочтение ifconfig <interface> может оказаться полезным.   -  person kikap    schedule 17.12.2016
comment
Аппаратный опрос отключен. ifconfig показывает это: storage5.static.itmages.com/i/16/ 1217/   -  person lockheed    schedule 17.12.2016
comment
Stack Overflow — это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. раздел О каких темах я могу задать здесь в Справочном центре. Возможно, Суперпользователь или Unix & Linux Stack Exchange лучше спросить. См. также раздел Где размещать вопросы о Dev Ops?   -  person jww    schedule 17.12.2016
comment
Понимаю. Спасибо за указатели.   -  person lockheed    schedule 18.12.2016
comment
Похоже, это скорее проблема libvirt, чем проблема pfSense, потому что у меня есть другая виртуальная машина с Arch Linux, на которой работает hostapd AP, и она демонстрирует ту же проблему.   -  person lockheed    schedule 23.12.2016


Ответы (1)


Довольно сложно диагностировать такого рода проблемы с такой ограниченной информацией. Определенно не используйте e1000 или любую другую модель сетевого адаптера — virtio-net обеспечит наилучшую производительность среди всех виртуализированных сетевых адаптеров. Убедитесь, что на хосте доступен /dev/vhost-net, так как это ускоряет трафик гостевой сетевой карты в пространстве ядра хоста.

Если вы хотите использовать гостевую систему в качестве высокопроизводительного устройства сетевой маршрутизации, существует довольно много способов настроить ее на виртуальную машину в целом. Прикрепление гостевых виртуальных ЦП к конкретным физическим ЦП хоста и отключение других гостей от этих ЦП гарантирует, что гостевой кеш не будет уничтожен из-за вытеснения другими процессами. Затем используйте огромные страницы для гостевой оперативной памяти, чтобы значительно увеличить частоту попаданий в кэш TLB для доступа к гостевой памяти. Если на хосте несколько узлов NUMA, убедитесь, что гостевой ЦП и гостевая оперативная память (hugepages) настроены на получение от одного и того же узла NUMA хоста. Точно так же убедитесь, что обработка IRQ для сетевого адаптера хоста, используемого гостем, имеет сходство, установленное в соответствии с процессорами pCPU, используемыми гостем.

person DanielB    schedule 21.12.2016
comment
Спасибо за идеи. Хост может видеть /dev/vhost-net, и его владельцем является root:kvm, поэтому я думаю, что это правильно. Гостевой процессор — Opteron_G3. Я где-то читал, что это оптимально для хоста AMD Kabini. Боюсь, остальное из того, что вы написали, выходит за рамки моего понимания. Но из того, что вы написали, я понимаю, что это второстепенные потенциальные преступники. - person lockheed; 23.12.2016