我必须对一大堆文件进行大量的随机访问。我有足够的主内存来容纳所有数据。
当我将数据复制到临时ramfs文件系统并在那里进行处理时,这只需要等待磁盘访问的一小部分时间。
是否存在将所有数据保存在主内存中的Linux文件系统,将任何更改写入后备磁盘,但是从不接触磁盘进行任何读取操作?
如果没有,可以说,可以调整ext3缓存,以保证它们能够保存100%的数据和元数据吗?
答案 0 :(得分:8)
如果您只是读取数据,那么您确实可以调整缓存,以便所有数据都缓存在RAM中 - 请参阅/ usr / src / linux / Documentation / sysctl / fs.txt vm。 txt有关您可以在此调整的详细信息。当您写入数据时会出现问题,特别是如果您使用fsync()或类似数据以确保数据已提交到实际磁盘。
由于操作系统已经在fsync()
的情况下更新磁盘,如果你仍然想确保你的数据是一致的并且不是在停电时输了。
您可能遇到的一个问题是atime
或访问时间 - 默认情况下,每次访问文件时都会在inode中更新访问时间。即使您认为自己只执行读取操作,也会导致磁盘写入。在您访问许多小文件的场景中,这可能是一个特殊问题。如果您不关心跟踪访问时间,可以使用noatime
安装文件系统以禁用此“功能”。
答案 1 :(得分:1)
为什么不尝试在ramdisk和物理磁盘之间创建RAID镜像?
不确定它是否有效。如果必须始终同步镜像,则在写入时无论如何都必须等待磁盘,但是为了阅读,您应该获得一些东西。 但是,是的,对我而言,它看起来非常复杂,轮子重新设计的方形IO缓存:)
但是,这将是一个不错的实验。
答案 2 :(得分:0)
看看这个:
http://freecode.com/articles/virtual-filesystem-building-a-linux-filesystem-from-an-ordinary-file
您可以将文件作为FS安装到RAMdisk中,然后将其备份为文件。
不要经常备份,但这是一个很好的解决方案,只需一次保存所有虚拟磁盘。