Как увеличить выделение памяти сокета в ядре Linux

Я реализую собственный протокол дейтаграмм транспортного уровня в ядре Linux. Я внедрил очереди отправки и получения для доставки по заказу в средах с потерями.

Я заметил, что в моей текущей реализации моему сокету не хватает памяти только с 16 буферами сокетов с полезной нагрузкой BUFSIZ в очереди. Поэтому мне нужно увеличить значение памяти, выделенной для моего сокета.

Я полагал, что изменение значений sk->sk_sendbuf а также sk->sk_rcvbuf должен сделать работу. Как правильно это сделать?

PS - Я еще не реализовал интерфейс sysctl для этого протокола, поэтому не могу использовать его для управления памятью.

Благодарю.

1 ответ

Решение

Как оказалось, мне не нужно определять интерфейс sysctl вручную для моего протокола. Я просто использовал следующую команду sysctl на моей тестовой машине, чтобы увеличить объем памяти, выделяемой для каждого сокета

sysctl -w net.core.wmem_default=<new_value>
sysctl -w net.core.wmem_max=<new_value>

Чтобы выбрать new_valueЯ сначала проверил существующее значение этих параметров с

sysctl -n net.core.wmem_default
sysctl -n net.core.wmem_max

Обратите внимание, что фактическая память, назначенная сокету, будет в два раза больше new_valueэто просто, как реализация в ядре.

Другие вопросы по тегам