Red Hat Training

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

8.4.2. Очередь сокета

Очередь к сокету заполняется сетевым стеком в ходе обработки softirq. Приложения получают данные из очереди при помощи вызовов read, recvfrom и т.п.
Состояние очереди может быть проверено с помощью netstat. Так, например, столбец Recv-Q содержит длину очереди. Переполнение очереди предотвращается уже рассмотренными способами (см. Раздел 8.4.1, «Буфер сетевой карты»).
Входящий трафик
Этот подход предусматривает снижение скорости поступления пакетов (добавить фильтры, заранее отбрасывать пакеты и т.п.). Дополнительно можно уменьшить весовое значение устройства[6].
Длина очереди
Чтобы увеличить длину очереди, надо изменить параметр ядра rmem_default или параметр сокета SO_RCVBUF (см. Раздел 8.2, «Оптимизация параметров сети»).
Частота программных вызовов
По возможности следует сократить число вызовов из приложения. Это можно сделать за счет увеличения вызовов POSIX (recv, read и т.п.).
Обычно администраторы предпочитают второй вариант, который предоставляет простое, но краткосрочное решение. С развитием сетевых технологий очереди сокетов будут заполняться все быстрее, что снова будет требовать изменения их длины.
Оптимальное решение заключается в изменении конфигурации приложения и увеличении скорости получения данных из ядра. Это обеспечивает более гибкое хранение данных, даже если это требует подкачки страниц.


[6] Вес устройства определяется в /proc/sys/net/core/dev_weight (см. Раздел 8.4.1, «Буфер сетевой карты»).