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

标签 sockets memory linux-kernel datagram

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

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

我想改变 sk->sk_sendbuf 的值和 sk->sk_rcvbuf应该做的工作。这样做的正确方法是什么?

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

谢谢。

最佳答案

事实证明,我不需要为我的协议(protocol)手动定义 sysctl 接口(interface)。我刚刚在我的测试机器上使用了以下 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 的两倍。 ,这就是内核中的实现方式。

关于sockets - 如何在 Linux 内核中增加套接字内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897030/

相关文章:

python - 如何使用 asyncio add_reader 从套接字读取

c - C运算中的Socket客户端

c++ - 为较大的数组分配对齐的内存

C - 指针内存分配

Linux内核模块编译失败

Java套接字程序卡在sc.nextInt()处;

java - Oracle 服务总线 11G REST api Java 连接到 OSB 时出现套接字问题

c - C 函数的内存布局

linux - kmemleak 和 kmemcheck 有什么区别?以及如何在 Android 操作系统上启用这些工具?

linux - insmod 和 modprobe 有什么区别?