Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.2. Оптимизация параметров сети

Уровень производительности иногда корректируется экспериментальным путем: если изменение параметров не помогает достичь ожидаемого результата, администратор будет искать другие способы. За точку отсчета принимается стандартная конфигурация системы и подразумевается, что она может быть улучшена.
Как уже говорилось, сетевой стек сам оптимизирует свою работу, поэтому дальнейшие изменения требуют точного понимания его работы и требований ресурсов. Неверная конфигурация может только ухудшить производительность.
Например, увеличение длины очереди буфера может привести к возникновению заторов в обработке TCP-соединений. Такие соединения будут иметь слишком большие значения RTT, так как пакеты будут проводить слишком много времени в очереди. Это приведет к снижению скорости обработки.
Если возможно, рекомендуется использовать стандартные настройки и корректировать их, только если производительность сети заметно упала. В любом случае, прежде чем приступить к изменению конфигурации, надо тщательно изучить проблему.
Ниже перечислены инструменты, которые помогут выполнить анализ производительности сети.
netstat
Утилита командной строки, возвращающая информацию о соединениях, таблицах маршрутизации, замаскированных подключениях, многоадресных схемах и статистику интерфейсов из /proc/net/.
  • /proc/net/dev (информация об устройстве)
  • /proc/net/tcp (информация о TCP-сокете)
  • /proc/net/unix (информация о сокете домена Unix)
Подробную информацию можно найти на справочной странице man netstat.
dropwatch
Утилита для отслеживания потери пакетов. Подробную информацию можно найти на справочной странице man dropwatch.
ip
Утилита для управления и наблюдения за устройствами, правилами маршрутизации и туннелями. Подробную информацию можно найти на справочной странице man ip.
ethtool
Утилита для просмотра и изменения настроек сетевой карты. Подробную информацию можно найти на справочной странице man ethtool.
/proc/net/snmp
Содержит управляющую информацию IP, ICMP, TCP, UDP для агента snmp в формате ASCII.
Документ под названием Введение в SystemTap содержит образцы сценариев для мониторинга и профилирования производительности сети. Его можно найти на странице документации по адресу http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/.
После сбора и анализа статистики сети можно принять решение по оптимизации ее работы.[5]Например, рост числа ошибок UDP в /proc/net/snmp служит знаком переполнения очереди сокетов.
Из этого можно сделать вывод, что либо очередь обрабатывает пакеты медленно, либо объем поступающих пакетов возрос. Проверьте журналы приложений, интенсивно обращающихся к сети, — если число поступающих запросов действительно превышает длину очереди, следует откорректировать настройки приложения.

8.2.1. Размер буфера сокета

Размер буфера поступающих и отправляемых данных сокета изменяется динамически, поэтому обычно в его изменении нет необходимости. Если же в ходе анализа производительности выяснилось, что скорость освобождения очереди сокета слишком низкая, можно увеличить ее длину. Для этого надо откорректировать следующие параметры:
rmem_default
Определяет размер буфера, который будет использоваться по умолчанию. Чтобы его изменить, выполните команду:
sysctl -w net.core.rmem_default=N
В этой команде N — размер буфера в байтах. Значение установленного параметра можно получить из /proc/sys/net/core/rmem_default. Стоит помнить, что стандартный размер не может быть больше rmem_max/proc/sys/net/core/rmem_max). Если же он должен быть больше текущего максимума, надо изменить rmem_max.
SO_RCVBUF
Параметр сокета, определяющий размер буфера поступающих данных. Подробную информацию можно найти на справочной странице man 7 socket.
Его значение можно просмотреть с помощью getsockopt и изменить с помощью setsockopt. Подробную информацию можно найти на справочной странице man setsockopt.


[5] Раздел 8.3, «Обзор получения пакетов» содержит информацию о передаче пакетов, что поможет в определении слабых мест в сетевом стеке.