内存映射文件vs. RAM磁盘

本文关键字:RAM 磁盘 vs 文件 映射 内存 | 更新日期: 2023-09-27 18:05:43

对于游戏Minecraft,运行服务器应用程序时的一般方法是在RAMDisk中运行,因为它使用数百个小文件来生成世界,并且I/O速度是主要瓶颈。

在最近的一次尝试中,我尝试使用Dokan/ImDisk以编程方式为服务器应用程序创建一个RAMDisk。Dokan的速度比普通硬盘慢得多,我无法让ImDisk正常运行。因为这是我所知道的仅有的两个文件系统驱动程序有。net API,我现在正在寻找替代方案。

之前有人向我提到要尝试内存映射文件。我目前的方法是创建RAMDisk,在游戏服务器的数据文件夹和RAMDisk之间创建符号链接,然后启动游戏服务器进程。

  • 内存映射文件可以同样的方式,即创建一个虚拟驱动器,我可以创建一个符号链接到?例如G:'Data_Files'?

  • 是否有任何其他替代Dokan/ImDisk与。net API/绑定浮动?

内存映射文件vs. RAM磁盘

有几种方法取决于任务的具体情况。

如果你需要使用文件系统(即通过文件系统API函数和类),并且你想要它快,那么(正如我在回答你之前的问题时建议的)你需要创建一个RAMDisk驱动程序。Windows Driver Kit包括一个示例驱动程序,它(巧合吗?)的名称为"RamDisk"。但是,驱动程序开发是很棘手的,如果示例出现问题或者您需要扩展它,则需要深入研究内核模式开发(或雇人来完成这项工作)。为什么是内核模式?正如您在Dokan中看到的那样,切换回用户模式来存储数据会导致严重的减速。

如果您需要的只是使用Stream类方便地管理内存中的一堆文件(有可能将所有这些文件刷新到磁盘),那么您可以使用虚拟文件系统之一。我们的SolFS(应用程序版)就是您可以使用的产品之一(我还记得CodeBase文件系统,但他们似乎没有提供评估版本)。SolFS似乎很适合你的任务,所以如果你也这么认为,你可以私下联系我(见我的个人资料)寻求帮助。

:

  1. 不,内存映射文件(MMF)实际上是磁盘上的文件(包括虚拟磁盘,如果有的话),可以不通过文件系统API访问,而是直接使用内存操作访问。对于大多数文件操作,mmf往往更快,这就是为什么它们经常被提到的原因。

  2. 我们的回调文件系统或回调磁盘产品(参见虚拟存储线)是另一种选择,但是,正如我在第一段中提到的,由于用户模式上下文切换,它们不能解决您的问题。

更新:我认为驱动程序在内存中有一个副本并在需要时异步地执行对磁盘的写操作没有任何障碍。但是这需要修改示例RAMDisk驱动程序(这涉及到相当多的内核模式编程)。

使用SolFS或其他虚拟文件系统,您还可以在磁盘上拥有存储空间的副本。在虚拟文件系统的情况下,处理磁盘上的容器文件似乎会给您带来满意的结果(因为虚拟文件系统通常有一个内存缓存),您根本不需要保留内存副本。

在看了一堆解决方案并做了一些基准测试后,我们不能放弃DataRam的RAMDisk。我们尝试了一堆Windows驱动程序和其他一些免费的解决方案,最终无法证明与商业解决方案的微小价格标签相比,这笔费用是合理的。