我有一个程序对文件系统的占用非常大,它会随机读取和写入一组工作文件。这些文件总共有几 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
答案4
在这些文件上使用 mmap - 它使用内核的卓越缓存,使其速度更快。