0

读取具有 dbms 样式访问模式的文件的最佳方法是什么?我的意思是:

  • 我事先知道我需要获取的页面的偏移量。
  • 有很长的连续页面。
  • 可能存在小的不连续性。
  • 可能有很长的不连续性。
  • 所有的偏移量都是有序的(没有前后移动)。

此类偏移列表的示例:1,2,3,4,5,6,7,8,1000,1001,1003,1004,1005,1010,1011,1012,31004,31005,31006。

我对使用哪种策略来获得最佳性能有点困惑。

  • 我应该依赖 Linux 页面管理器吗?如何?将遍历偏移量并一次读取 1 个块好吗?
  • 使用 O_DIRECT 打开文件并管理我自己,即:交替长读取和搜索。在这种情况下我应该禁用预读吗?
4

1 回答 1

1

我不知道它最终是否是“最好的”,但我可能会mmap()使用该文件,然后madvise()尝试强制系统预先设置错误页面范围。madvise()显然,这还需要对您的偏移列表进行一些计算以识别连续的范围(好吧,它实际上并不需要它,但如果有很多这样的范围,这将减少调用并获得一点效率)。故障前多远取决于您在每个页面/范围上花费多少时间来进行您尝试进行的任何计算,因此需要进行一些测试/调整。你也可以用它madvise()来暗示你完成后不再需要一个范围,所以它可能会被撞到 to-be-freed-next 列表的前面。

于 2012-07-17T19:22:06.803 回答