![Тест пропускной способности iperf3: TCP намного медленнее UDP](https://rvso.com/image/782599/%D0%A2%D0%B5%D1%81%D1%82%20%D0%BF%D1%80%D0%BE%D0%BF%D1%83%D1%81%D0%BA%D0%BD%D0%BE%D0%B9%20%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20iperf3%3A%20TCP%20%D0%BD%D0%B0%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BC%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D0%B5%D0%B5%20UDP.png)
Я пытаюсь выяснить, почему один из моих серверов, используемый для передачи файлов, отправляет файлы с очень низкой скоростью, около 7 Мбит/с, через nginx.
Я использовал iperf3 для проверки скорости передачи данных между серверами, оба на Debian 11.
- FrenchServ:
$ iperf3 -s
- CanadianServ :
$ iperf3 -c 195.154.xxx.xxx -P 1 -t 10 -b 1G
// Попытки отправить, используя 1 соединение, за 10 сек, 1 ГБ данных
Этот тест по TCP дает следующие результаты:
Connecting to host 195.154.xxx.xxx, port 5201
[ 5] local 142.44.xxx.xxx port 60610 connected to 195.154.xxx.xxx port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 1.04 MBytes 8.69 Mbits/sec 0 125 KBytes
[ 5] 1.00-2.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
[ 5] 2.00-3.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
[ 5] 3.00-4.00 sec 640 KBytes 5.24 Mbits/sec 0 125 KBytes
[ 5] 4.00-5.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
[ 5] 5.00-6.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
[ 5] 6.00-7.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
[ 5] 7.00-8.00 sec 640 KBytes 5.24 Mbits/sec 0 125 KBytes
[ 5] 8.00-9.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
[ 5] 9.00-10.00 sec 768 KBytes 6.29 Mbits/sec 0 125 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 7.54 MBytes 6.32 Mbits/sec 0 sender
[ 5] 0.00-10.09 sec 7.08 MBytes 5.89 Mbits/sec receiver
iperf Done.
Он очень медленный, я могу объединить несколько подключений, чтобы увеличить пропускную способность, но хотелось бы оставить только одно подключение.
Сейчас идет тестирование по UDP.
- КанадскийСерв :
$ iperf3 -c 195.154.xxx.xxx -P 1 -t 10 -b 1G -u
Это выводит:
Connecting to host 195.154.xxx.xxx, port 5201
[ 5] local 142.44.xxx.xxx port 37350 connected to 195.154.xxx.xxx port 5201
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 113 MBytes 950 Mbits/sec 81331
[ 5] 1.00-2.00 sec 114 MBytes 955 Mbits/sec 81773
[ 5] 2.00-3.00 sec 114 MBytes 956 Mbits/sec 81887
[ 5] 3.00-4.00 sec 114 MBytes 957 Mbits/sec 81904
[ 5] 4.00-5.00 sec 114 MBytes 956 Mbits/sec 81862
[ 5] 5.00-6.00 sec 114 MBytes 957 Mbits/sec 81913
[ 5] 6.00-7.00 sec 114 MBytes 957 Mbits/sec 81909
[ 5] 7.00-8.00 sec 114 MBytes 957 Mbits/sec 81915
[ 5] 8.00-9.00 sec 114 MBytes 956 Mbits/sec 81880
[ 5] 9.00-10.00 sec 114 MBytes 957 Mbits/sec 81904
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 1.11 GBytes 956 Mbits/sec 0.000 ms 0/818278 (0%) sender
[ 5] 0.00-10.41 sec 600 MBytes 484 Mbits/sec 0.029 ms 387089/818278 (47%) receiver
iperf Done.
Фактическая пропускная способность UDP составляет около 500 Мбит/с, что вполне приемлемо, учитывая сетевые интерфейсы обоих серверов.
Как мне заставить TCP-передачу использовать большую пропускную способность?? Я пробовал на своем локальном компьютере, получаю около 30 Мбит/с при TCP-передачах.
решение1
Решение нашлось в конфигурации сервера, TCP Window был отключен, как рекомендовано для стандартной конфигурации Apache (описано здесь)
$ vi /etc/sysctl.conf
# Set this value and save
net.ipv4.tcp_window_scaling = 1
# check with
$ sysctl -p
Теперь нам нужно настроить значение окна TCP, как описано выше.здесьилиздесь.