c/c++语言开发共享mmap vs O_DIRECT用于随机读取(涉及的缓冲区是什么?)

我正在实现一个支持大量密钥(2600万)的基于磁盘的哈希表。 该值被反序列化。 读取在整个文件中基本上是随机的,值小于页面大小,我正在针对SSD进行优化。 安全性/一致性不是那么大的问题(性能问题)。

我目前的解决方案涉及使用带有MADV_RANDOM | MADV_DONTNEEDmmap()文件 MADV_RANDOM | MADV_DONTNEED设置为禁用内核预取,仅根据需要按需加载数据。

我认为内核从磁盘读取到内存缓冲区,我从那里反序列化。

O_DIRECT怎么样? 如果我调用read() ,我仍然会复制到缓冲区(我反序列化),那么我可以获得任何优势吗?

在哪里可以找到有关mmap()文件所涉及的缓冲区的更多信息,并在使用O_DIRECT打开的文件上调用read()

我对提前读取或缓存不感兴趣。 它对我的用例没有任何帮助。

    当数据绕过系统缓冲区并从缓冲区直接复制到磁盘控制器时,O_DIRECT是读/写操作的选项。 为了获得O_DIRECT的优点,需要遵守一些条件 – 通过I / O块对齐的内存页缓冲区地址和缓冲区大小保持对齐。

    无论如何,如果使用mmap,则不使用读/写。 而且,在mmap之后,你可以关闭文件描述符,映射仍然有效。 所以,O_DIRECT与mmap选项无关。

    我可以推荐什么来提高性能:

    我在自动完成子系统中实现的两个选项,您可以在这里在线查看: http ://olegh.ftp.sh/autocomplete.html并估算慢速旧计算机上的性能 – 赛扬300。

      以上就是c/c++开发分享mmap vs O_DIRECT用于随机读取(涉及的缓冲区是什么?)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享mmap vs O_DIRECT用于随机读取(涉及的缓冲区是什么?)

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560070.html

      (0)
      上一篇 2021年1月27日 下午3:29
      下一篇 2021年1月27日 下午3:32

      精彩推荐