Linux驱动程序:延迟流水线

Linux驱动程序:延迟流水线

我想创建一个具有非阻塞读/写的驱动程序。 pipeline0 的输入连接到 pipeline1 的输出。数据write()在延迟后写入管道(使用内核计时器或工作队列)。写入延迟需要通过 进行控制(获取和设置)ioctl()。最后,我想测量读/写缓冲区大小设置为 1 B、1 KB、1 MB 且延迟设置为 0.1 毫秒和 1 秒时驱动程序的吞吐量。

我读过一些关于如何为Linux制作驱动程序的教程。

但是,我面临以下问题:

  1. 如何首先创建一个驱动程序,以便每当任何进程生成输出时,我的驱动程序都应该读入缓冲区。
  2. 如何将此缓冲区的数据作为输入传递给正在运行的另一个程序。

本质上我需要创建一个“带有延迟的管道驱动程序”。

普通管道使用符号“|”。当我想实现我的驱动程序时,如何创建自己的符号,例如“a|b”(“a”是缓冲区大小,“b”是设置的延迟)

就像是 :ls myfile.txt 20|5 wc

在上面的示例中,20 是 20 KB 缓冲区大小,5 是 5 ms 延迟

答案1

首先,系统管理 FIFO 大小,通常默认为 1MB。您可以使用 检查或更改它sysctl fs.pipe-max-size [newsize]。这不需要任何新程序。

您也不需要重新发明轮子、内核或 shell 来应用您想要的程序。如果你决定实现这个想法,你就跑吧command | yourbufferprogram | othercommand

编写该程序只需涉及popen()系统调用和内存控制来缓冲数据并计算吞吐量。尝试一下,如果您遇到困难,请在以下位置发布更具体的问题堆栈溢出

最后,请注意,如果输入数据比预期多,这样的缓冲区可能会很快导致内存使用量激增!

相关内容