Перейти к содержимому

Настройка сетевых буферов для UDP

Правильная настройка буферов предотвращает потерю данных при отправке или приёме UDP-потоков.

Добавьте следующие параметры в файл /etc/sysctl.conf.

Для 1G Ethernet-адаптеров:

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.udp_mem = 8388608 12582912 16777216
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.wmem_default = 16777216
net.core.rmem_default = 16777216
net.ipv4.tcp_tw_reuse = 1

Для 10G Ethernet-адаптеров:

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.udp_mem = 8388608 16777216 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
net.core.wmem_default = 33554432
net.core.rmem_default = 33554432
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_tw_reuse = 1

Для 40G Ethernet-адаптеров:

net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.udp_mem = 8388608 33554432 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.wmem_default = 67108864
net.core.rmem_default = 67108864
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_tw_reuse = 1

Чтобы применить настройки без перезагрузки, выполните:

Окно терминала
sysctl -p

Проверьте текущие значения буферов:

Окно терминала
sysctl \
net.core.rmem_default \
net.core.rmem_max \
net.core.wmem_default \
net.core.wmem_max \
net.ipv4.udp_mem \
net.ipv4.tcp_wmem

На серверах с высокой нагрузкой настройте буфер сетевой карты, чтобы избежать потери пакетов.

Проверьте текущие параметры буфера:

Окно терминала
ethtool -g eth1

Пример вывода:

Ring parameters for eth1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 256

Оптимальный размер буфера зависит от вашего оборудования. Для многоядерных процессоров с высокой частотой (более 3 ГГц) часто лучше всего подходят максимальные значения. Для других систем хорошей отправной точкой будет среднее значение.

Чтобы увеличить размер буфера:

Окно терминала
ethtool -G eth1 rx 2048
  • System Tune — скрипт для оптимизации настроек Linux для стриминга