Как увеличить выделение памяти сокета в ядре 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
это просто, как реализация в ядре.