我正在尝试了解 Windows 上的内置 IO 缓存。如果应用程序写入文件,然后随后多次读取/写入该文件,IO 缓存似乎应该允许这种情况以系统内存允许的速度发生?然后 Windows 会以非阻塞方式逐渐将更改写回物理磁盘?
但是,我在这个网站上看到了其他与 ramdisk 相关的问题,用户发现将部分系统内存安装为磁盘驱动器可以获得显著的收益。如果 IO 缓存的工作方式与我上面描述的一样,那为什么还需要这样做呢?Windows 是否有可以调整它的设置?
这些引出了我真正的问题:使用 ramdisk 并手动将更改同步回物理磁盘是否有意义,即使几分钟或几小时后?
编辑: 修复了 Evan Anderson 在回复中纠正的有关 DMA 与 IO 缓存的错误概念。
答案1
我认为您混淆了直接内存访问(DMA,一种硬件功能)的功能与 Windows 中的缓存管理器提供的功能。
DMA 是一种允许 IO 设备直接访问系统内存而无需 CPU 干预的方法。应用程序不使用 DMA——设备驱动程序使用。应用程序与 DMA 过程相距甚远。
应用程序的读/写请求在到达 IO 设备的过程中会经过多个层。缓存管理器将通过系统内存处理大量请求的缓存。IO 设备本身的设备驱动程序也可以实现缓存。
如果您的应用程序与缓存管理器交互效果不佳,但与 RAM 磁盘交互效果良好(您可以通过基准测试确定),那么请务必使用 RAM 磁盘。对我来说,学术上围绕各种技术的主观“优点”进行争论毫无意义。就生产部署而言,使用给定技术是否有“意义”的关键应该基于基准测试,该基准测试应尽可能接近您可以模拟的现实条件。当您对操作系统、驱动程序堆栈、应用程序代码等进行更改时,您应该重新进行基准测试,因为您的旧假设可能不再成立。
答案2
我经常看到 Windows 缓存存在很多问题,例如没有将一些最近的数据保存到缓存中。我在笔记本上的 Sysinternals RamMap 中看到缓存中有奇怪的几天前的 100 MB 视频文件。即使在相当长的内存短缺时期......
因此,请确保您的数据进入缓存。您有多少缓存内存以及您正在试验的文件大小是多少?