写入 RAM 磁盘,还是文件系统的大量缓存?

写入 RAM 磁盘,还是文件系统的大量缓存?

我有一个程序对文件系统的占用非常大,它会随机读取和写入一组工作文件。这些文件总共有几 GB 的大小,但我可以腾出 RAM 以将它们大部分保存在内存中。运行此程序的机器通常是 Ubuntu Linux 机器。

有没有办法配置文件系统以拥有非常大的缓存,甚至可以缓存写入以便它们稍后到达磁盘?我理解断电或类似问题,并准备接受这一点。除了崩溃之外,在正常运行中,写入最终应该到达磁盘!

或者有没有办法创建一个可以写入真实磁盘的 RAM 磁盘?

答案1

考虑使用采用快速而松散挂载选项的 ext4 文件系统:

noatime,data=writeback,nobh,barrier=0,commit=300

推迟将数据从缓存写回物理磁盘。

除此之外,您还可以aufs在常规文件系统顶部联合挂载 tmpfs 文件系统,进行所有写入操作,然后将 tmpfs 合并回真实文件系统。

答案2

您是否看到大量的 IO 等待,这表明现有缓冲区无法满足读写请求?正如其他人所说,Linux 非常擅长为缓冲区提供备用 RAM,因此您应该首先检查这一点。

如果您没有看到 IO 等待,那么您的性能问题(您真的有问题吗?您的问题没有说明)可能是由于大量小程序发起的 IO 操作导致的内核上下文切换。在这种情况下,您可以通过重写应用程序以使用内存映射文件来显著提高性能。但这更像是 StackOverflow 的问题。

答案3

Linux 默认使用任何备用 RAM 作为文件缓存,因此不需要进行任何配置。

您可能需要考虑使用ext4作为文件系统。它使用了很多技术来加速磁盘访问,包括延迟分配哪个:

这样做可以将分配分批处理成更大的运行。这种延迟处理可以减少 CPU 使用率,并有助于减少磁盘碎片,尤其是对于增长缓慢的文件。当有多个文件同时增长时,它还可以帮助保持分配连续。

由于使用日记

Ext4 现在是 Linux 最新版本的默认文件系统,不过你可能需要确保使用的内核至少为 2.6.30

答案4

在这些文件上使用 mmap - 它使用内核的卓越缓存,使其速度更快。

相关内容