繁体   English   中英

经常访问文件映射的内存

[英]Frequently Accessing File Mapped Memory

频繁访问大文件映射内存(1〜2 GB)会导致性能下降吗? (在一个紧密的循环中,例如游戏的更新循环中)

就Google而言,内存映射文件是由OS缓存的(使用页面错误),这使得由于将其加载到内存中似乎可以安全地进行频繁访问。

但是,我还发现,由于已缓存 ,未加载 ,因此可能会导致性能下降。

请帮助我得到正确的答案,不胜感激。 我想知道Linux和Windows的答案,但我怀疑它们的行为有所不同。

注意:当我说“访问”时,我会同时读和写。

您询问有关重复访问1-2 GB范围的内存映射文件的问题。 简短的答案是,是的,它会降低性能,特别是在您的页面很小的情况下。

第一个问题是(默认情况下)重复访问1 GB的任何内存将(默认情况下)趋向于驱逐您拥有的任何其他数据,并且CPU数据缓存的命中率将受到影响。 考虑到典型的CPU数据高速缓存大小仅为几兆字节。

第二个问题是转换后备缓冲区。 如果您使用的默认页面大小为4 KB,则1 GB为250k页面。 在Linux上,您应该启用“大页面”以减少由于访问如此大的内存区域而导致的TLB负载。

第三个问题是您似乎尚未对其进行测试。 测试对于这种事情非常重要。 没有它,您将永远不会知道自己是一个真正的问题,还是只有一个假设的问题。

这在很大程度上取决于系统。 一个考虑因素是OS是否可以直接将内存映射到磁盘,或者是否需要某种中间转换。 某些OS / File System组合允许将映射的文件完全视为页面文件(提供良好的性能和最快的方式来读取大文件,尤其是在磁盘上连续时)。 其他人没有。

我怀疑他们的行为会有所不同。

它们实际上是完全不同的。 Windows使用支持连续文件的硬文件系统。 经典Unix没有连续文件的概念

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM