Linux内核在压力下具有更好的响应时间。

4
我有一个奇怪的行为无法理解: 出于性能测量目的,我正在使用“旧”的并口接口在debian内核3.2.0-4-amd64上生成IRQ(我正在使用连接到ACK引脚的外部信号发生器)。
我编写了自己的内核模块(仅顶部),以处理中断并将外部信号发送回并口,并在示波器上显示两个信号,以便我可以测量内核响应时间。一切正常,我可以看到平均70微秒的响应时间,有些是20微秒的“突发”情况。我正在运行“Intel(R) Core(TM) i3-3240 CPU @ 3.40GHz”。
现在,“无法解释”的部分。如果我使用“stress”程序加载CPU、内存和I/O,我预计平均时间会更糟,但相反的是:我的平均响应时间降至20微秒。我尝试了3个不同的内核:vanilla、PREEMT-RT和将NO_HZ选项设置为false的vanilla。有人能解释这个魔术吗?
我将'governor'配置更改为'performance',但没有改变任何东西。

查看apm_32.c,可以尝试使用cpuidle.off=1 idle=poll apm=off等参数进行引导。有各种因素,如缓存、SDRAM自动断电等。与作用域相反,您应该使用一些内核分析工具,这些工具可以给出更好的答案。它们将聚焦于额外时间花费的位置。 - artless noise
1个回答

6
你的中断处理程序比stress程序具有更高的优先级。 因此,stress程序唯一的影响是防止CPU进入睡眠状态,这样可以避免CPU在中断到来时从睡眠状态醒来时需要的延迟。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接