linux userfaultfd现在支持文件备份Map吗?

kqlmhetl  于 2023-06-21  发布在  Linux
关注(0)|答案(1)|浏览(120)

我从userfaultfd的文档中看到
https://manpages.debian.org/testing/manpages-dev/userfaultfd.2.en.htmlhttp://man7.org/linux/man-pages/man2/ioctl_userfaultfd.2.html
userfaultfd将从内核4.11开始支持共享Map。然而,文档看起来仍然非常模糊,我仍然想知道这些是否包括支持文件支持的mmap(也可以是MAP_SHARED)?

nfs0ujit

nfs0ujit1#

为了明确回答,由于信息不在手册页中,我们可以查看来源。
尝试用地址范围注册userfaultfd对象时,必须检查该范围是否“兼容”:

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

兼容性的定义是:

if ((vm_flags & VM_UFFD_MINOR) &&
    (!is_vm_hugetlb_page(vma) && !vma_is_shmem(vma)))
    return false;
#ifndef CONFIG_PTE_MARKER_UFFD_WP
/*
 * If user requested uffd-wp but not enabled pte markers for
 * uffd-wp, then shmem & hugetlbfs are not supported but only
 * anonymous.
 */
if ((vm_flags & VM_UFFD_WP) && !vma_is_anonymous(vma))
    return false;
#endif
return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma) ||
    vma_is_shmem(vma);

因此,匿名Map或以下中的Map:

  • tmpfs-backed,又名共享内存虚拟文件系统(tmpfs,shmget)Map兼容
  • 禁用CONFIG_SHMEM时,已重新Map(使用generic_file_mmap)为共享的文件备份范围也是兼容的

VM_UFFD_MINOR的含义是支持对轻微页面错误的通知。

相关问题