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_refs
比 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_refs
比 userfaultfd
大很多。