我需要为大约 10 GB 的数据设置一个内存存储系统,其中包含许多 100 kb 的单个文件(图像)。会有很多读取和相当周期性的写入(添加新文件,删除一些旧文件)。
现在,我知道tmpfs的行为类似于常规文件系统,例如,您可以使用df检查可用/已用空间,这是一个不错的功能。但是,如果ramfs会在 IO 操作的速度方面提供一些优势,我很感兴趣。我知道在使用ramfs时我无法控制消耗的内存大小,并且如果它完全消耗了可用 RAM,我的系统可能会挂起,但这在这种情况下不会成为问题。
总而言之,我很感兴趣:
- 性能方面,哪个更快:ramfs或tmpfs(可能是为什么)?
- tmpfs何时使用交换空间?它是否将已保存的数据移动到交换(为当前正在运行的其他程序释放 RAM)或仅在当时没有可用 RAM 的情况下移动新数据?
我的建议:
在正常条件下测量和观察现实生活中的活动。
这些文件不太可能一直都需要并从缓存中提供。但是有一个名为vmtouch的好工具可以告诉您在给定时刻缓存中的内容。您还可以使用它将某些目录或文件锁定到缓存中。所以看看一些经常使用后的情况。对于这种情况,不需要使用 tmpfs 和 ramfs。
请参阅:http ://hoytech.com/vmtouch/
我想您会惊讶地发现最活跃的文件可能已经驻留在缓存中。
就 tmpfs 与 ramfs 而言,没有明显的性能差异。存在操作上的差异。一个真实的用例是 Oracle,其中 ramfs 用于允许 Oracle 管理 RAM 中的数据,而不会有被交换的风险。tmpfs 数据可以在内存压力下被换出。在动态调整大小和修改设置方面也存在差异。
不要想太多。在您的系统中放置足够的 RAM,并让内核的磁盘缓存为您处理一切。通过这种方式,您可以获得直接从内存读取的好处,同时仍然能够将数据持久保存在磁盘上。
1) 性能基准。
使用这个页面作为参考,我在 tmpfs 和 ramfs 之间进行了 I/O 比较,结果是它在性能方面几乎相同:
2)根据this page,tmpfs使用swap,而ramfs不使用swap。
如果您安装了足够数量的 RAM 来托管各种内核缓冲区、应用程序堆栈和堆、常规文件系统缓存以及您打算放入其中的所有文件,那么
ramfs
速度永远不会比它慢,tmpfs
因为不会有以下风险物理 I/O 设计。物理 I/O 无疑是该领域性能下降的主要原因。但是,如果您没有安装那么多 RAM,则使用
ramfs
可能并且可能会比tmpfs
后者使用虚拟内存启发式方法来决定磁盘上(即交换区域)和 RAM 上的内容更好使用 时tmpfs
,您的文件系统数据卡在 RAM 上,这可能会浪费资源。要回答您的第二个问题,是的,
tmpfs
将首先将旧数据移动到交换区域,而不是最后一个“热”数据。