Настройка сетевых интерфейсов для работы на скоростях более 10 Гбит/с и выше требует внимательного подхода, так как такие высокоскоростные соединения чувствительны к параметрам драйверов, настройкам ядра и конфигурации оборудования. Инструмент ethtool
является ключевым для диагностики и настройки сетевых интерфейсов в Linux. Ниже приведены основные шаги и рекомендации.
Для начала необходимо проверить текущие настройки интерфейса с помощью команды:
ethtool <interface_name>
Пример вывода:
Settings for enp1s0f0:
Supported ports: [ FIBRE ]
Supported link modes: 1000baseKX/Full
10000baseKR/Full
25000baseKR/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 25000baseKR/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 25000Mb/s
Duplex: Full
Port: FIBRE
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Link detected: yes
Это покажет поддерживаемые режимы, текущую скорость, дуплексность и другие параметры.
Если автоматическое согласование (auto-negotiation) не работает корректно, можно вручную задать скорость и дуплексность:
sudo ethtool -s <interface_name> speed 25000 duplex full autoneg off
speed
: Указывает желаемую скорость (например, 25000 для 25 Гбит/с).duplex
: Указывает режим дуплексности (full
или half
).autoneg
: Включает или отключает автоматическое согласование.Важно: Отключение автосогласования может привести к проблемам, если оборудование на другом конце линии не настроено аналогично.
Высокоскоростные интерфейсы могут столкнуться с проблемами переполнения буферов или недостаточной производительности из-за неправильной настройки очередей.
ethtool -g <interface_name>
Пример вывода:
Ring parameters for enp1s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
sudo ethtool -G <interface_name> rx 4096 tx 4096
Увеличение размера очередей может улучшить производительность, особенно при высокой нагрузке, но это также увеличивает потребление памяти.
Управление потоком помогает предотвратить переполнение буферов при высокой нагрузке. Оно может быть включено или отключено:
sudo ethtool -A <interface_name> rx on tx on
rx
: Включение/выключение управления потоком для приема.tx
: Включение/выключение управления потоком для передачи.Проверка текущего состояния:
ethtool -a <interface_name>
Интервал объединения прерываний (interrupt coalescing) влияет на производительность и задержку. Для высокоскоростных интерфейсов рекомендуется настраивать этот параметр:
sudo ethtool -C <interface_name> rx-usecs 50 tx-usecs 50
rx-usecs
: Время ожидания (в микросекундах) перед обработкой пакетов на стороне приема.tx-usecs
: Время ожидания перед обработкой пакетов на стороне передачи.Проверка текущих настроек:
ethtool -c <interface_name>
Для распределения нагрузки между ядрами процессора можно использовать механизмы RSS (Receive Side Scaling), RPS (Receive Packet Steering) и RFS (Receive Flow Steering).
ethtool -l <interface_name>
Пример вывода:
Channel parameters for enp1s0f0:
Pre-set maximums:
RX: 8
TX: 8
Other: 1
Combined: 8
Current hardware settings:
RX: 4
TX: 4
Other: 1
Combined: 4
Изменение числа очередей:
sudo ethtool -L <interface_name> combined 8
RPS и RFS настраиваются через sysfs:
echo f > /sys/class/net/<interface_name>/queues/rx-0/rps_cpus
echo 32768 > /sys/class/net/<interface_name>/queues/rx-0/rps_flow_cnt
Для мониторинга производительности и выявления проблем используйте:
ethtool -S <interface_name>
Эта команда показывает детальную статистику интерфейса, включая количество ошибок, потерянных пакетов и т.д.
Для высокоскоростных интерфейсов важно настроить параметры ядра:
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.core.netdev_max_backlog=300000
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
sudo sysctl -w net.ipv4.tcp_timestamps=1
sudo sysctl -w net.ipv4.tcp_sack=1
Чтобы изменения сохранились после перезагрузки, добавьте команды в /etc/rc.local
или создайте файл в /etc/sysctl.d/
.
Что такое IT-GIT?
«IT» — это не просто технологии, а целый мир инноваций и решений, направленных на преодоление сложностей. Мы представляем экспертность в области информационных технологий и широкой технологической экосистемы, стремясь к постоянному развитию и совершенствованию.
«Git» — это отсылка к одной из самых популярных систем контроля версий, которая обеспечивает эффективное сотрудничество, быструю итерацию и надежное управление сложными проектами. Мы стремимся объединить и поделиться опытом и идеями специалистов в сфере технологий, создавая пространство для обмена знаниями.
Инновационные технологии + совместный опыт экспертов в области технологий = путь к успеху!