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

Wil*_*ill 20 linux filesystems optimization ramdisk

我有一个程序,它非常重视文件系统,读取和写入一组工作文件.这些文件的大小为几千兆字节,但不大到不适合RAM磁盘.这个程序运行的机器通常是Ubuntu Linux机箱.

有没有办法将文件管理器配置为具有非常大的缓存,甚至可以缓存写入以便稍后访问磁盘?

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

Tho*_*nin 23

默认情况下,Linux将使用空闲RAM(几乎全部)来缓存磁盘访问,并将延迟写入.内核用来决定缓存策略的启发式方法并不完美,但在特定情况下击败它们并不容易.此外,在日志文件系统(即现在的所有默认文件系统)上,对磁盘的实际写入将以崩溃的弹性方式执行; 这意味着一点开销.您可能想尝试摆弄文件系统选项.例如,ext3尝试使用data=writeback或甚至安装async(这些选项可以提高文件系统性能,代价是降低对崩溃的恢复能力).此外,用于noatime减少文件系统活动.

以编程方式,您可能还希望通过内存映射(with mmap)执行磁盘访问.这有点实际,但它可以更好地控制数据管理和优化.

  • 用"noatime"挂载相关的文件系统绝对是这个案例的好建议. (3认同)
  • 如果你真的想强制内核缓存内容(就像我目前所做的那样),`vmtouch` 也很有用 (2认同)

ire*_*ses 17

您是否检查过您的磁盘是否正在使用其内置写入缓存?它可以产生相当大的差异.在Linux上,您可以使用以下方法切换行为hdparm:

/sbin/hdparm -W 0 /dev/hda 0 Disable write caching
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching
Run Code Online (Sandbox Code Playgroud)

显然,如果启用了写入缓存,那么如果系统不正常地关闭(例如断电),则可能会导致数据丢失或损坏.

在软件方面,Linux内核使用两个主要数字来参数化写行为.

/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio
Run Code Online (Sandbox Code Playgroud)

现代默认设置是更频繁地写入,以避免巨大的写入峰值.您可以尝试调整这些以满足您的需求.以下是对可用参数以及如何尝试调整它们的出色讨论.


dan*_*uer 12

您可以使用物理分区创建ramdisk和RAID-1.看看--write-mostly和--write-behind选项.您可以使用这些来使物理磁盘成为不可读取的物理磁盘(仅写入),并分别设置未完成的写入操作的数量.

或者,查看pdflush的文档.这里有一个很好的页面:http://www.westnet.com/~gsmith/content/linux-pdflush.htm(也由ire_and_curses链接)除了提到的内容之外,你可能想要将swappiness高达100来支持磁盘缓存超过交换.

但是值得学习它是如何工作的,并将其调整到您的特定应用程序.Linux已针对一般情况进行了调整,只有您了解具体情况的不同之处.:)

  • Dannysauer意味着`mdadm`的`--write-mostly`和`--write-behind`选项 (3认同)