Администрирование Windows Почему iPerf3 не стоит использовать на Windows Sat, February 22 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Почему iPerf3 не стоит использовать на Windows Печать
Добавил(а) microsin   

Утилита iperf широко используется для проверки каналов связи. Существует её порт на Windows - iperf3, однако у версии Windows есть определенные ограничения. В этой статье описываются 3 основные причины, по которым на Windows лучше использовать ntttcp и ctsTraffic вместо iperf3 (перевод статьи [1]).

[Причина 1: Windows не поддерживает ESnet]

Утилитой iPerf3 владеет и поддерживает её организация ESnet (Energy Sciences Network). Она не только официально не поддерживают iPerf3 на Windows, но и не рекомендует это делать. Рекомендация состоит в использовании iPerf2.

Microsoft не рекомендует использовать iPerf3 по другой причине.

[Причина 2: iPerf3 эмулируется на Windows]

Утилита iPerf3 не использует родные API-вызовы Windows. Она только знает, как делаются вызовы Linux/POSIX.

Комьюнити iPerf3 использует Cygwin в качестве слоя эмуляции, чтобы заставить iPerf3 работать на Windows. Вы можете прочитать больше подробностей про Cygwin в их FAQ [2].

iPerf3 вызовы передаются в библиотеку Cygwin, которая транслирует их в вызовы Windows API. И только посте этого в игру вступает сетевой стек Windows. Разработчики iPerf3 на Windows постарались многое сделать для того, чтобы все работало, однако аналогичная совместимость и работоспособность, которая доступна на Linux, все же не обеспечивается.

Не все функции iPerf3 будут работать на Windows. Основные опции работают хорошо, но продвинутые возможности, необходимые для некоторых тестов сети, либо могут вообще не работать, либо их поведение может быть неожиданным. Эмуляция имеет тенденцию к деградации производительности. В результате результаты тестов, чувствительных к задержке, могут показать более низкую, чем ожидалось, пропускную способность.

И наконец, iPerf3 использует необычные опции Windows Socket (winsock) по сравнению с собственными приложениями Windows. Для общего тестирования пропускной способности это допустимо. Для тестирования приложений нестандартные параметры сокета не будут имитировать реальное поведение традиционного приложения Windows.

[Причина 3: вероятно вы используете старую версию iPerf3]

UPDATE (22 апреля 2024): iperf.fr больше не обслуживает старые бинарники Windows iPerf3. Сайт теперь ссылается на другие сайты, активно поддерживающие бинарники iPerf3 для Windows.

Самая свежая версия iPerf3 для Windows на сайте iperf.fr: 3.1.3 от 8 июня 2016. Эта специфическая копия iPerf3 включает версию cygwin1.dll, которая содержит баг, ограничивающий размер буфера сокета до 1 1MB. Это приведет к плохой производительности в сетях с малыми задержками и высокой полосой пропускания, потому что iPerf3 не сможет поместить на лету достаточно данных данных, чтобы насытить сетевое соединение, в результате получатся неправильные результаты тестирования.

Текущая версия iPerf3, непосредственно скачанная с сайта ESnet, 3.16. Из статьи "Obtaining iPerf3" на сайте ESnet говорится: "Бинарный код iperf3 для Windows (построенный на основе Cygwin) можно найти в различных местах, включая https://files.budman.pw/".

[Что рекомендует Microsoft]

Microsoft поддерживает два синтетических инструмента тестирования производительности сети: ntttcp (Windows NT Test TCP) и ctsTraffic. Самая новая версия ntttcp поддерживается на GitHub. Эта утилита Windows задействует сетевую подсистему так же, как это делают традиционные приложения Windows.

Но как быть с Linux? Существует также и Linux-версия ntttcp, поддерживаемая на GitHub [5]. Она работает на отдельной кодовой базе для Linux, совместимой с ntttcp для Windows, но она не идентична версии Windows. Утилита ntttcp позволит вам запускать синтетические тесты сети между Windows и Windows, Linux и Linux, и меньше Windows и Linux.

Утилита ctsTraffic выполняет тесты только Windows-Windows. В то время как ntttcp больше похожа на iPerf3, у ctsTraffic другой набор опций и целевых применений. ctsTraffic фокусируется на сквозных сценариях, в то время как ntttcp и iPerf3 больше внимания уделяют изоляции пропускной способности сетевого стека.

Команда Azure написала хорошую статью про базовый функционал ntttcp для Windows и Linux [6]. Существуют некоторые ограничения по взаимодействию между Windows и Linux. Подробности можно найти в статье на GitHub [7].

[Тестирование]

Автор статьи [1] построил тестовый стенд на основе двух виртуальных машин Windows Server 2022. Использовались самые новые на момент тестирования версии iPerf3 (3.16), ntttcp (5.39) и ctsTraffic (2.0.3.3). Утилиты ntttcp and ctsTraffic в тестах настраивались так, чтобы лучше соответствовать одиночному соединению iPerf3 с буфером 128KB. Для анализа использовались однопоточные тесты, поскольку многие приложения не используют многопоточную передачу.

Для тестирования не забудьте разрешить сетевой трафика на Windows Defender Firewall.

iPerf3. Команда сервера iPerf3:

iperf3 -s

Команда клиента iPerf3:

iperf3 -c < IP> -t 60

Усредненный результат пропускной способности нескольких тестов показал около 7.5 Gbps. Самый высокий показатель был 8.5 Gbps, самый низкий 5.26 Gbps.

ntttcp. Команда сервера Ntttcp:

ntttcp -r -m 1,*,< IP> -t 60

Команда клиента Ntttcp:

ntttcp -s -m 1,*,< IP> -l 128K -t 60

Усредненный результат пропускной способности нескольких тестов показал около 12.75 Gbps. Самый высокий показатель был 13.5 Gbps, самый низкий 12.5 Gbps.

Ntttcp делает нечто, что называют получением предварительной проводки (pre-posting receives), что является уникальным для этого инструмента. Это сокращает время ожидания приложения как часть изоляции сетевого стека, позволяя получить ускоренную реакцию приложения на сообщения сокета.

Опции Ntttcp:

-r для приемника трафика, -s для отправителя трафика.

-m указывает набор параметров соединения: < num threads> (количество потоков), < CPU affinity> (используемые процессоры), < Target IP> (целевой адрес). В показанном выше примере используется один поток, без привязки CPU (*), и обе стороны -r и -s используют целевой адрес IP.

-t задает время теста в секундах.

-l устанавливает длину буфера. Здесь вы можете использовать сокращения K|M|G для кило-, мега- и гига-байт.

ctsTraffic. Следующие команды запускались в PowerShell, чтобы упростить чтение результатов.

Команда сервера ctsTraffic:

.\ctstraffic.exe -listen:* -Buffer:"$(128KB)" -Transfer:"$(1TB)"
 -ServerExitLimit:1 -consoleverbosity:1 -TimeLimit:60000

Команда клиента ctsTraffic:

.\ctstraffic.exe -target:< IP> -Connections:1 -Buffer:"$(128KB)"
 -Transfer:"$(1TB)" -Iterations:1 -consoleverbosity:1 -TimeLimit:60000

Получился средний результат около 9.2 Gbps. Т. е. это работало несколько быстрее и более целостно, чем у iPerf3, но не так быстро, как ntttcp. Две основные причины, по которым ctsTraffic медленнее - проверка целостности данных и использование рекомендованной модели ввода-вывода с перекрытием (overlapped IO model). Это означает, что ctsTraffic использует один ожидающий прием против pre-posting receives у ntttcp.

Опции ctsTraffic:

-Buffer длина буфера.

-Transfer количество данных, посылаемых на итерацию.

-Iterations/-ServerExitLimit количество передаваемых наборов данных.

-Connections количество используемых конкурентных потоков TCP.

-TimeLimit количество миллисекунд, в течение которых работает тест. Тест остановится, когда истечет лимит времени, даже если итерация передачи не была еще завершена.

[Ссылки]

1. Three Reasons Why You Should Not Use iPerf3 on Windows site:microsoft.com.
2. Cygwin FAQ site:cygwin.com.
3. Как измерить полосу пропускания канала сети (iperf).
4. FreeBSD: установка iperf.
5. microsoft / ntttcp-for-linux.
6. Test VM network throughput by using NTTTCP site:microsoft.com.
7. How to interop with Windows NTttcp?

 

Добавить комментарий


Защитный код
Обновить

Top of Page