直写式 RAM 磁盘,或文件系统的大量缓存?

Wil*_*ill 9 linux performance ramdisk

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

有没有办法将文件系统配置为具有非常大的缓存,甚至可以缓存写入以便稍后访问磁盘?我了解断电等问题,并准备接受这一点。抛开崩溃,在正常操作中,写入最终应该到达磁盘!

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

小智 8

考虑使用使用 fast-and-loose 挂载选项的 ext4 文件系统:

noatime,data=writeback,nobh,barrier=0,commit=300
Run Code Online (Sandbox Code Playgroud)

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

除此之外,您可以使用aufs在常规文件系统之上联合安装 tmpfs 文件系统,完成所有写入,然后将 tmpfs 合并回真正的文件系统。

  • 选项的含义:http://www.mjmwired.net/kernel/Documentation/filesystems/ext3.txt (4认同)

小智 6

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

如果您没有看到 IO 等待,那么您的性能问题(您甚至有问题吗?您的问题没有说)可能是由于来自许多小程序启动的 IO 操作的内核上下文切换造成的。在这种情况下,您可以通过重写应用程序以使用内存映射文件来获得显着的性能提升。但这对 StackOverflow 来说更像是一个问题。


Ham*_*ner 2

Linux 默认情况下使用任何空闲 RAM 作为文件缓存,因此无需进行任何配置。

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

这具有将分配批量分配到更大的运行中的效果。这种延迟处理会降低 CPU 使用率,并倾向于减少磁盘碎片,尤其是对于增长缓慢的文件。当多个文件同时增长时,它还可以帮助保持分配连续。

由于使用日志记录,数据丢失的情况非常罕见。

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