上周针对Linux6.9内核的x86/Entry拉入请求只包含一个补丁,但这是一个重要的补丁,因为它有助于降低CR3写入的开销,并且对于像Linux这样的工作负载来说,好处是显而易见的perf 功能.
Thomas Gleixner在Linux 6.9的x86/entry pull request中解释道:
当前CR3处理与#NMI、#MCE、#VC、#DB和#DF相关的偏执返回路径中的内核页表隔离是无条件地将CR3写入异常条目检索到的值。
在绝大多数情况下,当返回内核时,这是一个毫无意义的练习,因为CR3在异常条目时没有被修改。唯一需要这样做的情况是,当异常在切换到内核CR3之前中断了用户的一个条目,或者在切换回用户CR3之后中断了用户的一个退出。
由于CR3写入在某些系统上可能很昂贵,因此对于PERF等高频#NMI,这将成为可测量的开销。
通过检查保存在entry上的CR3值来避免这种开销,并且只有当它使用用户CR3时才将其写回CR3。”
这个pull request was successfully merged ahead of Linux 6.9-rc1 due out this weekend. This patch was written by an Alibaba engineer while Google also has carried a similar patch for their own internal kernel builds to this point.