/proc/net/udp 中的 rx_queue 值增长到 SO_RCVBUF 值的两倍

/proc/net/udp 中的 rx_queue 值增长到 SO_RCVBUF 值的两倍

当使用 10485760 的数值(这也是的设置SO_RCVBUF所规定的当前限制,并且发送 UDP 数据包的速度超过接收端能够处理的速度)时,中的列总是增长到 的大小的两倍。 20972544 是我能观察到的最高值。sysctlnet.core.rmem_maxrx_queue/proc/net/udpSO_RCVBUF

所以是否未遵守 SO_RCVBUF? 或者 /proc/net/udp 的输出有误?

我的系统:

uname -a
Linux mybox 4.3.0-1-amd64 #1 SMP Debian 4.3.3-5 (2016-01-04) x86_64 GNU/Linux

答案1

来自插座(7)手册页:

   SO_RCVBUF
          Sets or gets the maximum socket receive buffer in bytes.  The
          kernel doubles this value (to allow space for bookkeeping
          overhead) when it is set using setsockopt(2), and this doubled
          value is returned by getsockopt(2).  The default value is set
          by the /proc/sys/net/core/rmem_default file, and the maximum
          allowed value is set by the /proc/sys/net/core/rmem_max file.
          The minimum (doubled) value for this option is 256.

请注意,手册页表明内核将把指定的缓冲区值加倍用于记账开销。

相关内容