传输守护程序:UDP 未能设置接收/发送缓冲区

Lin*_*eak 8 performance memory debian transmission

我刚刚transmission{-daemon,-cli}在我的 Debian 10 Buster 上编译了它,并在安装时遇到了一些小问题和大问题。

其中一个次要问题是明显未能根据日志设置 UDP 接收缓冲区/发送缓冲区:

[2019-05-23 12:45:40.950] UDP Failed to set receive buffer: requested 4194304, got 425984 (tr-udp.c:84)
[2019-05-23 12:45:40.950] UDP Please add the line "net.core.rmem_max = 4194304" to /etc/sysctl.conf (tr-udp.c:89)
[2019-05-23 12:45:40.950] UDP Failed to set send buffer: requested 1048576, got 425984 (tr-udp.c:95)
[2019-05-23 12:45:40.950] UDP Please add the line "net.core.wmem_max = 1048576" to /etc/sysctl.conf (tr-udp.c:100)
Run Code Online (Sandbox Code Playgroud)

我希望客户端向我展示它的最大性能,所以我很好奇如何在我的系统上调整这两个东西,它提出了什么?4 on 1 MiB 对我来说似乎并不多,但由于我不是网络专家,请详细说明,如果我可以将其调整为更高的数字。


硬件

ISP链接速度:

约 30 / 25

连接配置:带有转发端口的公共静态 IPv4。


为了完整起见,让我也提到其他组件,我不知道这些信息在这里是否重要,所以......

Lin*_*eak 12

遵循这篇旧文章有所帮助。让我先提一下声称的解决方案:

  1. 以 root 用户身份打开这个文本文件,注意它是那些重要的系统文件之一:

    /etc/sysctl.conf
    
    Run Code Online (Sandbox Code Playgroud)
  2. 由于我有足够的内存,我添加了这两行;例如,如果您在嵌入式系统上,您可能需要重新考虑应用这些行(我们为接收缓冲区设置 16 MiB,为发送缓冲区设置 4 MiB),我还不能说出实际的运行内存要求:

    net.core.rmem_max = 16777216
    net.core.wmem_max = 4194304
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您决定在上面添加这些行,您可以重新阅读配置:

    sysctl -p
    
    Run Code Online (Sandbox Code Playgroud)

    无需重新启动即可生效。


现在,让我在此引用该网页:

此消息试图告诉我们,出于某种原因,传输希望为其 UDP 套接字拥有 4 兆字节的接收缓冲区和 1 兆字节的发送缓冲区。事实证明,对 uTP 的支持,即 uTorrent 传输协议,是使用单个套接字实现的。

通过调整这两个变量,使用 uTP 可以更轻松地实现更高的吞吐量。


由于我们使用单个 UDP 套接字来实现多个 uTP 套接字,并且由于我们并不总是及时为传入的 UDP 数据包提供服务,因此使用大的接收缓冲区很重要。发送缓冲区可能不太重要,但我们还是增加了它。


小智 12

回答的解决方案工作正常,但在systemd中,您必须将这些行写入:

/etc/sysctl.d/<anyname>.conf
Run Code Online (Sandbox Code Playgroud)

然后,执行(以 root 身份):

systemctl restart systemd-sysctl
Run Code Online (Sandbox Code Playgroud)