首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是直写式RAM磁盘,还是文件系统的海量缓存?

是直写式RAM磁盘,还是文件系统的海量缓存?
EN

Stack Overflow用户
提问于 2010-02-18 00:12:01
回答 4查看 38.3K关注 0票数 26

我有一个程序,它对文件系统的访问非常严重,对一组工作文件进行读写。这些文件有几on大小,但还没有大到无法放入RAM磁盘的地步。运行这个程序的机器通常是Ubuntu Linux机器。

有没有办法将文件管理器配置为具有非常非常大的缓存,甚至缓存写操作,以便它们在以后命中磁盘?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-18 01:06:44

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

在编程方面,您可能还希望通过内存映射(使用mmap)执行磁盘访问。这有点可操作性,但它提供了更多关于数据管理和优化的控制。

票数 25
EN

Stack Overflow用户

发布于 2010-02-18 00:52:39

检查您的磁盘是否正在使用其内置的写缓存。它可以产生相当大的不同。在Linux上,您可以使用hdparm切换行为。

代码语言:javascript
复制
/sbin/hdparm -W 0 /dev/hda 0 Disable write caching
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching

显然,如果启用了写缓存,那么如果系统不干净地关闭(例如,断电),则可能会丢失数据或损坏数据。

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

代码语言:javascript
复制
/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio

现代的默认设置是更频繁地写入,以避免huge write spikes。您可以尝试调整它们以满足您的需求。下面是可用参数的an excellent discussion,以及如何尝试调整它们。

票数 17
EN

Stack Overflow用户

发布于 2010-02-18 01:06:53

您可以创建一个RAM盘,并使用物理分区对其执行RAID 1操作。看看--write-behind和--write- Look选项。您可以使用它们使物理磁盘成为不能读取(仅写入)的磁盘,并分别设置未完成的写入操作的数量。

或者,看看the documentation for pdflush。除了 mentioned之外,您可能还希望将swap设置为100,以支持磁盘缓存而不是交换空间。

但是,有必要了解它是如何工作的,并根据您的特定应用程序对其进行调整。Linux已经针对一般情况进行了调整,只有您知道您的具体情况有何不同。:)

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2282276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档