如何在 Linux 内核中增加套接字内存分配

How to Increase socket memory allocation in Linux kernel

我正在 Linux 内核中实现自定义传输层数据报协议。我已经实现了在有损环境中按顺序交付的发送和接收队列。

我注意到,在我当前的实现中,我的套接字内存不足,队列中只有 16 个带有 BUFSIZ 负载的套接字缓冲区。所以我需要增加分配给我的套接字的内存值。

我认为更改 sk->sk_sendbufsk->sk_rcvbuf 的值应该可以完成这项工作。正确的做法是什么?

P.S.- 我还没有为这个协议实现 sysctl 接口,所以不能用它来进行内存管理。

谢谢。

事实证明,我不需要为我的协议手动定义 sysctl 接口。我刚刚在我的测试机器上使用了以下 sysctl 命令来增加分配给每个套接字的内存量

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

到select的new_value,我先检查了这些参数的现有值

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

请注意,分配给套接字的实际内存将是 new_value 的两倍,这就是内核中的实现方式。