Назад | Перейти на главную страницу

Устранение неполадок с низкой скоростью передачи TCP за маршрутизатором

Я пытаюсь отладить низкую скорость передачи TCP на хосте (lowHost).
Для справки я сравниваю его со вторым хостом («highHost»).

Я делаю два измерения скорости:

  1. Загрузка большого файла с помощью curl с веб-сервера.
  2. Использование iperf

lowHost проходит через дополнительный сетевой переход («маршрутизатор») по сравнению с highHost.

lowHost  ---(router)----->(fw)----> internet ----> webserver
highHost ---------------->(fw)----> internet ----> webserver

«Router» - это хост Linux, который nat’s (iptables) маршрутизирует трафик между группой сетевых интерфейсов.
Я пытаюсь понять, не является ли этот маршрутизатор причиной низкой скорости TCP.

Я предполагаю, что низкая скорость вызвана всплесками задержки, которые ограничивают tcp cwnd.

                         |  lowHost                     |  highHost
--------------------------------------------------------------------------------
curl rate                |  40Mbps rate                 |  400Mbps rate
curl wshark “rtt”        |  ~100 pkts with rtt>100ms    |  ~5 pkts with rtt>100ms
curl rwnd                |  3MB                         |  3MB
curl cwnd                |  0.2MB                       |  2.5MB            
--------------------------------------------------------------------------------
iperf tcp rate           |  100Mbps                     |  700Mbps
iperf tcp wshark “rtt”   |  0 pkts with rtt>100ms       |
iperf tcp cwnd           |  0.5MB                       |
--------------------------------------------------------------------------------
iperf udp rate           |  350Mbps                     |

ping stats:
    lowHost --> webserver
         79 packets transmitted, 79 received, 0% packet loss, time 78077ms
         rtt min/avg/max/mdev = 33.285/33.664/38.176/0.800 ms

    highHost --> webserver
         108 packets transmitted, 108 received, 0% packet loss, time 106949ms
         rtt min/avg/max/mdev = 32.684/32.855/39.706/0.689 ms

Я использовал systemtap, чтобы проверить продолжительность вызова ip_forward в ядре, чтобы увидеть, не является ли он источником всплесков задержки.
При выборке более 60 секунд максимальная длительность вызова ip_forward составляет 8 мс, что недостаточно для учета задержки, наблюдаемой в wirehark «rtt».

Если это не маршрутизатор, что это может быть еще?
Если это маршрутизатор, а не задержка, что еще это может быть?
Есть ли статистика сокетов, которая может указать мне на проблему (/ bin / ss)?
почему скорость iperf в два раза выше скорости завивки?

Графики производительности wirehark / rtt / rwnd / cwnd: