Linux内核中最先引入的机制:clear_refs or userfaultfd

Which mechanism was first introduced in Linux Kernel: clear_refs or userfaultfd

我想知道上述哪些机制是首先在Linux中引入的。 其中2个是脏位跟踪机制。

第一个是通过 /proc/clear_refs fs 完成的,如下所示:一旦用户将“4”写入 /proc/$pid/clear_refs,内核就会取消设置进程所有页面的脏位在下次尝试访问这些页面时,将触发页面错误并重置脏位(由内核),然后用户可以通过 /proc/pagemap 收集已访问的页面。

第二种允许用户自己处理页面错误:用户首先要求内核保护通过 mmap 分配的内存中的给定区域;在任何尝试访问该区域中的页面之后都会产生一个页面错误,该页面错误的处理将转移给用户,例如,用户可能会要求内核允许访问或拒绝访问。这样一来,就不需要再通过pagemap来知道哪些页面被访问过,哪些没有了。

来自man 5 proc

/proc/[pid]/clear_refs (since Linux 2.6.22)

并且来自 man 2 userfaultfd

VERSIONS
       The userfaultfd() system call first appeared in Linux 4.3.

看起来 /proc/[pid]/clear_refsuserfaultfd 大很多。