2025 год начался с короткого затишья текущих проектов, возникла идея поковырять тему нагрузочного испытания радиоподсистемы Wi-Fi. Основная сложность и основной вопрос всех нагрузочных тестов - Чем нагрузить? Вот этот вопрос попробуем разобрать в этой статье ...
Собираем стенд

Стенд состоит из:
испытуемой точки доступа;
контроллер (в нашем случае виртуальный);
ПК с развернутым сервером LibreSpeetTest;
20 обычных офисных ноутбуков.
Ноутбуки раскладываем по столам для максимального приближения к реальным условиям. Измерения планируем на выходной день для минимизации влияния существующих беспроводных сетей, в пустом офисе активность их минимальна, хотя утилизация радиочастотного спектра в пустом офисе не нулевая:

Для минимизации вероятности организации «бутылочного горлышка» точку доступа подключаем непосредственно к серверу через мультигигабитный (1/2.5/10 Gbps) медный интерфейс. Перечень тестовых устройств:
№ |
Model |
Adapter |
Driver |
IP |
1 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.101 |
2 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.102 |
3 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.103 |
4 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.104 |
5 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.105 |
6 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.106 |
7 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.107 |
8 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.108 |
9 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.109 |
10 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.110 |
11 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.111 |
12 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.112 |
13 |
Lenovo ThinkBook 13s |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.113 |
14 |
Lenovo ThinkPad E13 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.114 |
15 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.115 |
16 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.116 |
17 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.117 |
18 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.118 |
19 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.119 |
20 |
Lenovo ThinkPad E14 |
Intel(R) Wi-Fi 6 AX201 160MHz |
22.40.0.7 (larEnabled=0) |
192.168.1.120 |
21 |
Xiaomi 13 (2211133G) |
Qualcomm Snapdragon 8 Gen 2 |
- |
- |
Тест точка - несколько клиентов
Сложность в том чтобы организовать запуск теста скорости на всех клиентах одновременно, для этого используем librespeed/speedtest-cli, на всякий случай выложу уже готовый скомпилированный файл librespeed-cli-windows-amd64.7z.
Для того чтобы программа не искала сервер самостоятельно, есть возможность указать ему конкретный URL в файле server.json. В нашем случае содержимое файла выглядит так:
[
{
"id": 1,
"name": "PHP Backend",
"server": "http://192.168.1.254/backend",
"dlURL": "garbage.php",
"ulURL": "empty.php",
"pingURL": "empty.php",
"getIpURL": "getIP.php"
}
]
При этом запустить программу из консоли ��ледует конструкцией вида:
librespeed-cli-windows-amd64.exe --local-json server.json
Осталось придумать как же запустить эту конструкцию на всех клиентах одновременно?
Возможно, кто-то придумает более изящное решение, мне показалось наиболее простым способом будет запуск скрипта на сервере, который по SSH подключается к хостам по списку из файла HOSTS_FILE="hosts.txt" и запускает описанную выше конструкцию. Перед запуском скрипта необходимо в папки с учетной записью admin на все тестовые устройства раскидать ssh ключ, для того чтобы не запрашивались учетные данные. Собственно, вот и сам скрипт:
#!/bin/bash
# Файл с адресами ПК
HOSTS_FILE="hosts.txt"
# Файл для сохранения результатов
OUTPUT_FILE="results.txt"
# Очищаем файл с результатами перед запуском
> $OUTPUT_FILE
# Функция для выполнения команды на удаленном ПК
run_command() {
local host=$1
echo "Подключение к $host..."
# Выполняем команду и фильтруем вывод
ssh admin@$host 'librespeed-cli-windows-amd64.exe --local-json server.json' >> $OUTPUT_FILE
if [ $? -eq 0 ]; then
echo "Команда выполнена успешно на $host"
else
echo "Ошибка при выполнении команды на $host"
fi
}
# Проходим по каждому хосту из файла
while IFS= read -r host; do
run_command "$host" &
done < "$HOSTS_FILE"
# Ждем завершения всех фоновых процессов
wait
echo "Все команды выполнены. Результаты сохранены в $OUTPUT_FILE."
Итак, пробуем измерить …
Убедимся, что клиенты подключены:
Тип |
MAC |
Частота |
Канал |
RSSI |
Беспроводной |
34:CF:F6:89:FF:99 |
2.4 |
1/20 |
-43 |
Беспроводной |
38:FC:98:6F:DA:51 |
2.4 |
1/20 |
-35 |
Беспроводной |
38:FC:98:73:C4:77 |
2.4 |
1/20 |
-55 |
Беспроводной |
38:FC:98:73:ED:F3 |
2.4 |
1/20 |
-52 |
Беспроводной |
5E:E1:1F:29:E4:48 |
2.4 |
1/20 |
-44 |
Беспроводной |
64:79:F0:A4:82:7E |
2.4 |
1/20 |
-40 |
Беспроводной |
64:79:F0:A6:B1:D9 |
2.4 |
1/20 |
-48 |
Беспроводной |
64:79:F0:A6:BA:6C |
2.4 |
1/20 |
-52 |
Беспроводной |
64:79:F0:A6:BA:DF |
2.4 |
1/20 |
-45 |
Беспроводной |
64:79:F0:A7:1C:A0 |
2.4 |
1/20 |
-56 |
Беспроводной |
7C:50:79:4E:AE:E9 |
2.4 |
1/20 |
-45 |
Беспроводной |
8C:C6:81:F8:57:41 |
2.4 |
1/20 |
-55 |
Беспроводной |
C0:B8:83:C2:CA:DB |
2.4 |
1/20 |
-48 |
Беспроводной |
D8:3B:BF:12:9F:B2 |
2.4 |
1/20 |
-44 |
Беспроводной |
D8:3B:BF:17:32:57 |
2.4 |
1/20 |
-44 |
Беспроводной |
D8:3B:BF:17:7F:46 |
2.4 |
1/20 |
-41 |
Беспроводной |
D8:3B:BF:18:23:DD |
2.4 |
1/20 |
-47 |
Беспроводной |
D8:3B:BF:18:36:9D |
2.4 |
1/20 |
-42 |
Беспроводной |
D8:F8:83:7B:3F:68 |
2.4 |
1/20 |
-47 |
Беспроводной |
D8:F8:83:7D:5E:DD |
2.4 |
1/20 |
-36 |
Беспроводной |
DC:21:5C:E0:2D:65 |
2.4 |
1/20 |
-47 |
Беспроводной |
FC:B3:BC:FD:DD:97 |
2.4 |
1/20 |
-37 |
Запускаем скрипт, ждем завершения испытаний (около 30-40 секунд), смотрим что получилось:
Download rate: 12.39 Mbps
Upload rate: 17.03 Mbps
Download rate: 9.91 Mbps
Upload rate: 2.58 Mbps
Download rate: 7.21 Mbps
Upload rate: 0.58 Mbps
Download rate: 15.24 Mbps
Upload rate: 30.93 Mbps
Download rate: 12.05 Mbps
Upload rate: 0.82 Mbps
Download rate: 9.71 Mbps
Upload rate: 1.53 Mbps
Download rate: 9.96 Mbps
Upload rate: 6.82 Mbps
Download rate: 6.43 Mbps
Upload rate: 1.07 Mbps
Download rate: 2.81 Mbps
Upload rate: 7.60 Mbps
Download rate: 9.63 Mbps
Upload rate: 0.48 Mbps
Download rate: 8.76 Mbps
Upload rate: 1.18 Mbps
Download rate: 5.38 Mbps
Upload rate: 5.68 Mbps
Download rate: 6.65 Mbps
Upload rate: 1.17 Mbps
Download rate: 7.50 Mbps
Upload rate: 0.80 Mbps
Download rate: 3.45 Mbps
Upload rate: 0.53 Mbps
Download rate: 6.36 Mbps
Upload rate: 0.90 Mbps
Download rate: 9.59 Mbps
Upload rate: 46.40 Mbps
Download rate: 4.97 Mbps
Upload rate: 1.05 Mbps
Download rate: 7.77 Mbps
Upload rate: 3.27 Mbps
Download rate: 8.88 Mbps
Upload rate: 40.00 Mbps
Как видно полученные значения от устройства к устройству сильно отличаются, однако если просуммировать строки получаем:
суммарный Download rate = 164,65 Mbps,
суммарный Upload rate = 130,42 Mbps.
Свою оценку корректности такого подхода к суммированию скорости таким образом и насколько близок к истине такой результат пишите в комментариях. Было бы интересно услышать аргументированную критику, куда же без нее…
Стоит отметить, что подход не требует покупки дорогостоящего софта и лицензий, и может быть повторен любым желающим.
В таблице ниже результаты измерений для различных диапазонов и различной ширине каналов точки доступа:
Bandwidth, MHz |
Download rate SUM, Mbps |
Upload rate SUM, Mbps |
ch1 - 20MHz |
164,65 |
130,42 |
ch1 - 40MHz |
199,33 |
133,52 |
ch36 - 20MHz |
221,69 |
211,08 |
ch36 ch40 - 40MHz |
346,13 |
277,17 |
ch36 ch40 ch44 ch48 - 80MHz |
417,41 |
513,34 |
ch149 ch153 ch157 ch161 - 80MHz |
479,67 |
450,45 |
Таким образом констатируем неплохую производительность тестируемой точки доступа Wi-Fi .
Пишите в комментариях насколько интересны полученные результаты, испытания какого вендора хотелось бы увидеть в следующей статье?
navion
Похожим образом сравнивали airtime fairness, когда Aruba и Meraki ещё были отдельными компаниями.