LINUX.ORG.RU
ФорумAdmin

Сеть в VM вешается под нагрузкой

 , ,


0

4

Есть двухпроцессорный сервер, debian12 libvirt. В CPU2 подключен 81:00.0 Ethernet controller: Broadcom Inc. and subsidiaries BCM57840 NetXtreme II 10 Gigabit Ethernet (rev 11)
Порт сетевой карты добавлен в br1.

VM с количеством ядер примерно в 2/3 от всего доступного гипервизору virtio драйвером также подключена к br1

В VM наблюдаю картину

root@avreg889:~# iperf3 -c 192.168.236.12
Connecting to host 192.168.236.12, port 5201
[  5] local 192.168.237.152 port 41452 connected to 192.168.236.12 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  2.56 GBytes  22.0 Gbits/sec    0   1.98 MBytes       
[  5]   1.00-2.00   sec  2.10 GBytes  18.0 Gbits/sec    0   2.26 MBytes       
[  5]   2.00-3.00   sec  2.00 GBytes  17.1 Gbits/sec    0   2.26 MBytes       
[  5]   3.00-4.00   sec  2.02 GBytes  17.4 Gbits/sec    0   2.26 MBytes       
[  5]   4.00-5.00   sec  2.14 GBytes  18.4 Gbits/sec    0   2.40 MBytes       
[  5]   5.00-6.00   sec   222 MBytes  1.87 Gbits/sec  4492    206 KBytes       
[  5]   6.00-7.00   sec   111 MBytes   933 Mbits/sec   34    206 KBytes       
[  5]   7.00-8.00   sec   112 MBytes   944 Mbits/sec  113    249 KBytes       
[  5]   8.00-9.00   sec   112 MBytes   944 Mbits/sec    9    246 KBytes       
[  5]   9.00-10.00  sec   111 MBytes   933 Mbits/sec   98    236 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  11.5 GBytes  9.86 Gbits/sec  4746             sender
[  5]   0.00-10.00  sec  11.5 GBytes  9.85 Gbits/sec                  receiver

И при дальнейших тестах вплоть до перезапуска сети VM ~941 Mbits/sec с постоянными retr. В обратную сторону всегда ~941Mbits/s без retr.
Стоит дать нагрузку планируемым приложением внутри VM начинаются подвисания сети и потери пакетов.

Вопрос: что и где надо подкрутить чтобы хотябы просадок сети не было? Приложение в VM планируется гонять до ~1.5Gb/s видео трафика.

Что я пробовал:

  • уменьшить количества ядер VM и cpuset ядер VM на CPU2. Тогда iperf стабильно показывает ~20Gb/s от VM, но не более ~950Mb/s к VM(-R тест)
  • Правил tcp parameter settings как описано тут https://darksideclouds.wordpress.com/2016/10/10/tuning-10gb-nics-highway-to-hell/ на гипервизоре и VM. Вообще не увидел разницы.

PS. Мало знаком с точечной настройкой сети и numa, грешу на какую-то numa магию. Т.к. на домашнем ПК с одним CPU без каких либо настроек iperf хост-VM в обе стороны выдаёт все ~20Gb/s без retr

★★★

Что я пробовал

Также попробовал пробросить сетевую карту силами sriov.

Проверить iperf не с кем (до гипервизора по какой-то причине трафик не ходит, допускаю что криво настроил сеть)
Но приложение всё так-же виснет со временем и также наблюдаю просадки и потери пакетов ping до VM, что трактую как сетевую проблему.

Flotsky ★★★
() автор топика

В порядке убывания правильности (с моей точки зрения):

  1. Переставить сеть в шину к CPU1;
  2. Сделать PCI passthrough карточки внутрь VM;
  3. RTFM в сторону https://docs.kernel.org/networking/scaling.html и https://docs.kernel.org/core-api/irq/irq-affinity.html и https://blog.cloudflare.com/how-to-achieve-low-latency/ и т.п. прибивая RX очереди и TX очереди к своему CPU2.
BOOBLIK ★★★★
()
Ответ на: комментарий от BOOBLIK

Переставить сеть в шину к CPU1;

нет такой возможности

Сделать PCI passthrough карточки внутрь VM;

опробовано комментарием выше, косвенно проблема осталась, может позже придумаю как более точно проверить

RTFM в сторону

Пойду читать…

Flotsky ★★★
() автор топика

Помониторьте /proc/interrupts в момент проблем — какие прерывания лидируют? Проще всего каким-нибудь prometheus или netdata. На худой конец watch -n 5 -d cat /proc/interrupts, если экрана хватит на многоядерной системе. Исключить ядро/драйверы.

Смущают ровно 5 секунд до затыка — как будто планировщик при росте нагрузки влезает.

Что за процессоры? Кто управляет частотой/питанием — сервер или ядро?

anonymous
()
Ответ на: комментарий от anonymous

watch -n 5 -d cat /proc/interrupts, если экрана хватит на многоядерной системе.

ens1f0-fp-X, где X от 0-15. Соответствует имени интерфейса 10Gb/s сетевой карты на которую приходится трафик.
Что кстати странно, в общении участвуют только VM и гипервизор, зачем дёргать физическую сетевую карту?

Что за процессоры? Кто управляет частотой/питанием — сервер или ядро?

CPU E5-2683 v4 @ 2.10GHz, силами tuned включен профиль virtual-host, что подразумевает под собой cpu governor=performance

Flotsky ★★★
() автор топика
Ответ на: комментарий от Flotsky

Сделать PCI passthrough карточки внутрь VM; опробовано комментарием выше, косвенно проблема осталась, может позже придумаю как более точно проверить

Проверил точно. Пробросил другой порт, который подключен к такой-же карточке соседнего гипервизора.

iperf в 3 потока успешно утилизировал весь канал в обе стороны без каких либо проблем.

Flotsky ★★★
() автор топика

ХМ, я совсем неправильно описал проблему.

В VM наблюдаю картину root@avreg889:~# iperf3 -c 192.168.236.12 и всегда 1Gb/s в обратную сторону

Я неправильно запускал тест. У меня на гипервизоре 236.12 это адрес моста с 1Gb/s интерфейсом и br1 мост без IP с 10Gb карточкой и VM.
Поэтому такой iperf тест ходил петлёй через коммутатор с гигабитным портом с одной из сторон.

Почему я после поднятия интерфейса в VM в начале теста видел ~20Gb/s для меня загадка.

Flotsky ★★★
() автор топика