Каковы единицы UDP-буферов и где находятся документы для параметров sysctl? - PullRequest
3 голосов
/ 31 августа 2010

Я использую x86_64 RedHat 5.3 (ядро 2.6.18) и специально смотрю на net.core.rmem_max из sysctl -a в контексте попытки установить буферы UDP.Приложение получателя иногда пропускает пакеты, но я думаю, что буфер уже достаточно большой, в зависимости от того, что он означает:

Каковы единицы этого параметра - биты, байты, пакеты или страницы?Если это биты или байты, то это датаграмма / полезная нагрузка (например, 100 байтов) или размер MTU сети (~ 1500 байтов)?Если страниц, то какой размер страницы в байтах?

И это максимальный размер для системы, для физического устройства (NIC), для виртуального устройства (VLAN), для процесса, для потока, для сокета / для группы многоадресной рассылки?

Например, предположим, что мои данные имеют размер 100 байт на сообщение, и каждый сетевой пакет содержит 2 сообщения, и я хочу иметь возможность буферизовать 50 000 сообщений на сокет, и я открываю 3 сокета на поток на каждом из4 темы.Насколько большим должен быть net.core.rmem_max?Аналогично, когда я устанавливаю опции сокетов внутри приложения, будут ли байты полезной нагрузки модулей, то есть 5000000 для каждого сокета в этом случае?

Наконец, в общем, как мне найти детали модулей для параметров, которые я вижу черезsysctl -a?У меня есть похожие блоки и по X вопросы о других параметрах, таких как net.core.netdev_max_backlog и net.ipv4.igmp_max_memberships.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 31 августа 2010

Полностью документировано на странице руководства socket (7) (в байтах).

Более того, ограничение может быть установлено для каждого сокета с помощью SO_RCVBUF (как описано на той же странице).

Прочтите справочные страницы socket (7), ip (7) и udp (7), чтобы узнать, как на самом деле работают эти вещи. Sysctls документированы там.

2 голосов
/ 31 августа 2010

Вы бы посмотрели на эти документы.Тем не менее, многие из этих параметров на самом деле довольно плохо документированы, так что ожидайте, что вам действительно нужно поискать подробности из блогов и списков рассылки.

rmem_max - максимальный буфер на сокет в байтах.Похоже, это память, в которую принимаются целые пакеты, поэтому размер должен включать размеры любых заголовков / ip / udp - хотя эта область для меня довольно размыта.

Держите вно не забывайте, что UDP ненадежен .Существует множество источников потерь, не в последнюю очередь между коммутаторами и маршрутизаторами - у них также есть буферы.

...