除了通常的新有线/无线网络硬件支持和大型 Linux 网络子系统中的其他例行变动之外,Linux 6.8 内核还对核心网络代码进行了一些关键改进,当遇到许多并发网络连接时,TCP 性能可以提高 ~40%。
首先,对核心网络结构进行了分析和重组。这项工作一直围绕着优化缓存行的使用和添加保护措施,以确保未来的更改不会倒退。反过来,这种对核心网络结构的优化导致许多并发连接的 TCP 性能提高了 40% 或更多!
Google 的 Coco Li 解释了他们对网络代码的 cachline 优化工作:
当前,网络栈中的变量密集结构按时间顺序、逻辑顺序组织,有时按缓存行访问组织。这个补丁系列试图重新组织核心网络栈变量,以在数据传输阶段最小化缓存行消耗。具体来说,我们研究了TCP/IP栈和TCP中的快速路径定义。
出于文档目的,我们还为我们考虑的每个核心数据结构添加了新的文件,尽管由于现有缓存行跨度的数量,并非所有在快速路径上都已被修改。在文档中,我们记录了我们在快速路径上识别的所有变量及原因。我们还希望在未来添加/修改变量时,可以参考并相应地更新文档,以反映最新变量组织。测试:我们的测试使用
neper tcp_rr
测试tcp流量。测试具有$cpu
数量的线程和可变数量的流量(见下文)。测试在6.5-rc1上运行 效率计算为cpu秒数/吞吐量(一个tcp_rr往返行程)。下面的结果显示在应用补丁系列之前和之后的效率delta。
- 在AMD平台上, 100Gb/s 的网卡和 256Mb 三级缓存:
|
|
- 在Intel平台上, 200Gb/s 的网卡和 205Mb 三级缓存:
|
|
对于Intel的服务器,优化不是那么明显,但是对于对于AMD EPYC服务器而言,这是一个天使般的改进,它们的网络性能提高了 40% 左右,这是一个巨大的提升。
相关的优化补丁可以查看Analyze and Reorganize core Networking Structs to optimize cacheline consumption, 主要由谷歌的Coco Li提交。
tcp的优化已经实现了,udp的优化还会远吗?