Linux文件系统自动备份到磁盘,但完全存储在内存中?

7

我需要对大量文件进行小的随机访问。我拥有足够的主内存来容纳所有数据。

当我将数据复制到临时的ramfs文件系统中并在那里处理它时,这只需要很少一部分等待磁盘访问所需的时间。

是否存在一种Linux文件系统,可以将其所有数据保存在主内存中,将任何更改写入支持磁盘,但从不读取磁盘?

如果没有,是否可以调整缓存以确保ext3缓存100%的数据和元数据?

3个回答

8
如果您只是读取数据,那么您确实可以调整缓存以使所有数据都缓存在RAM中 - 请参阅/usr/src/linux/Documentation/sysctl/vm.txt以了解您可以在此处进行的调整详细信息。问题出现在您写入数据时,特别是如果您使用fsync()或类似功能来确保数据已提交到实际磁盘。
由于操作系统必须在fsync()的情况下更新磁盘,如果您仍然希望确保数据一致性并且不会在停电时丢失,那么您不能做太多事情。
您可能遇到的一个问题是atime或访问时间 - 默认情况下,每次访问文件时inode中的访问时间都会更新。即使您认为只是执行读取操作,这也会导致磁盘写入。在您访问许多小文件的情况下,这可能是一个特别的问题。如果您不关心跟踪访问时间,则可以使用noatime挂载文件系统以禁用此“功能”。

看起来 fs.txt 和这个问题没有关系,除非我错过了你在里面特别指出的内容? - Mikael Gueck
@mikaelhg:抱歉,我犯了一个错误 - 我的意思是“sysctl/vm.txt”,其中有各种可以调整的旋钮,例如vfs_cache_pressure。我会更新答案。 - DaveR

1

为什么不尝试在RAM磁盘和物理磁盘之间创建RAID镜像呢?

虽然不确定它是否有效率。如果镜像必须始终同步,那么当您写入时它将不得不等待磁盘,但对于读取,您应该会获得一些优势。 但是,对我来说,它看起来非常复杂,就像重新发明轮子的方形IO缓存:)

不过,这将是一个不错的实验。


这最终成为了正确的答案,使用mdadm --write-mostly命令。 - Mikael Gueck
实际上,我今天只是在运行基准测试。亚马逊EC2对于测试这些疯狂的想法真的非常方便。 - Mikael Gueck
当首次启动镜像时,这将实际上产生影响 - RAID 将执行线性扫描以填充 RAM 磁盘,这比执行大量随机查找以填充正常缓存更有效。 - bdonlan

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接