【问题标题】:Boost mmap performance vs native memory maps与本机内存映射相比,提升 mmap 性能
【发布时间】:2010-09-01 00:58:39
【问题描述】:

我将编写一个基准测试工具来测试磁盘系统的 IOPS 和带宽的混合,因此我将转向 IO 的文件支持内存映射。因为该工具需要同时在 POSIX 和 WinNT 平台上,所以我不能只使用普通的旧 mmap。另外据我了解,您必须使 Linux 内核疯狂地认为整个文件将被顺序访问?这让我想到了 Boost 内存映射。在 Windows、Linux 和 Max OS X 上使用类似质量驱动程序的类似硬件上,Boost 内存映射是否可能会给我类似的性能?有人对跨系统的 Boost mmap 进行基准测试吗?

【问题讨论】:

  • Boost 内存映射比带有提示和一切的本机内存映射更快!升压太棒了。每个人都应该使用Boost! - 签署了一个随机提升助推器。

标签: c++ linux memory boost io


【解决方案1】:

我怀疑不会有性能差异,因为 Boost 只是提供了一个与平台无关的包装工具,但我建议您在特定情况下对其进行测试。

此外,Windows NT 平台还提供内存映射工具——它不像内存映射是 Linux 特有的功能。对于 Windows,您需要 CreateFileCreateFileMappingMapViewOfFile。 Windows 库的不同之处在于映射机制的创建与创建映射视图是分开的。否则功能是等效的。哦,就像在 POSIX 上一样,您需要清理,在这种情况下,视图上使用 UnmapViewOfFile,文件映射和文件句柄上使用 CloseHandle

【讨论】:

  • 在投入大量工作来实施这两种解决方案之前,值得一问,以便您可以进行基准测试。 SO 的快速回答是,boost 只是一个薄包装器,值得很多
  • 要在 POSIX 中为同一个文件创建多个地址映射,您只需使用同一个文件描述符多次调用 mmap()
  • @Martin:一般来说是的,但在这种情况下,我们谈论的是可能需要 4 个函数调用,而不是让 boost 的设置正常工作所需的任何东西。实施这两种解决方案并不是一件非常复杂的事情。 @caf:我没有很好地解释自己......我已经重写了那部分。
  • 出于同样的原因,程序员不需要问人们如何在 BSD 和 Linux 上创建匿名内存映射,因为如果他在两个系统上的手册页挖掘足够长的时间,他就会知道两者都支持映射/开发/空。这是一个问答,人们来这里分享专业知识并倾听他人的意见。 @Martin:确切地说,Linux 特定的预读行为至少需要 4 个实现,我需要在相同的硬件上运行才能了解我的目标平台。
  • @Novikov:不,那是完全不同的。在这种情况下,它与经验完全无关。我们无法知道您将对系统施加什么负载。我们无法知道您的基准测试目标是什么。您想最大化吞吐量吗?缩短访问时间? Wwe 正在讨论一种操作系统工具,它需要最多 3 次调用来尝试。鉴于此,我认为唯一的答案是自己尝试一下,在您将使用的负载下,然后看看。再多的经验也无济于事。 OTOH,当我们处理“文档类”问题时,经验会很有帮助。
猜你喜欢
  • 2015-05-20
  • 2019-02-12
  • 1970-01-01
  • 2011-05-20
  • 2012-06-03
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多