我有一个 Windows Server 2008 R2 文件服务器,其中有一些大文件,在极少数情况下,尽快将这些文件复制到另一个系统非常重要。
有没有办法强制这些文件始终缓存到 RAM 中?
答案1
大多数情况下,瓶颈不在于将文件从磁盘传输到 RAM,而在于从 RAM 传输到网络。除非系统活动非常繁忙或 RAM 不足,否则 Windows 应该能够相当智能地处理文件缓存。
您可能需要进行一些测试,看看您的系统是否真的存在瓶颈,如果将某些文件保留在内存中而不是在 Windows 认为应该保存到磁盘时将其交换到磁盘,则瓶颈会得到明显改善。我敢打赌,您节省的时间很少,因为瓶颈很可能是网络,而当文件排队进入网络时,驱动器在将文件从驱动器中拉出时已经在填充内存中的缓冲区。
话虽如此,据我所知,将数据文件保存在内存中的唯一真正可靠的方法是创建一个 RAM 磁盘并将文件复制到那里(假设它们是静态的)。否则,一旦断电,它们就会消失。
否则,您可能需要投资大量 RAM 和高速磁盘驱动器。甚至可能是镜像 RAID 配置,因为它具有较高的读取(写入速度较慢)性能。我会让 Windows 和内存管理器完成它的工作,并专注于使用更好的子系统(快速磁盘、RAID、大量内存、高速和高质量 NIC)最大限度地缩短访问时间,而不是对其进行调整,以至于调试或故障排除在将来会变得更加麻烦。
答案2
您可以尝试超级缓存或其他替代缓存解决方案,或者您可能需要考虑使用具有高速读取访问的 SSD - 这将很容易地饱和几乎任何网络连接。
我认为唯一的其他选择不符合您的需求,但我会提到它:
如果您正在应用程序中写入文件,您可以尝试使用以下命令创建:
FILE_ATTRIBUTE_TEMPORARY 和 FILE_FLAG_DELETE_ON_CLOSE
这告诉 Windows 尝试将文件保存在 RAM 中而不是磁盘上 - 我不认为这会满足您的需求,但您可以阅读更多内容http://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx#caching_behavior
答案3
没有标准方法可以做到这一点。Windows 缺少这样的钩子。如果这对您来说真的很重要,您可以尝试通过频繁从网络访问文件来玩弄 Windows 文件缓存算法。这应该会保持文件缓存,但没有保证。如果我没记错的话,您不需要读取整个文件来缓存整个文件,因此读取文件的子集就足够了。
答案4
您可以使用以下方式预先映射文件内存映射文件加快进程https://www.microsoft.com/store/apps/9N9TWRVC493H