userfaultfd现在支持文件支持的地图吗?

时间:2018-02-19 09:51:00

标签: linux memory-management linux-kernel shared-memory memory-mapped-files

我在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)?

1 个答案:

答案 0 :(得分:3)

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

尝试注册具有地址范围的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)共享的文件支持范围也是兼容的