为什么我的 RAMDisk 性能与 HDD 性能不匹配?

为什么我的 RAMDisk 性能与 HDD 性能不匹配?

我一直在考虑使用 RAMDisks 上的临时 GIT 存储库(使用 DataRAM 的 ramdisk)作为一种对象存储。我很想知道这是否值得,所以我运行了一个简单的基准测试,将 1000 x 30K 文件写入驱动器,然后比较了平均写入时间。当性能出来时,我感到惊讶始终如一有利于 HDD。

对于我得到的 HDD:

average: 0.47ms/write

对于我获得的 RAM 磁盘:

average: 0.76ms/write

谁能解释为什么这与预期相反?

答案1

使用 DMA 时,CPU 将数据复制到内存中,并告诉硬盘获取数据并将其写入磁盘。当硬盘执行此操作时,CPU 可以执行其他操作。对于 30K 文件,硬盘可以跟上读取和写入的速度。这些文件适合缓存,并且无需写入磁盘即可完成写入。磁盘的旋转和使用磁臂寻道才是真正的限制因素。

我不知道 ramdisk 是如何实现的,但它可能让 CPU 进行两次复制。

答案2

也许 HDD 操作已经被您友好的操作系统缓存在内存中,并且 RAMDisk(部分)位于虚拟 RAM/交换空间中?

答案3

这个问题很难回答,但总的来说,你应该明白人工基准测试很少可靠。你应该尝试测试实际的 git 存储库。

我的猜测是,将文件写入磁盘之所以“快速”,是因为 CPU 只需向驱动器发出命令“获取此内存块并将其写入驱动器的此部分”,然后驱动器会异步处理该命令(即,一旦发出命令,操作即“完成”)。但是复制到 RAM 磁盘时,您实际上要等到数据物理复制完成,而且由于您基本上是在执行 RAM 到 RAM 的复制,因此会产生争用。

再次,如果您打算使用它,我建议您尝试在实际的 Git 存储库上进行实际操作。

答案4

我认为这里的问题不在于内核<>内存速度,而在于数据内存软件的实现。对于 unix 来说,存在适合此类用途的 tmpfs(并且不需要额外的第二文件系统层),然而数据内存产品是相当旧的未修改的软件,有(可能的)错误或使用旧的未优化的程序架构。

当我尝试从 dataram ramdisk 运行游戏客户端时,性能也受到了影响,实际上速度比从 IDE 驱动器运行更差……有时甚至会出现 BSOD(12gb RAM 总共 2.5gb ramdisk)。使用 4gb ramdisk 时性能更差(???)。

使用相同的系统,FreeBSD 可以轻松处理 4GB 以上的 tmpfs

然而,ImDisk 的作者在论坛上也指出,Windows 在所有 ramdisk 的内存管理方面都做了一些奇怪的事情,所以可能也存在 Windows 子系统的缺陷

相关内容