2

据我了解,目前在 linux 上,没有办法对文件进行 mmap(在 xfs 或 ext4 上)然后写入文件并以某种方式使用大页面。

这是正确的还是过时的信息,现在有办法吗?

谢谢。

4

1 回答 1

1

如果您使用不是来自“hugetlbfs”的 MAP_HUGETLB 映射文件,则 mmap 将失败。从ksys_mmap_pgoff()

if (!(flags & MAP_ANONYMOUS)) {
    ...
    if (unlikely(flags & MAP_HUGETLB && !is_file_hugepages(file)))
         goto out_fput;

is_file_hugepages()检查文件 ops 是否为 hugetlbfs_file_operations,例如 ext4。

但是,您也许可以使用透明的大页面。目前(4.19 左右),您还必须使用 DAX(直接访问,通常与 nvdimms 和持久内存一起使用)。我还没有这样做,但那是通过跟踪代码。具体来说,要使大页面正常工作,您至少需要一个大页面对齐的地址,该地址来自thp_get_unmapped_area(),如果您不使用 DAX,该地址就可以解决:

 if (!IS_DAX(filp->f_mapping->host) || !IS_ENABLED(CONFIG_FS_DAX_PMD))
    goto out;
于 2018-09-18T21:07:08.323 回答