我正在实现一个基于磁盘的哈希表,支持大量键(26+ 百万)。该值被反序列化。整个文件的读取基本上是随机的,值小于页面大小,我正在针对 SSD 进行优化。安全/一致性不是那么大的问题(性能问题)。
我当前的解决方案包括使用一个mmap()
文件MADV_RANDOM | MADV_DONTNEED
来禁用内核预取,并且只按需加载数据。
我知道内核从磁盘读取到内存缓冲区,然后从那里反序列化。
怎么样O_DIRECT
?如果我打电话read()
,我仍在复制到缓冲区(我从中反序列化),所以我可以获得任何优势吗?
我在哪里可以找到有关文件涉及的缓冲区mmap()
和调用read()
打开的文件的更多信息O_DIRECT
?
我对预读或缓存不感兴趣。它对我的用例没有任何好处。