【发布时间】:2012-04-27 00:16:09
【问题描述】:
我有一个程序使用mmap() 和共享内存来有效地访问大型数据库文件。我想试验一下大页面,看看它是否能加快速度。
我认为一种快速简便的方法是将数据库文件复制到 Linux 的 hugetlbfs 目录并在旧位置创建一个 符号链接。
但是,这不起作用,因为cp 命令无法写入文件。我怀疑只能通过调用ftrunc() 和mmap() 系统调用来写入文件来创建文件。我可能会尝试编写一个复制工具来执行此操作,除非我得到描述现有工具的答案。
我正在寻找在 Linux 中使用大页进行共享内存映射的任何其他好方法。
【问题讨论】:
-
“透明大页”可能会给您带来所有好处,而无需任何特殊编码或将所有数据复制到hugetlb ramdisk。此功能是最新内核的标准功能,Red Hat 和 Suse 都已将其向后移植到其最新的企业版本(分别为 RHEL 6 update 2 和 SLES 11 SP2)
-
@Nemo:根据文档,透明大页面目前仅适用于私有匿名内存。我希望可以使用共享文件映射。
-
嗯,这听起来像是“未来工作”的一部分。好吧,遗留的hugetlbfs也只是匿名页面(一个ramdisk,基本上是一样的)。所以看起来 Linux 目前不支持你正在尝试做的事情。
-
@Nemo:是的,但是在 ramdisk 中它们被命名为匿名页面,应该可以在共享访问中打开。
标签: linux memory-mapped-files vfs huge-pages