我有一个使用 mmap()
和共享内存来有效访问大型数据库文件的程序。我想尝试使用大页面,看看它是否可以加快速度。
我认为一种快速简便的方法是将数据库文件复制到 Linux 的 hugetlbfs
目录并在旧位置创建一个 symlink
。
但是,这不起作用,因为 cp
命令无法写入文件。我怀疑只能通过调用 ftrunc()
和 mmap()
系统调用来写入文件来创建文件。我可能会尝试编写一个复制工具来执行此操作,除非我得到描述现有工具的答案。
我正在寻找在 Linux 中使用大页面进行共享内存映射的任何其他好方法。
现在是一个老问题。但是看到没有人回答,我实际上也想尝试使用大页面支持(出于不同的原因)。我会提供一个答案。
尽管大页面现在在现代内核中是透明的,但您仍然可以获得更多控制权。
这些功能可能就是您正在寻找的。
get_huge_pages() , free_huge_pages() , get_hugepage_region() , free_hugepage_region()
您需要安装 libhugetlbfs ,它是 hugetlbfs 的包装器。
这是一篇 Linux Weekly 文章,您可能会发现它有帮助。 Huge pages - part 1 (Introduction)