Packet Pacing
当从速度较快的主机向速度较慢的主机发送数据时,很容易使接收方不堪重负,从而导致数据包丢失和 TCP 拥塞控制机制起作用(即 TCP 降速)。类似的问题也会在以下情况中出现:10G 主机向低于 10G 的虚拟电路发送数据;40G 主机向 10G 主机发送数据;CPU 性能较强的 40G/100G 主机向 CPU 性能较弱的 40G/100G 主机发送数据等等。当使用采用并行流的数据传输工具时,这些问题会更加明显。在一些长路径(往返时延为 50-80 毫秒)上,我们发现启用数据包调速后,TCP 性能提升了 2-4 倍。
下面介绍的基于公平排队(Fair Queuing,FQ)的调速方法是解决这一问题的非常有效的手段。
iperf2 和 iperf3(以及 perfSONAR pscheduler)都支持通过 --fq-rate
选项进行基于 FQ 的调速,你可以借此了解调速在你的环境中是否会产生效果。
使用 FQ(公平排队)调度器进行数据包调速
从 Linux 内核 3.11 及更高版本(CentOS 7.2、Fedora 20、Debian 8 和 Ubuntu 13.10 开始可用)起,Linux 包含了“公平排队”调度器,该调度器中的代码在对快速主机发出的数据包进行调速方面表现更佳。更多详情请见:https://lwn.net/Articles/564978/ 。
在此之后不久,fq_codel 被发布,它在 FQ 的基础上融入了公平排队和基于延迟的队列管理理念。从 2017 年发布的 4.12 内核开始,fq_codel 成为了默认的排队规则。不过,对于高吞吐量的 TCP 而言,我们建议使用 FQ 而非 fq_codel。如果你想在低于 4.20 版本的内核上试验 BBR 拥塞控制机制,则必须使用 FQ。
要确认你的主机是否配置为使用 FQ,可以执行以下命令:
sysctl -a | grep qdisc
如果没有配置,可在 /etc/sysctl.conf
文件中添加以下内容:
net.core.default_qdisc = fq
要为你的主机发出的所有流量启用数据包调速,可以执行以下命令:
tc qdisc add dev $ETH root fq maxrate Ngbit
例如,对于运行 GridFTP 的 10G 数据传输节点(DTN),该工具默认使用 4-8 条并行流,我们建议按如下方式设置 FQ:
tc qdisc add dev $ETH root fq maxrate 2gbit
其他有用的 tc
命令包括 show
和 delete
。例如:
tc qdisc show dev $ETH
tc qdisc del dev $ETH root
对于主要向 10G 主机发送数据的 100G 数据传输节点(DTN),同样建议将调速速率设置为 2Gbit。
你还可以通过使用 setsockopt
系统调用和 SO_MAX_PACING_RATE
选项,为你的应用程序添加基于 FQ 的调速功能。不过,这仅在主机配置为使用 FQ 或 fq_codel 作为排队规则时才有效。
有关配置 FQ 的更多信息可参考以下链接1和2。
1 http://man7.org/linux/man-pages/man8/tc-fq.8.html
2 http://man7.org/linux/man-pages/man8/tc.8.html
Src
https://fasterdata.es.net/host-tuning/linux/packet-pacing/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://zblog.hqyman.cn/post/11889.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~