Nadav Amit 多年来一直致力于减少不必要的 TLB 刷新、并发 TLB 刷新和其他低级优化。最新的工作现在是关于“放松的”TLB 刷新作为另一个低级性能改进。
VMware 的 Nadav Amit 已经开始研究“宽松的”TLB 刷新,因为在他之前的工作中添加权限作为后续工作,以避免不必要的 TLB 刷新。他解释说:
此补丁集允许 userfaultfd 在 write-(un)protect ioctl 时直接将页面映射为可写,同时解决使用 userfaultfd write-unprotect 或 mprotect 添加权限时发生的不良行为。它还在此过程中进行了一些清理和微优化。
在补丁集中完成的主要更改(目前特定于 x86)是在添加权限时引入了“宽松”的 TLB 刷新。在“宽松”的 TLB 刷新时,mm 的 TLB 生成提前并且本地 TLB 被刷新,但不会发生 TLB 击落。如果发生虚假页面错误,并且发现 TLB 的本地生成与 mm 生成不同步,则在故障内核上执行完整的 TLB 刷新以防止进一步的虚假页面错误。
在某种程度上,“宽松刷新”类似于前段时间为内核映射提出的更改。但是,它与 NMI 处理程序没有任何复杂的交互。
在其补丁消息中进一步总结了宽松的 TLB 刷新:
引入严格和宽松 TLB 刷新的概念。宽松 TLB 刷新是可以跳过但可能导致性能下降的 TLB 刷新。正确处理松弛刷新取决于arch代码(在下一个补丁中)。一种这样的行为是急切地刷新本地 TLB 并懒惰地刷新远程 TLB。
性能实验看起来非常积极,以 mprotect(PROT_READ|PROT_WRITE) 的周期测量可节省多达 44% 或仅使用 mprotect(PROT_READ) 可减少约 6% 的 CPU 周期。
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun177487.html