.. Kenneth Lee 版权所有 2021
:Authors: Kenneth Lee :Version: 1.0 :Date: 2021-11-25 :Status: Draft
用Uncache写清除页面内容
本文是对这个补丁的一个分析: https://lwn.net/ml/linux-kernel/20211020170305.376118-1-ankur.a.arora@oracle.com/ 。
这个补丁的idea从标题就能看出来的,就是对页面清零的时候把页变成uncached的,反正 这把这些0留在cache中也没什么用,关键是它的效果:
它要求是大页(例子中是2M,估计更大的,比如以G算的),说明小页是不值得的。按 Patch的解释,这是因为Uncached就是比cache慢,只有足够大(大到超过cache的大小 ),才在体现出不需要走两步的优势。
在AMD和Intel上的效果是快272%和161%,这个提升很有看头(当然,这是单点的提升, 不是系统级的提升)。
实现方法不是依靠修改页属性来实现的,而是利用了Movnt和Clzero等带有cache hint的指 令实现的。所谓NT,是Non-Temporal,“不是临时的”,也就是说,尽量别用Cache,这样不 会让一堆的0清掉整个Cache。Clzero是AMD版本的实现。
但不是简单用这两个指令就可以了,因为这些指令是弱内存序的,这会导致清完以后 SetPageUptodate和它们顺序交叉(深入是为什么,我也没有分析),这需要补一个fence ,这可能会影响性能。
代码具体修改了: