Linux Tuning
本页面包含一份快速参考指南,适用于以 1Gbps 或更高速度连接的用于数据传输的 Linux 主机。请注意,此处描述的大多数调优设置实际上会降低连接速率低于 1Gbps 的主机的性能,大多数家庭用户的主机就属于这种情况。
请注意,本页面的设置并非旨在通过单一流实现全 10G 的性能。这些设置假定你使用的是支持并行流的工具,或者有多个数据传输并行进行,并且希望各流之间能公平共享资源。因此,最大设置值比支持单一流所需的值小 2 到 4 倍。例如,在延迟为 100 毫秒的网络上进行 10Gbps 的流传输需要 120MB 的缓冲区(可参考带宽延迟积计算器)。大多数数据移动应用程序(如 Globus)会采用 4 - 8 个流来高效完成此操作,并防止拥塞导致的数据包丢失。将具备 10Gbps 能力的主机每个套接字的最大缓冲区设置为 32M - 64M,可确保并行流正常工作,且不会占用系统的大部分资源。
如果你试图针对单一流进行优化,请参考测试/测量主机的调优建议页面。( https://fasterdata.es.net/host-tuning/linux/test-measurement-host-tuning/ )
通用方法
要查看系统当前使用的设置,可使用 sysctl name
命令(例如:sysctl net.ipv4.tcp_rmem
)。要更改设置,可使用 sysctl -w
命令。若要使设置永久生效,可将设置添加到 sysctl.conf
文件中。
TCP 调优
和大多数现代操作系统一样,Linux 现在在自动调优 TCP 缓冲区方面做得很好,但 Linux 默认的 TCP 缓冲区最大大小对于 10G 网络来说仍然太小。以下是不同类型主机的一些 sysctl.conf
配置示例。
对于配备 10G 网卡的主机,针对往返时间(RTT)最长为 100 毫秒的网络路径进行优化,并且要兼顾单流和并行流工具的使用,可将以下内容添加到 /etc/sysctl.conf
文件中:
(请注意,配备 100G 网卡的主机需要额外的调优)
# 允许 TCP 缓冲区最大达到 64MB
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# 将 Linux 自动调优的 TCP 缓冲区限制增加到 32MB
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
# 对于启用巨型帧的主机推荐设置
net.ipv4.tcp_mtu_probing=1
# 推荐使用“公平排队”队列规则(可以是 fq 或 fq_codel)
net.core.default_qdisc = fq
注意:从 2017 年的 4.12 内核开始,fq_codel 成为默认设置。fq 和 fq_codel 都能很好地工作,并且支持调速,不过谷歌的 BBR 团队推荐在使用 BBR 拥塞控制时使用 fq。
另外,我们不再建议将拥塞控制设置为 htcp。在较新的内核版本中,htcp 相对于默认的 cubic 设置似乎不再有优势。
我们还强烈建议降低最大流速率,以避免数据包突发导致交换机和接收主机的缓冲区溢出。
例如,对于 10G 主机,可将以下内容添加到启动脚本中:
/sbin/tc qdisc add dev ethN root fq maxrate 8gbit
对于运行使用 4 个并行流的数据传输工具的 10G 主机,可执行以下操作:
/sbin/tc qdisc add dev ethN root fq maxrate 2gbit
其中,ethN
是你系统上以太网设备的名称。
对于配备 10G 网卡、针对往返时间最长为 200 毫秒的网络路径进行优化,并且要兼顾单流和并行流工具使用的主机,或者配备 40G 网卡、针对往返时间最长为 50 毫秒的网络路径进行优化的主机,可使用以下配置:
# 允许 TCP 缓冲区最大达到 128MB
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
# 增加 TCP 自动调优的缓冲区限制
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# 对于启用巨型帧的主机推荐设置
net.ipv4.tcp_mtu_probing=1
# 推荐启用“公平排队”
net.core.default_qdisc = fq
对于配备 100G 网卡、针对往返时间最长为 200 毫秒的网络路径进行优化的主机,可使用以下配置:
# 允许 TCP 缓冲区最大达到 2GB(Linux 中允许的最大值为 2GB - 1)
net.core.rmem_max=2147483647
net.core.wmem_max=2147483647
# 增加 TCP 自动调优的缓冲区限制
net.ipv4.tcp_rmem=4096 131072 1073741824
net.ipv4.tcp_wmem=4096 16384 1073741824
# 对于启用巨型帧的主机推荐设置
net.ipv4.tcp_mtu_probing=1
# 推荐启用“公平排队”
net.core.default_qdisc = fq
# 需要增加此设置以使用 MSG_ZEROCOPY
net.core.optmem_max = 1048576
注意:你应该保持 net.tcp_mem
的默认设置不变,因为默认值就很合适。一些网站还建议将 net.ipv4.tcp_timestamps
和 net.ipv4.tcp_sack
设置为 0,称这样可以降低 CPU 负载。但我们强烈反对在广域网性能方面采用这一建议,因为我们观察到,默认值 1 利大于弊的情况更多。
Linux 支持可插拔的拥塞控制算法。要获取内核中可用的拥塞控制算法列表,可运行以下命令:
sysctl net.ipv4.tcp_available_congestion_control
在大多数 Linux 发行版中,cubic 通常是默认的拥塞控制算法,我们建议保持该设置不变。
要查看默认的拥塞控制算法,可执行以下命令:
sysctl net.ipv4.tcp_congestion_control
如果你使用的是巨型帧,我们建议将 tcp_mtu_probing
设置为 1 或 2,以帮助避免最大传输单元(MTU)黑洞问题。
更多信息:
Linux 网络性能参数详解。( https://github.com/leandromoreira/linux-network-performance-parameters )
Src
https://fasterdata.es.net/host-tuning/linux/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/11880.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~