gpt4 book ai didi

caching - WinXP 中文件的内存映射和系统缓存行为

转载 作者:行者123 更新时间:2023-12-02 15:53:44 28 4
gpt4 key购买 nike

我们的应用程序是内存密集型的,需要读取大量磁盘文件。总负载可以超过 3 GB。

有一个自定义的内存管理器,它使用内存映射文件来实现读取如此庞大的数据。仅当需要时,文件才会映射到进程内存空间,这样进程内存就可以得到很好的控制。但我们观察到,通过内存映射,系统缓存会不断增加,直到占用可用的物理内存。这会导致整个系统变慢。

我的问题是如何防止系统缓存占用物理内存?我尝试删除文件缓冲(通过使用 FILE_FLAG_NO_BUFFERING ),但是这样,读取操作会花费大量时间并降低应用程序性能。如何在不牺牲太多性能的情况下实现可扩展性。在这种情况下常用的技术有哪些?

我对 WinXP 操作系统缓存行为不太了解。任何解释相同内容的好的链接也会有所帮助。

最佳答案

我从事文件备份产品的工作,因此我们经常遇到类似的情况,我们自己的文件访问导致缓存管理器保留数据 - 这可能会导致内存使用量激增。

默认情况下,Windows 缓存管理器将尝试通过预读并保留文件数据以备再次需要时使用。

有几个注册表项可让您调整缓存行为,我们的一些客户已经通过此获得了良好的结果。

XP 的独特之处在于它具有一些服务器功能,但默认情况下针对桌面程序进行优化,而不是缓存。您可以在 XP 中启用系统缓存模式,这会预留更多内存用于缓存。这可能会提高性能,或者您可能已经这样做了,但它会产生负面影响!您可以阅读 here

我不能推荐自定义内存管理器,但我确实知道大多数重量级应用程序都有自己的缓存(Exchange、SQL)。您可以通过运行 process monitor. 观察到这一点

如果您想完全阻止缓存管理器使用内存来缓存文件,您必须禁用读取和写入缓存:

FILE_FLAG_NO_BUFFERING 和FILE_FLAG_WRITE_THROUGH

您还可以向 CM 提供其他提示(随机访问、临时文件),请阅读有关缓存行为的文档 here

即使禁用缓存,您仍然可以获得良好的读取性能,但您必须通过让自己的后台线程进行预读来模拟缓存管理器行为

此外,我建议升级到服务器级操作系统,即使 Windows 2003 也会为您提供更多缓存管理器调整选项。当然,如果您可以迁移到 Windows 7/Server 2008,由于动态分页/非分页池大小调整以及工作集改进,您将在相同的物理资源下获得更多性能改进。有一篇很好的文章here

关于caching - WinXP 中文件的内存映射和系统缓存行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764613/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com