Параметры ядра
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864$ sysctl --systemБольшие буферы важны для удалённых клиентов: один TCP-поток может передавать не больше, чем размер окна, делённый на время приёма-передачи (RTT).
Сетевая карта
$ ethtool -g eno1 # ring buffer sizes
$ ethtool -G eno1 rx 4096 tx 4096
$ ethtool -k eno1 | grep -E 'segmentation|receive-offload'Оставьте offload-функции (TSO, GRO) включёнными и позвольте irqbalance распределять прерывания по ядрам. MTU в интернете — 1 500 байт: jumbo-кадры помогают только в частной сети VLAN.
На стороне приложения
- nginx:
sendfile on; tcp_nopush on;и достаточное значениеworker_processes, чтобы задействовать несколько ядер. - Отдавайте часто запрашиваемые файлы из памяти или с NVMe: жёсткие диски сами по себе не способны обеспечить 10 Гбит/с.
Тестирование
Одно соединение через интернет редко загружает порт 10 Гбит/с полностью. Тестируйте в несколько параллельных потоков, выбрав близкий узел с хорошей связностью:
$ iperf3 -c <test-server> -P 8 -t 30





