Linux实时特性与延迟跟踪器详解
高分辨率定时器与动态节拍
在操作系统中,像HZ这样的软件变量起着关键作用。当定时器到期,时钟源向CPU发送中断时,高精度定时器(hrtimer)会处理该事件。随后,系统会在红黑树中查询下一个事件,并将时钟源设置为在下一个所需事件发生时触发。
这种机制带来的一个重要变化是,不再需要对节拍数(jiffies)进行计数,为后续的改进做好了准备。一旦高精度定时器消除了仅仅为了更新jiffies变量而触发定时器中断的需求,内核开发者就可以消除系统空闲时不必要中断带来的开销。这在嵌入式领域尤为重要,因为在空闲系统中消除中断可以让CPU进入更好的节能状态,从而延长加载操作系统的设备的电池续航时间。
动态节拍功能启用后,定时器中断仅在有请求时触发。不过,需要注意的是,底层时钟源计数器不能在两次中断之间发生溢出。为解决这个问题,定时器中断的触发频率至少要达到底层计数器溢出时间的一半。同时,定时器会更新一个单独的单调变量,以跟踪系统时间。
当系统空闲时,即使经过多个jiffies,也不会有任何影响,因为空闲系统本身不进行任何操作。动态节拍代码会记录这段时间,并相应地更新jiffies,使其恢复到如果每个jiffy都触发中断时的应有值。而当系统不空闲时,定时器中断会设置为每一个jiffy触发一次,因为jiffies变量用于非实时任务的调度统计。
目前,并非所有的高分辨率定时器和动态节拍功能都已集成到主线内核中,部分架构尚未采用这些特性。不过,RT补丁仍然是这些新特性的开发试验场,预计不久后将被整合到主线Linux中。
延迟跟踪器概述
RT补丁包含一个名为延迟跟踪器(Latency T