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, «Буфер сетевой карты»).