是每个套接字或整个堆栈的rmem_default大小?

时间:2017-05-19 10:08:31

标签: linux performance sockets networking

我们所做的net.core.rmem_default设置是针对每个套接字还是Linux中打开的所有套接字?我可以为此参数配置的最大值是多少?有上限吗?据我所知,这取决于RAM,但我要说我有大到60 GB的可用内存。

1 个答案:

答案 0 :(得分:1)

net.core.rmem_default是每个套接字的传入内核套接字缓冲区的大小。

来自man socket(7)

  

<强> SO_RCVBUF

     

以字节为单位设置或获取最大套接字接收缓冲区。当使用setsockopt(2)设置时,内核将此值加倍(以便为簿记开销留出空间),并且getsockopt(2)返回此加倍值。默认值由/proc/sys/net/core/rmem_default文件设置,最大允许值由/proc/sys/net/core/rmem_max文件设置。此选项的最小(加倍)值为256.

最佳传入套接字缓冲区大小为the bandwidth-delay product

为了最小化recv系统调用,用户空间套接字缓冲区大小应不小于内核缓冲区的大小。使用非阻塞I / O时,必须发出多个recv系统调用来读取内核套接字缓冲区可能会导致其他套接字无法使用。