随着本周发布的一些额外的吸引人的 Linux 内核补丁供审查,一个更新的补丁系列正在努力优化上下文切换期间的代码生成。
Xie Yuanbin 发布了三组补丁,旨在优化编译器在上下文切换期间的代码生成,鉴于其频率,这可以是一项昂贵的任务,特别是随着 CPU 安全缓解措施的不断增加,上下文切换变得更加昂贵。
Xie 在最新的补丁系列中解释:
“这一系列补丁的目的是优化上下文切换的性能。它不会改变代码逻辑,只是修改了一些函数的内联属性。
发现 finish_task_switch()即使在 O2 级别优化下也没有被内联。这可能由于以下原因影响性能:
1. 这是在上下文切换代码中,这是一个热点代码路径。
2. 由于现代 CPU 漏洞,内核可能在 switch_mm_irq_off()内部执行一些缓解措施,例如分支预测强化或 L1D 刷新,这可能会清空指令流水线和缓存。finish_task_switch()紧随其后,因此这里的性能受到函数调用和分支跳转的很大影响。
3. __schedule 函数具有__sched 属性,这使得它被放置在”.sched.text”段中,而 finish_task_switch()没有,这导致它们在二进制中的距离非常远,加剧了上述性能下降。这一系列补丁主要使上下文切换中调用的某些函数始终作为内联函数来优化性能。
为确保更优化的代码生成,在 Intel CPU 上执行上下文切换的时间减少了 11%,或在应用 Spectre V2 缓解措施时减少了 44%。类似地,对于使用 LLVM Clang 构建的内核,上下文切换时间减少了 8%,或在 Spectre V2 缓解措施激活时减少了 35%。

有前景的数据以及那些想要了解更多或尝试这些补丁的人可以通过这个补丁系列来实现。
转自 New Patches Work To Optimize Code Generation For Linux Context Switching – Phoronix
Linuxeden开源社区