在我开始之前:是的,我知道答案是architecture dependent - 我只是对数量级的球场数据感兴趣。
linux内核对中断频率有上限吗?
背景:我想在Linux中与相机模块连接。该模块具有时钟并行数据输出(8位,约650kHz),我想从缓冲区读取数据并存储在缓冲区中,以便通过例如/ dev / camera进行访问。
我写了一个基本驱动程序,它正在监视相应的中断线。如果我将电线悬挂在中断引脚上,我会受到白噪声的干扰。但是,如果我连接一个更高频率的信号(555定时器的atm~250kHz),则不会触发中断。 (我用/ proc / interrupts确认了这个)
我的想法是,这可能来自处理器上的GPIO模块无法处理如此高的频率(这可能是愚蠢的 - 这不是特别高),或者它可能是内核问题。人们的想法是什么?
答案 0 :(得分:3)
以这种方式看待它。现代CPU每秒执行大约10次 9 指令。
为了处理中断,您需要执行大约100-1000条指令(保存上下文,执行I / O,中断处理的信号结束,恢复上下文)。这样每秒最多可以产生10个 6 - 10 7 中断。
如果你把所有时间都花在处理中断上,那么系统和程序的其余部分都不会留下任何东西。
所以,想一下10个 5 中断/秒(100 KHz)是最大实际中断率。
电路可能存在其他限制,我对这方面不太熟悉。但内核不太可能以某种方式明确限制中断率。我认为没有充分的理由,我认为这也不容易做到。
现在,像DMA这样的东西让你不会在输入/输出数据的每个字节上有中断,而是在几千字节甚至兆字节的缓冲区上。例如。您准备数据以便在内存缓冲区中输出,并告诉DMA控制器它现在可以从缓冲区发送出去。完成后,它将触发一个中断,表示传输完成,您将能够启动另一个。它在转移的另一个方向上的工作方式相同。当整个缓冲区充满输入数据时,你会得到一个中断。
如果您只能以较低的费率接收中断,我认为您可能面临硬件限制。