皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Linux 7.0 在手动内联函数的 UDP 网络性能测试中得分提升 12%

Linux 7.0 内核的核心计时器变更在 UDP 接收网络压力测试中通过内联编译器无法用优化处理的功能,实现了相当不错的性能提升。

已合并到 Linux 7.0 的计时器变更包括手动内联网络热点代码路径中使用的 timecounter_cyc2time() 代码。这最终使 100 Gb 网卡接口的 UDP 接收压力测试性能提升了 12%。由于编译器反馈指导优化 (FDO)、链接时间优化 (LTO) 或配置引导优化 (PGO) 都未能解决这一问题(因为网络驱动程序通常作为内核模块提供而非内置),因此手动内联这两个函数。

Linux 7.0 在手动内联函数的 UDP 网络性能测试中得分提升 12%

谷歌的 Eric Dumazet 在提交这个优化的补丁中解释道:

“新的网络传输协议希望网卡驱动能够获取所有传入数据包的硬件时间戳,可能还包括所有传出数据包的时间戳。

一个例子是即将推出的 ‘Swift 拥塞控制’,它被 TCP 传输使用,并且是 timecounter_cyc2time() 的主要需求。这意味着在繁忙的服务器上,timecounter_cyc2time() 每秒可能会被调用超过 1 亿次。”

手动内联 timecounter_cyc2time() 函数使 100Gbit 网卡的 UDP 接收压力测试性能提升了 12%。

需要注意的是,FDO、LTO、PGO 在这种情况下无法神奇地提供帮助,推测是因为网卡驱动程序几乎都是作为模块提供的。

这段代码作为计时器/核心变更的一部分被合并,同时包含了一个单独的优化。那个其他优化是针对 tracepoint 禁用时的 tick 依赖性检查,这有助于在进入/退出空闲状态时 tick 管理代码中的热路径。

很高兴看到所有改进都及时地流入恰好定时的 Linux 7.0 内核。

转自  Linux 7.0 Scores +12% In UDP Network Performance Test From Manually Inlining Function – Phoronix