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, тремя основными причинами:
- Разработчики iperf — ESnet (Energy Sciences Network) — указывают , что «iperf3 официально не поддерживается в Windows, в отличие от iperf2. Рекомендуется использовать iperf2. Некоторые запускают iperf3 через Cygwin, но не все функции работают».
- iPerf3 эмулируется в Windows — утилита не использует нативные API Windows, а только Linux/POSIX-вызовы, что может снижать производительность.
- Обычно используется 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 , но столкнулся с трудностями — параметры из руководства не работали, пришлось искать правильные настройки.
Тестовая система состоит из четырех основных компонентов:
- Мини-ПК Khadas Mind Premium и док-станция Khadas Dock с 2.5GbE и WiFi 6 под управлением Windows 11 Pro
- Мини-ПК UP Xtreme i11 Edge с 2.5GbE, работающий в качестве сервера под Ubuntu 20.04
- Коммутатор TP-Link с 2.5GbE
- Роутер Xiaomi Mi AX6000 с WiFi 6 (не показан на фото выше)
Мини-ПК 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:
1 2 3 4 |
git clone https://github.com/microsoft/ntttcp-for-linux cd ntttcp-for-linux/src make sudo make install |
Команда для запуска в режиме приемника выглядит следующим образом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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 его можно сразу запустить в режиме отправителя через командную строку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
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 (загрузка):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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 на загрузку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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 от имени администратора, открыть брандмауэр и использовать другие параметры:
1 2 |
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 из-за различий в параметрах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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-адреса на стороне сервера и клиента:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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 КБ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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.
Оригинал статьи вы можете прочитать здесь.