userfaultfd 现在是否支持文件备份映射?

Does userfaultfd now support file backed map?

我从userfaultfd的文档上看到的

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

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

明确回答,由于信息不在手册页中,我们可以看到来源。

尝试注册具有地址范围的 userfaultfd 对象必须 check 是否该范围是 "compatible":

…
/* 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 时,file-backed 重新映射(使用 generic_file_mmap)共享的范围也是兼容的