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

时间:2016-10-06 13:14:10

标签: sockets memory linux-kernel datagram

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

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

我认为更改sk->sk_sendbufsk->sk_rcvbuf的值应该可以胜任。这样做的正确方法是什么?

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

感谢。

1 个答案:

答案 0 :(得分: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的两倍,这就是实现在内核中的方式。