提高mmap性能与本地内存映射的区别

4

我将编写一个基准测试工具,测试磁盘系统的IOPS和带宽混合,并因此使用文件支持的内存映射进行IO。由于该工具需要在POSIX和WinNT平台上运行,因此我不能仅仅使用普通的mmaps。此外,据我所知,您必须向Linux内核madvise整个文件将按顺序访问?这就引出了Boost内存映射。在类似硬件、相似质量的驱动程序和Windows、Linux和Max OS X上,Boost内存映射是否可能给我提供类似的性能?是否有人在不同系统上对Boost mmaps进行了基准测试?


3
提高内存映射比具有提示和其他内容的本地内存映射更快!Boost 真是太棒了。每个人都应该使用 Boost! - 签名:一个随机的 Boost 支持者。 - Omnifarious
1个回答

0

我认为Boost仅提供了一个平台无关的包装器,因此不会有性能差异,但我建议您在特定情况下进行测试。

此外,Windows NT平台提供了内存映射功能--这不像内存映射是Linux特定的功能。对于Windows,您需要使用CreateFileCreateFileMappingMapViewOfFile。Windows库的区别在于映射机制的创建与映射视图的创建是分开的。否则,功能是相同的。噢,就像在POSIX上一样,您需要清理,在这种情况下使用UnmapViewOfFile清理视图,使用CloseHandle清理文件映射和文件句柄。


2
在实现这两种解决方案之前,值得询问一下并进行基准测试。在 Stack Overflow 上得到的快速答复,即 boost 只是一个薄包装器,是非常有价值的。 - Martin Beckett
在POSIX中创建同一文件的多个地址映射,只需使用相同的文件描述符多次调用mmap()函数即可。 - caf
@Martin:一般来说是的,但在这种情况下,我们讨论的是大约4个函数调用与获取boost设置所需的任何内容。实现这两种解决方案并不是非常复杂的事情。@caf:我没有表达清楚……我已经重写了那一部分。 - Billy ONeal
2
同样的道理,程序员不需要问人们如何在BSD和Linux上创建匿名内存映射,因为如果他足够长时间地查阅两个系统的man页面,他就会知道两者都支持映射/dev/null。这是一个问答环节,人们来到这里分享专业知识并倾听他人意见。@Martin:确切地说,由于Linux特定的预读行为,我需要在相同的硬件上运行至少4个实现才能了解我的目标平台。 - Novikov
1
@Novikov:不,那完全不同。在这种情况下,它与经验完全无关。我们无法知道您将在系统上承受什么负载,也无法知道您的基准测试目标是什么。您想要最大化吞吐量? 最小化访问时间?我们正在谈论需要尝试最多 3 次的OS设施。鉴于此,我认为唯一的答案是自己尝试,在使用中的负载下进行测试。任何经验都没有帮助。另一方面,当我们处理“文档类型”问题时,经验可能会有所帮助。 - Billy ONeal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接