【发布时间】:2013-11-23 09:18:49
【问题描述】:
我正在实现一个基于磁盘的哈希表,支持大量键(26+ 百万)。该值被反序列化。整个文件的读取基本上是随机的,值小于页面大小,我正在针对 SSD 进行优化。安全/一致性不是那么大的问题(性能问题)。
我当前的解决方案是使用 mmap() 文件并设置 MADV_RANDOM | MADV_DONTNEED 以禁用内核预取,并且仅按需加载数据。
我知道内核从磁盘读取到内存缓冲区,然后我从那里反序列化。
O_DIRECT 呢?如果我调用read(),我仍在复制到缓冲区(我从中反序列化)所以我可以获得任何优势吗?
我在哪里可以找到有关mmap() 文件和在使用O_DIRECT 打开的文件上调用read() 的缓冲区的更多信息?
我对预读或缓存不感兴趣。它对我的用例没有任何好处。
【问题讨论】:
标签: c file-io buffer hashtable mmap