我正在使用 mmap 读取一个大型数据库文件(例如 100GB),其索引保存在主内存中(键偏移对)。
由于默认的 4KB 虚拟内存页面大小,我假设文件系统上的读取调用也将使用 4KB 块。但是,这对于我的应用程序的访问模式来说效率很低。因此,我正在研究使用大页面透明地将 I/O 单元的大小从 4KB 增加到 2MB 的可能性。
大页面的典型用途似乎是改善内存分配和 TLB 利用率,但我找不到任何关于它与实际文件 I/O 的关系的信息。使用mmap
,似乎只有私有匿名地图支持大页面。这个假设正确吗?我还尝试查看 libhugetlbfs,但无法找到如何使用它读取实际文件。
mmap
那么,有没有办法使用大于 4KB 的 I/O 单元透明地访问文件呢?