RAMdisk比磁盘慢吗?

时间:2010-10-14 00:23:20

标签: performance file ramdisk

我创建的python程序是IO有界的。大多数时间(超过90%)花费在单个循环中,重复约10,000次。在这个循环中,生成~100KB的数据并写入临时文件;然后由另一个程序读回,并收集有关所收集数据的统计数据。这是将数据传递到第二个程序的唯一方法。

由于这是主要的瓶颈,我认为将临时文件的位置从我的主HDD移动到(~40MB)RAMdisk(超过2GB的空闲RAM)将大大提高此文件的IO速度所以减少运行时间。但是,我获得了以下结果(每次平均超过20次):

  • 测试数据1:没有RAMdisk - 72.7s,使用RAMdisk - 78.6s
  • 测试数据2:没有RAMdisk - 223.0s,使用RAMdisk - 235.1s

看起来RAMdisk比我的HDD慢。

导致这种情况的原因是什么?

为了获得更快的文件IO,还有其他替代方法可以使用RAMdisk吗?

5 个答案:

答案 0 :(得分:3)

您的操作系统几乎肯定已经缓冲/缓存磁盘写入。 RAM磁盘的性能如此接近并不奇怪。

如果不确切知道您的写作内容或方式,我们只能提供一般性建议。一些想法:

  • 如果你有2 GB RAM,你可能有一个不错的处理器,所以你可以把这个数据写入一个有压缩的文件系统。假设您的数据符合这一要求,那将会交换I / O操作的CPU时间。

  • 如果您正在进行许多小写操作,请将它们组合起来立即写入较大的部分。 (我们可以看到源代码吗?)

  • 您是否在使用后删除了100 KB文件?如果您不需要它,请将其删除。否则,OS可能会被强制将其刷新到磁盘。

答案 1 :(得分:2)

您可以批量编写数据而不是一次编写一个项目吗?您是否正在缓存诸如打开文件句柄等资源或清理它们?您的磁盘是否写入阻塞,是否可以使用后台线程来使IO饱和,同时不影响计算性能。

我会首先考虑优化磁盘写入,然后在完成后查看速度更快的磁盘。

答案 2 :(得分:2)

我知道Windows在缓存RAM中的磁盘数据方面非常积极,100K很容易适应。写入直接进入缓存,然后可能通过非阻塞写入写入磁盘,这允许程序继续。 RAM磁盘可能不支持非阻塞操作,因为它希望这些操作快速而且不值得打扰。

通过减少程序和缓存可用的内存量,即使只是略微增加,也会增加分页的磁盘I / O量。

这是我的所有猜测,因为我不熟悉内核或驱动程序。我还推测Linux的运作方式类似。

答案 3 :(得分:0)

我有同样令人难以置信的经历,经过多次尝试,我发现了它。 当ramdisk被格式化为FAT32时,即使基准测试显示高值,实际使用实际上比NTFS格式化的SSD慢。 但NTFS格式的ramdisk在现实生活中比SSD更快。

答案 4 :(得分:0)

在我的测试中,我发现不仅批量大小会影响整体性能,还会影响数据本身的性质。在一种情况下,与SSD相比,我设法获得了5倍的写入时间:将100MB的预先煮熟的随机字节数组写入RAM驱动器。编写更多“可预测”的数据,如字母“aaa”或当前日期时间会产生相反的结果 - SSD总是更快或相等。所以我的猜测是,操作系统(在我的情况下为Win 7)进行了大量的缓存和优化。 看起来像RAM驱动器最阻碍的情况是当你执行大量小写而不是几个大写时,并且RAM驱动器在编写大量难以压缩的数据时非常有用。