среда, 5 июля 2023 г.

Тестирование производительности сети с iPerf в ВМ с Windows

Часто возникает необходимость определить максимальную скорость передачи данных (Bandwidth) по сети между ВМ.

Помочь в этом может утилита iPerf (https://github.com/esnet/iperf), которая работает под Linux, Windows, MacOS, Android, iOS, FreeBSD и даже ESXi.

Для тестирования скорости на одной ВМ достаточно запустить iperf с ключом -s, данная ВМ будет выполнять роль сервера, а на второй ВМ выполнить iperf -c <IP_адрес_сервера>.

Но если речь идет о тестировании производительности в сети 10 Гбит/с или выше, то при запуске теста с настройками по умолчанию вы редко сможете увидеть максимально возможную скорость передачи данных.

Ниже приведены рекомендации и ссылки на сторонние ресурсы, которые позволят добиться более высокой скорости передачи данных в тестах. Важно отметить, что не все из них применимы применимы при оптимизации ВМ под реальные нагрузки, а при необходимости достижения минимальных задержек или максимального кол-ва передаваемых пакетов (packet rate) некоторые из рекомендаций, наоборот, приведут к худшим результатам.

1. Если вы планируете использовать скомпилированные бинарники под Windows, а не собирать iPerf из исходников, используйте версию iperf 2.1.9 (https://sourceforge.net/projects/iperf2/files/). Несмотря на то, что версия 3.13 с сайта https://files.budman.pw/ выглядит новее, маханизмы генерации нагрузки на сеть в iperf2 и iperf3 сильно различаются, и при одинаковых настройках iperf2 может демонстрировать скорость на 10-20% выше, чем iperf3.

2. Запускайте тесты с дополнительными параметрами для утилизации максимальной сетевой полосы, например: 

 iperf -c IP -t10 -P8 -N -w1M

  • где -t - время тестирования в секундах;
  • -P - количество одновременных соединений (можете начать с -P2 и постепенно увеличивать значение параметра, пока не достигните максимальной полосы; при использовании данного параметра можно проверить агрегацию нескольких физических интерфейсов при использовании LACP или Static Etherchannel с балансировкой нагрузки по source port);
  • -N - включение TCP No Delay;
  • -w - размер TCP Window Size в байтах, K - килобайтах, M - магабайтах;
  • -l - размер буфера на прием или отправку данных;
  • -p - указывает номер порта для подключения. По умолчанию используется порт 5001;
  • -R - запустить передачу данных в обратном направлении, по умолчанию клиент передает данные на сервер, при установке опции -R можно протестировать скорости передачи данных от сервера к клиенту;
  • -M - размер MTU при передаче кадров;
  • -O - (доступно только для iPerf3) позволяет пропустить первые несколько секунд при подсчете средней скорости передачи данных. 

3. Оптимизируйте аппаратную конфигурацию ВМ. Выделите не менее 2 vCPU для ВМ при тестировании 10 Гбит/с сети и 4 vCPU или больше при тестировании сети в 25 Гбит/с. При необходимости настройте резервирование CPU и RAM для ВМ, чтобы исключить возможную переподписку ресурсов.

Отключите поддержку CPU Hot Plug в ВМ.

Установите параметр Latency Sensitivity в Normal в свойствах ВМ. Хотя Latency Sensitivity рекомендуется включать в High для ВМ, в которых работают приложения, критичные к задержкам, эта настройка может немного снизить максимальную доступную полосу пропускания для сетевого трафика.

4. Установите обновления для гостевой ОС и временно остановите сервисы, которые могут повлиять на тестирование: Windows Firewall, Windows Update, Windows Defender.

5. Выберите для ВМ подходящий сетевой адаптер. Выбором по умолчанию можно считать VMXNET3, который обеспечивает хороший баланс между производительностью, совместимостью с гостевыми ОС и поддержкой ВМ различных функций, вроде vMotion, снапшотов или High Availability. Но для специфических сценариев, в которых требуется большая производительности и более низкие задержки, может потребоваться заменить VMXNET3 на SR-IOV адаптер или физическую сетевую карту, проброшенную в ВМ напрямую (VMDirectPath I/O).

6. Обновите драйверы и прошивки на физических сетевых картах. Встроенный в дистрибутив (Inbox) драйвер не всегда является лучшим вариантом, и его обновление может дать ощутимый прирост производительности, избавить от ошибок, а также добавить для сетевой карты поддержку новых функций, вроде Receive Side Scaling Version 2. Перед обновлением ознакомьтесь с таблицей совместимости адаптеров и гипервизора и рекомендуемых вендоров версий драйверов и прошивок на сайте https://www.vmware.com/resources/compatibility/search.php?deviceCategory=io - это избавит вас от потенциальных проблем при использовании неподдерживаемых конфигураций.

7. Включите поддержку Jumbo Frames (MTU 9000) на физических и виртуальных коммутаторах, а также сетевых адаптерах в гостевых ОС.

Включение Jumbo Frames на виртуальном коммутаторе: https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-networking/GUID-53F968D9-2F91-41DA-B7B2-48394D997F2A.html

Включение Jumbo Frames на VMXNET3 адаптере:

8. Проверьте, что механизмы offload и оптимизации сети включены в гостевой ОС.

Проверьте, что на хостах и в гостевых ОС включен TCP Segmentation Offload: https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-networking/GUID-E105A601-9331-496C-A213-F76EA3863E31.html

Проверьте, что на хостах и в гостевых ОС включен Large Receive Offload: https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-networking/GUID-514BC149-CDE7-4E07-A922-E3DFB663DC13.html

Проверьте, что в гостевых ОС включен Receive Side Scaling: https://kb.vmware.com/s/article/2008925

9. Обновите VMware Tools. Проверьте совместимость гостевой ОС с версией гипервизора (https://www.vmware.com/resources/compatibility/search.php?deviceCategory=software), а также с актуальными версиями VMware Tools: https://docs.vmware.com/en/VMware-Tools/12.2/rn/vmware-tools-1225-release-notes/index.html VMware Tools содержат в себе обновления драйверов виртуальных устройтв, которые могут значительно ускорить работу сети.

10. Обновите VM Hardware Version. Проверьте совместимость гостевой ОС и гипервизора (https://kb.vmware.com/s/article/1003746) и обновитесь до самой актуальной версии VM Hardware (https://kb.vmware.com/s/article/1010675). Помимо новых функций для самой ВМ, VM Hardware также обновляет версии используемых виртуальных устройств, например:

  • VM HW версии 14 (начиная с ESXi 6.7) поддерживает VMXNET3 версии 4.
  • VM HW версии 17 (начиная с ESXi 7.0) поддерживает VMXNET3 версии 5.
  • VM HW версии 19 (начиная с ESXi 7.0U2) поддерживает VMXNET3 версии 7.
  • VM HW версии 20 (начиная с ESXi 8.0) поддерживает VMXNET3 версии 8.

Новые версии VMXNET3 добавляют в гостевые ОС поддержку новых возможностей offload, расширяют интеграцию с DPDK, увеличивают максимальные размеры буферов и MTU: https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-789C3913-1053-4850-A0F0-E29C3D32B6DA.html

11. Перед тем как переходить к тестированию сети с физическими сетевыми адаптерами и коммутаторами проведите тесты между ВМ, размещенными на одном хосте и подключенными к одному виртуальному коммутатору. Это позволит определить - не является ли гостевая ОС или конфигурация ВМ узким местом.

12. Протестируйте нагрузку с ВМ под Linux. VMXNET3 и E1000E адаптеры с актуальными версиями драйверов под Linux обеспечивают большую скорость передачи данных. Если цель заключается не в тестировании конкретной ВМ с гостевой ОС Windows, а виртуальных коммутаторов, гипервизора и оборудования, то попробуйте заменить гостевую ОС на Ubuntu или Debian. ;-)


Комментариев нет:

Отправить комментарий