Linux RAMDisk 文件系统在文件系统已满时阻止写入

Linux RAMDisk 文件系统在文件系统已满时阻止写入

我需要设置一个Linux RAMDisk来实现队列。

基本思想是将有进程写入 RAMDisk。同时,还有一些进程监视新文件并在新文件出现时读取和删除它们。

在写入速度比读取速度快并且 RAMDisk 已填满的情况下,写入应该被阻止,直到 RAMDisk 中有足够的空间来存储即将进入的新文件。

一种选择是使用 tmpfs,当分配给文件系统的 RAM 全部使用时,它会“溢出”到磁盘 - 但是,由于其中涉及的 HDD IO 速度较慢,整个系统会变慢 - 而在我的高性能系统中这是不可接受的。

我理想中的文件系统是当 RAMDisk 已满时自动阻止写入,直到有足够的空间可用。

请注意,我无法控制写入过程,因此它们无法查询可用空间并等待 - 它们只是一直在写入的愚蠢过程。

有什么解决办法吗?

答案1

您的问题没有简单的解决方案;磁盘已满是错误,需要发出信号。如果没有修改生产者的能力,您就无法做您想做的事情。一种无需修改代码即可修改代码的方法,就像涉及一样LD_PRELOAD,但老实说,这不是我想要邀请任何人实施的解决方案。正确的答案是首先正确设计您的系统,而不是接受“没有控制”作为糟糕设计的借口。

无论如何,鉴于您显然不担心可靠地处理所有作业(否则您不会尝试在 ramdisk 中实现队列),为什么不让生产者在队列已满时放弃作业呢?

相关内容