内核模块处理中断的速度有多快?

How fast can kernel module handle interrupts?

我正在嵌入式 Linux(Yocto 发行版)上编写内核模块,我想处理来自其中一个硬件定时器的一些高频中断。但是,我发现 1us 分辨率对于 Linux(?) 来说太高了——我认为是因为值不正确。 代码很简单:

static irqreturn_t pmodule_ref2_irq(int irq, void *lp)
{
        unsigned long int temp;
        ns++;
        temp = ioread32(temp_base_addr + TTC1_INTERRUPT_REGISTER);
        return IRQ_HANDLED;
}

将间隔值更改为高 100 倍可以解决问题,但我的解决方案并不令人满意。

我的问题是:谁能告诉我内核模块中断的处理速度有多快,或者我该如何检查?

延迟取决于您的最终硬件。您可以在此处了解预期结果(使用 preempt-rt 时): https://www.osadl.org/Combined-latency-plot-of-all-systems-und.qa-latencyplot-all.0.html?latencies=&showno=&slider=159

基本上,您应该预计最大延迟在 30 到 200 微秒之间。该值包括内核空间到用户空间的切换,但这可以给你一个想法。