解释本地定时器中断数量的变化

解释本地定时器中断数量的变化

在不同的 CPU 隔离(IRQ 和进程)配置中运行给定的工作负载,我没有观察到本地定时器中断数量中报告的值(总计)存在显着差异,/proc/interrupts/proc/stats发现本地定时器中断数量的变化约为 20%。

答:据我所知,当 current_clocksource = hpet 时,本地定时器中断由比较器生成,比较器将在 = 比较(而不是 >=)之后触发中断,这会导致在重负载下“忘记”触发中断,因为当前时间已超过目标值。由此,我得出的结论是,对于给定的工作负载,LOC 越多越好。 (减少掉落事件)

B. 据我所知,系统可以“合并”事件,并为在timerslack_ns 时间内发生的多个事件触发一个中断。由此,我得出的结论是,对于给定的工作负载和给定的timerslack_ns,LOC 越少越好。 (为系统提供更多的合并机会)

  1. 我的知识是否已经过时或没有得到适当的运用? (在linux 5.4下运行)

  2. 如何确定“忘记”计时器事件的数量?

  3. 如何确定“合并”计时器事件的数量?

  4. 最后,给定相同的工作负载并忽略功耗考虑因素,仅考虑延迟和吞吐量(是的,我知道这在某种程度上是矛盾的,这就是我进行 CPU 隔离测试的原因)在提供高数字(大)的配置之间我应该更喜欢哪种配置总共)的 LOC 中断,而其中一个提供的中断少得多?

  5. 在相同的情况下,我尝试禁用kernel.timer_migration但未能注意到任何重大变化。我认为这是我的 IRQ 和任务被适当编组的证据(不需要计时器迁移 => 不需要线程迁移),但我很可能是错的,没有读取正确的数据集。

相关内容