【发布时间】:2017-12-08 23:52:59
【问题描述】:
我们有一个 Linux 项目,我们在其中将结构信息推送到缓冲区。最近发现内核参数optmem_max太小了。主管要求我增加这个值。虽然我知道如何做到这一点,但我真的不明白我怎么知道要做到多大。
此外,我真的不明白 optmem_max 是什么。
内核文档是这样说的:
“每个套接字允许的最大辅助缓冲区大小。辅助数据是带有附加数据的 struct cmsghdr 结构序列。”
(我不太明白这在英语中是什么意思)。
我在 Internet 上看到很多例子表明应该增加这个值以获得更好的性能。
在:
/etc/sysctl.conf
我添加了这一行来解决问题:
net.core.optmem_max=1020000
完成此操作后,我们将获得更好的性能。
所以总结一下我的问题:
在英文中,optmem_max 是什么?
如果增大它可以提高性能,为什么在大多数 Linux 发行版中默认它会这么低?
如何衡量这个数字的合适大小?
把它做得很大会有什么后果?
除了/etc/sysctl.conf,这个默认设置在内核的什么位置?我 grepped 内核,但我找不到 optmem_max 的默认值设置为 20480 的痕迹,这是我们系统上的默认值。
【问题讨论】:
标签: c linux linux-kernel network-programming