UDP Tuning
若不进行一些调优,UDP 也无法达到完整的 10Gbps(或更高)速率。重要的因素如下:
使用巨型帧:使用 9K 最大传输单元(MTU)时,性能将提升 4 - 5 倍。 数据包大小:最佳性能对应的数据包大小为 MTU 大小减去数据包头部大小。例如,对于 9000 字节的 MTU,IPv4 使用 8972 字节,IPv6 使用 8952 字节。 套接字缓冲区大小:对于 UDP,缓冲区大小与往返时间(RTT)的关系不像 TCP 那样紧密,但默认值仍然不够大。在大多数情况下,将套接字缓冲区设置为 4M 似乎会有很大帮助。 核心选择:10G 速率的 UDP 通常受限于 CPU,因此选择合适的核心很重要。在 Sandy/Ivy Bridge 主板上尤其如此。
以下是 iperf、iperf3 和 nuttcp 的示例命令:
nuttcp -l8972 -T30 -u -w4m -Ru -i1 -xc4/4 远程主机地址
iperf3 -l8972 -T30 -u -w4m -b0 -A 4,4 -c 远程主机地址
numactl -C 4 iperf -l8972 -T30 -u -w4m -b10G -c 远程主机地址
你可能需要尝试不同的核心,以找到适合你主机的最佳核心。你可以使用 mpstat -P ALL 1
来确定哪个核心用于处理网卡中断,然后尝试同一套接字中的其他核心,但不要使用同一个核心。请注意,top
命令在这方面不可靠。
一般来说,nuttcp 在 UDP 传输中似乎是最快的。请注意,你需要使用 nuttcp V7.1 或更高版本才能使用 -xc
选项。
即使进行了这些调优,你仍需要高速核心才能达到完整的 10Gbps 速率。例如,2.9GHz 的英特尔至强 CPU 可以达到完整的 10Gbps 线路速率,但 2.5GHz 的英特尔至强 CPU 只能达到 5.9Gbps。2.9GHz 的 CPU 使用 40G 网卡时可实现 22Gbps 的 UDP 速率。
处理器架构的设计倾向于以牺牲时钟频率为代价来提高聚合容量(例如增加核心数量)。提高时钟速度存在问题,并且在某些使用场景下收益递减。许多较新的机器提供了更多的核心,这通常在虚拟机和大量小流量网络传输中表现出色。单流性能测试这类使用场景则受益于较少的核心和较高的时钟速度。
如果你想了解在两个独立核心上分别运行两个 UDP 流能达到的速率,可以这样操作:
nuttcp -i1 -xc 2/2 -Is1 -u -Ru -l8972 -w4m -p 5500 远程主机地址 & \
nuttcp -i1 -xc 3/3 -Is2 -u -Ru -l8972 -w4m -p 5501 远程主机地址 &
有关监控核心使用情况的更多信息,请参阅我们的 CPU 调优页面。( https://fasterdata.es.net/host-tuning/linux/cpu-tuning/ )
Src
https://fasterdata.es.net/host-tuning/linux/udp-tuning/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/11888.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~