我从userfaultfd的文档中看到了

https://manpages.debian.org/testing/manpages-dev/userfaultfd.2.en.html
http://man7.org/linux/man-pages/man2/ioctl_userfaultfd.2.html

从内核4.11开始,userfaultfd将开始支持共享 map 。但是,从某种程度上说,该文档仍然看起来非常模棱两可,我仍然想知道这些功能是否包括支持文件支持的mmap(也可以是MAP_SHARED)?

最佳答案

为了明确回答,由于该信息不在手册页中,因此我们可以查看源。

尝试使用地址范围注册userfaultfd对象必须check该范围是否“兼容”:

…
/* check not compatible vmas */
ret = -EINVAL;
if (!vma_can_userfault(cur))
    goto out_unlock;

definition of compatibility是:
static inline bool vma_can_userfault(struct vm_area_struct *vma)
{
    return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma) || vma_is_shmem(vma);
}

因此,仅匿名映射( vma_is_anonymous )或以下位置的映射:
  • tmpfs-backed,又名共享内存虚拟文件系统(tmpfs,shmget)映射是兼容的
  • 禁用CONFIG_SHMEM时,已重新映射(使用generic_file_mmap)共享的文件支持范围也兼容
  • 08-16 19:56