【发布时间】:2012-07-16 15:32:51
【问题描述】:
读取具有 dbms 样式访问模式的文件的最佳方法是什么?我的意思是:
- 我事先知道需要获取的页面偏移量。
- 有很长的连续页面。
- 可能存在小的不连续性。
- 可能存在较长的不连续性。
- 所有偏移都是有序的(没有前后移动)。
此类偏移列表的示例: 1,2,3,4,5,6,7,8,1000,1001,1003,1004,1005,1010,1011,1012,31004,31005,31006。
我对使用哪种策略来获得最佳性能有点困惑。
- 我应该依赖 Linux 页面管理器吗?如何?将循环通过 偏移并一次读取 1 个块好吗?
- 使用 O_DIRECT 打开文件并管理我自己,即:交替长读取和搜索。在这种情况下我应该禁用预读吗?
【问题讨论】:
-
O_DIRECT可能很难使用,因为您必须自己管理对齐方式。 -
您可以使用 Linux
aio或 posixaio接口,将所有请求排队。驱动程序应该能够找出完成读取的最佳方式。 -
你试过 mmap 来看看效果吗?
标签: c++ c linux-kernel hard-drive