我有一个程序,它对文件系统的访问非常严重,对一组工作文件进行读写。这些文件有几on大小,但还没有大到无法放入RAM磁盘的地步。运行这个程序的机器通常是Ubuntu Linux机器。
有没有办法将文件管理器配置为具有非常非常大的缓存,甚至缓存写操作,以便它们在以后命中磁盘?
或者,有没有一种方法可以创建一个写到真实磁盘的RAM磁盘?
发布于 2010-02-18 01:06:44
默认情况下,Linux将使用空闲RAM (几乎全部)来缓存磁盘访问,并将延迟写入。内核用来决定缓存策略的启发式方法并不完美,但在特定情况下击败它们并不容易。此外,在日志文件系统(即现在所有的默认文件系统)上,对磁盘的实际写入将以一种对崩溃具有弹性的方式执行;这意味着一些开销。您可能希望尝试摆弄文件系统选项。例如,对于ext3,尝试使用data=writeback甚至async挂载(这些选项可能会提高文件系统的性能,但会降低对崩溃的恢复能力)。另外,使用noatime减少文件系统的活动。
在编程方面,您可能还希望通过内存映射(使用mmap)执行磁盘访问。这有点可操作性,但它提供了更多关于数据管理和优化的控制。
发布于 2010-02-18 00:52:39
检查您的磁盘是否正在使用其内置的写缓存。它可以产生相当大的不同。在Linux上,您可以使用hdparm切换行为。
/sbin/hdparm -W 0 /dev/hda 0 Disable write caching
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching显然,如果启用了写缓存,那么如果系统不干净地关闭(例如,断电),则可能会丢失数据或损坏数据。
在软件方面,Linux内核使用两个主要数字来参数化写入行为。
/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio现代的默认设置是更频繁地写入,以避免huge write spikes。您可以尝试调整它们以满足您的需求。下面是可用参数的an excellent discussion,以及如何尝试调整它们。
发布于 2010-02-18 01:06:53
https://stackoverflow.com/questions/2282276
复制相似问题