Linux 的备用 FIFO 设备具有更大的缓冲区,同时仍然具有文件系统语义?

Linux 的备用 FIFO 设备具有更大的缓冲区,同时仍然具有文件系统语义?

我正在开发一些东西,其中包括一个我制作的生成输出的程序和一个我没有制作的程序(并且非常希望不必更改它)消耗它。我正在使用使用创建的命名 FIFO mkpipe。我怀疑由于 Linux FIFO 缓冲区较小而存在性能瓶颈。 (并且在不修补内核的情况下无法更改此大小。)

是否有一种类似 FIFO 的替代方案可以与几十兆字节的缓冲区一起使用?非我制作的程序可以从任何可以具有文件系统名称的东西中读取 -/dev/stdin命名管道(就像现在所做的那样),真实文件,/dev/any-character-device...

如果没有其他可用的替代方案,甚至第三方免费内核模块也可以做到。

答案1

如图所示,命名管道吞吐量不存在问题,因此如果您的编写器比您的读取器更快,并且两者都以恒定速率工作,那么无论缓冲区大小如何,您的整个任务都将与您的读取器一样慢。

但是,如果您的编写器突发地生成输出,并且输出之间有暂停,那么更大的缓冲区是一个优势。

有一个实用程序 ( buffer(1)) 用于写入磁带,它可以缓冲输入并使其以恒定速率(默认情况下尽可能快)传输。

your-producer | buffer > fifo & your-consumer fifo

它位于 Debian 软件包中buffer,或者直接从这里

答案2

您可以使用 unix 域套接字并使用 来配置缓冲区大小setsockopt()

相关内容