【问题标题】:Setting differing send and receive kernel buffer sizes设置不同的发送和接收内核缓冲区大小
【发布时间】:2015-12-22 10:50:22
【问题描述】:

为连接两端的发送和接收缓冲区设置不同的值有什么缺点(或优点)?保持这些价值观相同似乎是最有意义的(也是常态)。但是,如果一方(例如发送方)拥有将缓冲区大小翻倍的资源,这会产生什么影响?

我想一个相关的问题是,设置大于要求的缓冲区大小有什么缺点?从我读过的内容来看,如果您的发送缓冲区更大,您可能会溢出接收缓冲区。此外,似乎不需要增加缓冲区大小,只要您的应用程序跟上负载并且可以处理最大大小的消息。这并不一定意味着您可以处理更多的数据吞吐量,因为您仍然受到相反端点的限制。这是正确的吗?

有问题的具体内核设置如下:

net.core.wmem_max
net.core.rmem_max

【问题讨论】:

  • 除非一侧或另一侧有错误,否则不能溢出接收缓冲区。

标签: linux sockets tcp udp sctp


【解决方案1】:

在某些情况下,较大的缓冲区大小会对性能产生负面影响。如果 TCP/IP 缓冲区太大并且应用程序处理数据的速度不够快,则分页可能会增加。目标是指定一个足够大的值以避免流量控制,但又不会太大,以至于缓冲区累积的数据超过系统可以处理的数据

【讨论】:

    【解决方案2】:
    • TCP 发送缓冲区大小小于接收者的接收缓冲区大小会阻止您使用最大可用带宽
    • UDP 发送缓冲区大于接收者的接收缓冲区大小会阻止您从源头发现过大的数据报。

    这些问题都不是大问题,除非您在 TCP 情况下传输大量数据。在 UDP 情况下,无论如何您都不应该尝试发送大于 534(或 576 或任何幻数)的数据报。

    【讨论】:

    • 谢谢。将缓冲区大小设置为系统允许的最大大小是否有任何问题,即使系统可以轻松处理该缓冲区大小的 1/4 的负载?会不会有不良影响?
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2018-07-13
    • 2017-10-02
    相关资源
    最近更新 更多