Тестирование ntttcp как альтернативы iperf3 в Windows 11 (и Linux)

ntttcp (Windows NT Test TCP) — это утилита для тестирования сети, аналогичная iperf3, которая работает как в Windows, так и в Linux. Разработана и рекомендуется Microsoft вместо iperf3, поэтому проведем мини-обзор этой альтернативы.

iperf3 — стандартный инструмент для обзоров одноплатных компьютеров и мини-ПК под управлением Windows или Linux. Однако замечено, что хотя Ethernet (до 2.5GbE) обычно показывает схожую производительность в обеих ОС, Wi-Fi в Ubuntu 22.04 работает значительно быстрее, чем в Windows 11. Когда XDA developers обратили внимание на сообщение Microsoft о том, что iperf3 не следует использовать в Windows 11, это привлекло внимание.

Microsoft объясняет, почему iperf3 не рекомендуется использовать в Windows, тремя основными причинами:

  1. Разработчики iperf — ESnet (Energy Sciences Network) — указывают , что «iperf3 официально не поддерживается в Windows, в отличие от iperf2. Рекомендуется использовать iperf2. Некоторые запускают iperf3 через Cygwin, но не все функции работают».
  2. iPerf3 эмулируется в Windows — утилита не использует нативные API Windows, а только Linux/POSIX-вызовы, что может снижать производительность.
  3. Обычно используется iperf3 версии 3.1.3 для Windows выпущенная в 2016 , но Microsoft отмечает, что версия от ESnet (3.16) новее, но все равно отстает на 15 версий, поэтому пользователи не получают актуальные обновления.

Какие альтернативы предлагает Microsoft? Поддерживаются две утилиты:

  • ntttcp (Windows NT Test TCP) — открытая утилита для Windows и Linux с командной строкой, похожей на iperf3. По словам Microsoft, она предназначена для точного измерения пропускной способности сетевого стека.
  • ctsTraffic — только для тестов между системами Windows, также открытая и доступная на Github . ctsTraffic фокусируется на сценариях end-to-end goodput.

ctsTraffic не подходит для тестов CNX Software, так как обычно используются смешанные системы (Linux и Windows). Microsoft сравнивала iperf3 и ntttcp на высокоскоростных интерфейсах (10 GbE+), где последний показывает лучшие результаты. В наличии только оборудование с 2.5GbE и Wi-Fi 6, но тестирование все равно было проведено, особенно для проверки Wi-Fi. Решил попробовать ntttcp, следуя инструкциям на Microsoft Learn , но столкнулся с трудностями — параметры из руководства не работали, пришлось искать правильные настройки.

ntttcp vs iperf3 testbed

Тестовая система состоит из четырех основных компонентов:

Мини-ПК Khadas Mind Premium был выбран, так как это единственная запасная система с Windows, оснащенная 2.5GbE и WiFi 6, которая уже проходила тестирование. Сравнение сетевых тестов в Windows 11 и Ubuntu 22.04 с использованием iperf3 показывает значительно более низкую производительность в ОС Microsoft, как видно из таблицы ниже.

WiFi 6 Tx WiFi 6 Rx 2.5GbE Tx 2.5GbE Rx
WIndows 11 Home 712 Mbps 590 Mbps 700 Mbps 2.30 Gbps
Ubuntu 22.04 1.40 Gbps 991 Mbps 2.35 Gbps 2.35 Gbps

Мини-ПК Khadas демонстрирует аномально низкую скорость загрузки через 2.5GbE, но во всех обзорах мини-ПК WiFi работает быстрее в Linux. Поскольку обзор Mind Premium проводился ранее (август 2023), Windows была обновлена до последней версии с новейшими драйверами, и сетевые тесты с iperf3 и ntttcp в Windows 11 Home были повторены с использованием тех же параметров командной строки, что и в блоге Microsoft.

Первым шагом была установка ntttcp (Linux) на мини-ПК UP Xtreme i11 под Ubuntu 20.04:

git clone https://github.com/microsoft/ntttcp-for-linux
cd ntttcp-for-linux/src
make
sudo make install

Команда для запуска в режиме приемника выглядит следующим образом.

devkit@UPX-i11:~/ntttcp-for-linux$ ntttcp -r -m 1,*,192.168.31.12 -t 60 -V
NTTTCP for Linux 1.4.0
---------------------------------------------------------
*** receiver role
ports:				 1
cpu affinity:			 *
server address:			 192.168.31.12
domain:				 IPv4
protocol:			 TCP
server port starting at:	 5001
receiver socket buffer (bytes):	 65536
test warm-up (sec):		 no
test duration (sec):		 60
test cool-down (sec):		 no
show system tcp retransmit:	 no
quiet mode:			 disabled
verbose mode:			 enabled
---------------------------------------------------------
12:25:30 DBG : user limits for maximum number of open files: soft: 1024; hard: 1048576
12:25:30 DBG : Interface:[lo]	Address: 127.0.0.1
12:25:30 DBG : Interface:[enp44s0]	Address: 192.168.31.12
12:25:30 DBG : Interface:[docker0]	Address: 172.17.0.1
12:25:30 DBG : Interface:[flannel.1]	Address: 10.42.0.0
12:25:30 DBG : Interface:[cni0]	Address: 10.42.0.1
12:25:30 INFO: 2 threads created
12:25:30 DBG : ntttcp server is listening on 192.168.31.12:5001
12:25:30 DBG : ntttcp server is listening on 192.168.31.12:5000
12:25:47 DBG : New connection: 192.168.31.69:50666 --> local:10000 [socket 6]
socket read error: 104
12:26:11 DBG : socket closed: 6
12:26:32 DBG : New connection: 192.168.31.69:50675 --> local:10000 [socket 6]
socket read error: 104
12:26:37 DBG : socket closed: 6
12:26:49 DBG : New connection: 192.168.31.69:50683 --> local:10000 [socket 6]

Используется только одно ядро для эмуляции iperf3, а параметр V (verbose) помогает в диагностике проблем. После загрузки исполняемого файла ntttcp.exe в Windows его можно сразу запустить в режиме отправителя через командную строку:

C:\Users\jaufr\Downloads>ntttcp.exe -s -m 1,*,192.168.31.12 -l 128K -t 60 -V
Copyright Version 5.39
buffers_length: 131072
num_buffers_to_send: 9223372036854775807
send_socket_buff: -1
recv_socket_buff: -1
port: 5001
sync_port: 0
no_sync: 0
wait_timeout_milliseconds: 600000
async_flag: 0
verbose_flag: 1
wsa_flag: 0
use_ipv6_flag: 0
send_flag: 1
udp_flag: 0
udp_unconnected_flag: 0
verify_data_flag: 0
wait_all_flag: 0
run_time: 60000
warmup_time: 0
cooldown_time: 0
dash_n_timeout: 10800000
bind_sender_flag: 0
sender_name:
max_active_threads: 1
no_delay: 0
node_affinity: -1
udp_uso_size: 0
udp_receive_coalescing: 0
tp_flag: 0
use_hvsocket_flag: 0
no_stdio_buffer: 0
throughput_Bpms: 0
cpu_burn: 0
latency_measurement: 0
use_io_compl_ports: 0
cpu_from_idle_flag: 0
get_estats: 0
qos_flag: 0
packet_period: 0
jitter_measurement: 0
mapping[0]: 1
4/21/2024 10:10:45 proc_speed: 2611 MHz
4/21/2024 10:10:45 SetupThreads
4/21/2024 10:10:45 Threads: 1   Processor: -1   Host: 192.168.31.12
4/21/2024 10:10:45 created thread 0 port 5001
4/21/2024 10:10:45 StartSenderReceiver start thread 0 port 5001
4/21/2024 10:10:45 SetupNet port 5001
4/21/2024 10:10:45 connected to port 5001
4/21/2024 10:10:45 SetupNet complete on port 5001
4/21/2024 10:10:45 All threads ready!
4/21/2024 10:10:45 SetupNet port 6001
4/21/2024 10:10:47 ERROR: SetupNet failed: Connect attempt failed, GetLastError: 10061 - No connection could be made because the target machine actively refused it.
4/21/2024 10:10:47 PORT#: 6001
4/21/2024 10:10:49 ERROR: SetupNet failed: Connect attempt failed, GetLastError: 10061 - No connection could be made because the target machine actively refused it.

Однако, как видно из лога выше, результат оказался неожиданным. Оказалось, что для тестов между Windows и Linux необходимо использовать параметр «ns» (No Sync). Это упоминается в блоге Microsoft

Известное ограничение при тестировании между Windows и Linux. Подробности можно найти в статье на GitHub о ntttcp для Linux .

На поиск решения ушло несколько часов, но после его применения удалось завершить тест WiFi 6 Tx (загрузка):

C:\Users\jaufr\Downloads>ntttcp.exe -s -m 1,*,192.168.31.12 -l 128K -t 60 -ns
Copyright Version 5.39
Network activity progressing...


Thread  Time(s) Throughput(KB/s) Avg B / Compl
======  ======= ================ =============
     0   60.011       100476.513    131072.000


#####  Totals:  #####


   Bytes(MEG)    realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
     5888.375000      60.009       1459.307           98.125


Throughput(Buffers/s) Cycles/Byte       Buffers
===================== =========== =============
              785.001       4.024     47107.000


DPCs(count/s) Pkts(num/DPC)   Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
      906.366         4.807        3218.159          1.354


Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
     4231054           261456           5      0      0.991

98.125 МБ/с или около 785 Мбит/с — немного лучше, чем с iperf3, но все равно значительно ниже производительности в Linux.

Затем был подключен Ethernet-кабель для теста 2.5GbE на загрузку:

C:\Users\jaufr\Downloads>ntttcp.exe -s -m 1,*,192.168.31.12 -l 128K -t 60 -ns
Copyright Version 5.39
Network activity progressing...


Thread  Time(s) Throughput(KB/s) Avg B / Compl
======  ======= ================ =============
     0   60.015        90110.806    131072.000


#####  Totals:  #####


   Bytes(MEG)    realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
     5281.250000      60.014       1458.979           88.000


Throughput(Buffers/s) Cycles/Byte       Buffers
===================== =========== =============
              703.998       3.927     42250.000


DPCs(count/s) Pkts(num/DPC)   Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
    11814.824         0.449       31926.446          0.166


Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
     3795663           318708           1      0      0.867

88 МБ/с или 704 Мбит/с — практически тот же результат, что и с iperf3, даже после обновления драйверов.

iperf3 поддерживает обратную передачу, но в ntttcp такой опции нет. Поэтому пришлось вручную запускать ntttcp.exe в режиме приемника на Windows и ntttcp в режиме отправителя на Linux. Для этого потребовалось запустить CMD от имени администратора, открыть брандмауэр и использовать другие параметры:

netsh advfirewall firewall add rule program=C:\Users\jaufr\Downloads\ntttcp.exe name="ntttcp" protocol=any dir=in action=allow enable=yes profile=ANY
C:\Users\jaufr\Downloads>ntttcp.exe -r -m 1,*,192.168.31.141 -ns -t 60 -V

Команда для отправителя на Ubuntu отличается от аналогичной команды для Windows из-за различий в параметрах:

devkit@UPX-i11:~/ntttcp-for-linux$ ntttcp -s -m 1,*,192.168.31.141 -b 128K -N -t 60 -V 
NTTTCP for Linux 1.4.0
---------------------------------------------------------
*** sender role
*** no sender/receiver synch
connections:			 1 X 1 X 1
cpu affinity:			 *
server address:			 192.168.31.141
domain:				 IPv4
protocol:			 TCP
server port starting at:	 5001
sender socket buffer (bytes):	 131072
test warm-up (sec):		 no
test duration (sec):		 60
test cool-down (sec):		 no
show system tcp retransmit:	 no
quiet mode:			 disabled
verbose mode:			 enabled
---------------------------------------------------------
14:45:55 DBG : user limits for maximum number of open files: soft: 4096; hard: 4096
14:45:55 INFO: Starting sender activity (no sync) ...
14:45:55 INFO: 1 threads created
14:45:55 DBG : New connection: local:42880 [socket:3] --> 192.168.31.141:5001
14:45:55 INFO: 1 connections created in 1708 microseconds
14:46:55 INFO: Test run completed.
14:46:55 INFO: Test cycle finished.
14:46:55 INFO: 	Thread	Time(s)	Throughput
14:46:55 INFO: 	======	=======	==========
14:46:55 INFO: 	0	 60.00	 2.28Gbps
14:46:55 INFO: 1 connections tested
14:46:55 INFO: #####  Totals:  #####
14:46:55 INFO: test duration	:60.00 seconds
14:46:55 INFO: total bytes	:17068195840
14:46:55 INFO: 	 throughput	:2.28Gbps
14:46:55 INFO: 	 retrans segs	:54998
14:46:55 INFO: cpu cores	:8
14:46:55 INFO: 	 cpu speed	:2000.462MHz
14:46:55 INFO: 	 user		:0.46%
14:46:55 INFO: 	 system		:0.78%
14:46:55 INFO: 	 idle		:97.94%
14:46:55 INFO: 	 iowait		:0.00%
14:46:55 INFO: 	 softirq	:0.82%
14:46:55 INFO: 	 cycles/byte	:1.16
14:46:55 INFO: cpu busy (all)	:5.16%
14:46:55 INFO: tcpi rtt		:397 us

Несмотря на это, тест был выполнен. Стоит отметить, что ожидания от утилиты ntttcp были завышены. Единственное преимущество — дополнительные данные, такие как загрузка CPU во время передачи. 2.28 Гбит/с — ожидаемый результат для соединения 2.5GbE.

Обычно для теста WiFi 6 с iperf3 Ethernet-кабель отключается, и команда повторяется. Но здесь также потребовалось изменить IP-адреса на стороне сервера и клиента:

devkit@UPX-i11:~/ntttcp-for-linux$ ntttcp -s -m 1,*,192.168.31.69 -b 128K -N -t 60
NTTTCP for Linux 1.4.0
---------------------------------------------------------
14:54:58 INFO: Starting sender activity (no sync) ...
14:54:58 INFO: 1 threads created
14:54:58 INFO: 1 connections created in 6716 microseconds
14:55:58 INFO: Test run completed.
14:55:58 INFO: Test cycle finished.
14:55:58 INFO: 1 connections tested
14:55:58 INFO: #####  Totals:  #####
14:55:58 INFO: test duration	:60.00 seconds
14:55:58 INFO: total bytes	:4530110464
14:55:58 INFO: 	 throughput	:604.01Mbps
14:55:58 INFO: 	 retrans segs	:0
14:55:58 INFO: cpu cores	:8
14:55:58 INFO: 	 cpu speed	:2800.000MHz
14:55:58 INFO: 	 user		:0.53%
14:55:58 INFO: 	 system		:0.41%
14:55:58 INFO: 	 idle		:99.01%
14:55:58 INFO: 	 iowait		:0.00%
14:55:58 INFO: 	 softirq	:0.04%
14:55:58 INFO: 	 cycles/byte	:2.93
14:55:58 INFO: cpu busy (all)	:1.98%

604 Мбит/с — улучшения не наблюдается.

WiFi 6 Tx WiFi 6 Rx 2.5GbE Tx 2.5GbE Rx
iperf3 551 Mbps 608 Mbps 736 Mbps 2.30 Gbps
ntttcp 785 Mbps 604 Mbps 704 Mbps 2.28 Gbps

В таблице выше приведены результаты повторного запуска iperf3. Хотя ntttcp показывает более высокую скорость загрузки через WiFi 6, остальные результаты практически не изменились. Вероятно, эта утилита имеет значение только для высокоскоростных сетей с подключением 10GbE и выше.

Вышеуказанные тесты проводились для сравнения ntttcp и iperf3 с аналогичными параметрами, но Microsoft рекомендует использовать многопоточность и увеличенный размер буфера для измерения пропускной способности. Повторим тест WiFi 6 на загрузку с 8 потоками и размером буфера 1024 КБ:

devkit@UPX-i11:~/ntttcp-for-linux$ ntttcp -s -m 8,*,192.168.31.69 -b 1024K -N -t 60
NTTTCP for Linux 1.4.0
---------------------------------------------------------
15:00:06 INFO: Starting sender activity (no sync) ...
15:00:06 INFO: 8 threads created
15:00:06 INFO: 8 connections created in 5242 microseconds
15:01:06 INFO: Test run completed.
15:01:06 INFO: Test cycle finished.
15:01:06 INFO: 8 connections tested
15:01:06 INFO: #####  Totals:  #####
15:01:06 INFO: test duration	:60.00 seconds
15:01:06 INFO: total bytes	:4234149888
15:01:06 INFO: 	 throughput	:564.55Mbps
15:01:06 INFO: 	 retrans segs	:573
15:01:06 INFO: cpu cores	:8
15:01:06 INFO: 	 cpu speed	:2800.000MHz
15:01:06 INFO: 	 user		:0.52%
15:01:06 INFO: 	 system		:0.54%
15:01:06 INFO: 	 idle		:98.62%
15:01:06 INFO: 	 iowait		:0.00%
15:01:06 INFO: 	 softirq	:0.32%
15:01:06 INFO: 	 cycles/byte	:4.39
15:01:06 INFO: cpu busy (all)	:2.90%
---------------------------------------------------------

564 Мбит/с — медленнее, чем с одним потоком и буфером 128 КБ, хотя результаты WiFi могут варьироваться.

На основании проведенных тестов разница между iperf3 и ntttcp минимальна. Утилита ntttcp для Linux не обновлялась более трех лет, поэтому предпочтение остается за iperf3 для сетевых тестов в обзорах мини-ПК на Windows…

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments