Я запускаю x86_64 RedHat 5.3 (ядро 2.6.18) и смотрю конкретно на net.core.rmem_max из sysctl -a в контексте попытки установить буферы UDP. Приложение-получатель иногда пропускает пакеты, но я думаю, что буфер уже достаточно большой, в зависимости от того, что он означает:Каковы единицы буферов UDP и где docs для параметров sysctl?
Каковы единицы этого параметра - биты, байты, пакеты или страницы? Если биты или байты, это из дейтаграммы/полезной нагрузки (например, 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.
спасибо.