Исследование зависимости скорости сетевого интерфейса от MTU и поиск наилучшего значения этого параметра.

Для Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
 
+
-
edit
 

HolyBoy

аксакал

Есть две полностью идентичные машинки, на которых объединены в один интерфейс пары сабжевых сетевых карт.

На двух хостах идентичные параметры сетевого стека:
code text
  1. net.core.rmem_max = 8388608
  2. net.core.wmem_max = 8388608
  3. net.ipv4.tcp_rmem = 4096 87380 8388608
  4. net.ipv4.tcp_wmem = 4096 65536 8388608
  5. net.core.netdev_max_backlog = 15000
  6. net.ipv4.tcp_window_scaling = 1
  7. net.ipv4.tcp_timestamps = 1
  8. net.ipv4.tcp_sack = 1
  9. net.ipv4.tcp_congestion_control = cubic
  10. net.ipv4.ip_forward = 0
  11. net.ipv4.conf.default.rp_filter = 1
  12. net.ipv4.conf.all.rp_filter = 1
  13. net.ipv4.tcp_syncookies = 1



Поскольку RTL8111/8168B не поддерживает MTU свыше 7200, то это значение и было указано для всех участвующих в тесте интерфейсов:
code text
  1. Kernel Interface table
  2. Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
  3. bond0  7200 0  16388743      0      0 0      17106828      0     92      0 BMmRU
  4. eth1   7200 0   8194372      0      0 0       8553414      0     46      0 BMsRU
  5. eth2   7200 0   8194371      0      0 0       8553414      0     46      0 BMsRU


Я не стал изобретать что-то своё и использовал для тестирования TCP-соединений iperf в режиме TCP-сервера, т.к. основной трафик исследуемого канала будет TCP, а не UDP.

Соответственно, на одном хосте включил сервер с буфером в 25 Кб, максимально широким окном и размером сегмента : iperf -s -m -M 100000 -w 1M -l 24K

На другом — запустил скрипт примерно такого вида:
code bash
  1. for y in $(seq 1 1);
  2. do
  3.   for i in $(seq $1 $2 $3);
  4.   do
  5.     DIMENS=$(iperf -c $4 -w 1M -l 24K -M $i -f K |  grep '3\]' | grep -v 'connected' | sed 's/^.\+ sec//' | awk '{print $3}');
  6.     echo "$i $DIMENS" >> "test-mtu-Kbytes-$4-iteration-$y" ;
  7.   done;
  8. done


который в цикле перебирает размер сегмента и соединяется с сервером на первом хосте.

// внешний цикл для того, чтобы, создать несколько файлов с отчётом, в данном случае мне понадобился один прогон, чтобы определить, куда рыть


Как видно на картинке (а мне и в файле), для MTU между 2300 б и 2400 б наблюдается катастрофическое падение скорости: с 214478 Кб/с до 150 Кб/с в среднем.

На этом я не закончил, далее, если вскроются интересные особенности, напишу.
Прикреплённые файлы:
mtu.png (скачать) [3,2 кБ]
 
 
 
+
-
edit
 

HolyBoy

аксакал

Ещё разок, с уточнёнными границами:
Прикреплённые файлы:
mtu.png (скачать) [3,7 кБ]
 
 
 
+
-
edit
 

Mishka

модератор
★★★
HolyBoy> Есть две полностью идентичные машинки, на которых объединены в один интерфейс пары сабжевых сетевых карт.

Ты напрямую соединил или через свитч, поддерживающий jumbo frames? А то ты можешь резко насытить свитч. У многих неупраляемых очередь буферов большого размера сильно ограничена.
 3.6.163.6.16
+
-
edit
 

HolyBoy

аксакал

Mishka> Ты напрямую соединил или через свитч, поддерживающий jumbo frames?

Напрямую. Подсеть, которая обслуживается bond0 — только для синхронизации между двумя хостами. Когда и если будет ставиться свитч, то будет подбираться соответственно.
 
+
-
edit
 

HolyBoy

аксакал

Кстати, почему такое падение происходит? Зависит от железки и от драйвера?
 
+
-
edit
 

Balancer

администратор
★★★★★
На ноуте у меня тормозной Wi-Fi. Одно время играл с параметрами, пересобирал драйвера (Linux стоит единственной ОС) и т.п., стало более-менее сносно. Хотя всё равно фигово. Народ жалуется, что HP поставил в эту модель совсем уже отстойный чип, да ещё с одной антенной вместо двух. Пробовал покупать китайские Wi-Fi USB-донглы, но проку не было. Так и махнул рукой. Один фиг, мне только SSH и сёрфинг нужны.

Вчера решил на нём посмотреть киношку с домашнего сервера и удивился, что HD 720p не тянет. Промерил скорость интерфейса — получил 200-400 кбайт/с. Полез разбираться. Достал опять свою USB-россыпь, начал экспериментировать. Удавалось выжать до 600 кбайт/с. Но не более того.

Пока меня какой-то чёрт не дёрнул посмотреть в сторону MTU.

Дефолт 1500. При 1432 скорость Wi-Fi 4-6Мбайт/с :D

Блин. Десятикратный прирост из-за одного уменьшения MTU :eek:
 55
+
-
edit
 

ZaKos

аксакал

Balancer> Вчера решил на нём посмотреть киношку с домашнего сервера и удивился, что HD 720p не тянет. Промерил скорость интерфейса — получил 200-400 кбайт/с. Полез разбираться. Достал опять свою USB-россыпь, начал экспериментировать. Удавалось выжать до 600 кбайт/с. Но не более того.
Balancer> Пока меня какой-то чёрт не дёрнул посмотреть в сторону MTU.
Balancer> Дефолт 1500. При 1432 скорость Wi-Fi 4-6Мбайт/с :D
Balancer> Блин. Десятикратный прирост из-за одного уменьшения MTU :eek:

Народу, наверное, много сидит на одних и тех же каналах?
10 из 10... Пауль не предсказывает будущее, он им управляет...  66.0.3359.18166.0.3359.181
+
-
edit
 

Balancer

администратор
★★★★★
ZaKos> Народу, наверное, много сидит на одних и тех же каналах?

Wi-Fi по отношению к соседям? Я обычно вручную выбираю свободные каналы :)

Дома, клиентов точки доступа? Много, но трафик во время тестов небольшой был.

Скорее всего это как-то связано с MTU=1460, что по l2tp ставится у Билайна. Хотя у бриджа, через который идёт трафик с домашнего сервера через роутер на ноут MTU=1500, но х.з., как оно влияет друг на друга.

Прикол в том, что, судя по всему, трафик из внешнего Интернета был достаточно шустрый. Если бы там было 300кбайт/с, я бы давно засёк. Тормозила именно домашняя сеть, которой я с ноута почти не пользовался.
 55

sam7

координатор
★★★★☆
Balancer> Дефолт 1500. При 1432 скорость Wi-Fi 4-6Мбайт/с :D

Зацепило, решил на своём телефоне попробовать, пошёл на speedtest.net, потребовало что-то установить.
Установил, попробовал - 11.77 mbps
Но не стабильно, попробовал ещё - 9.66.
А вверх только 3-4 даёт, почему-то.
 11.011.0

в начало страницы | новое
 
1941: Начало Великой отечественной (77 лет).
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru