是否使用TSC作为时钟源提高计时器和调度粒度?(Does using TSC as clock so

2019-08-04 07:47发布

在支持时间戳计数器处理器(TSC)Linux提供使用TSC高分辨率定时器选项。 据我了解TSC是可以读,但不提供中断CPU在配置的速率选择寄存器。 因此,对于定时器中断产生在Linux中依然有依靠I / O APIC(在x86上)与通常设置为1000或250 HZ值。

即使在TSC微第二粒度给出时间戳定时器/调度粒度仍然将在取决于HZ值的4ms或1毫秒。 这是理解是否正确? 还是有提高使用TSC计时器粒度的选择吗?

Answer 1:

在默认的Linux 2.6内核中,可编程中断控制器(PIT)(在所有PC上可用的)被用作一个系统定时器[1]。 PIT,顾名思义,可以被编程(通常,当内核启动时),以在预先确定的速率中断CPU。 这种预确定的速率是您参考,这是一个静态编译值等于内核编译参数CONFIG_HZ的HZ值[2]。 所以,你可以在编译的时候修改CONFIG_HZ和PIT将开始在上述频率中断CPU。 但是,请记住,PIT内部一些1.193 MHz的时钟驱动,所以设置CONFIG_HZ大于这个值将不会是一个好主意。 并且如指出的[3]

在多处理器系统上的本地APIC(Advanded可编程中断控制器)的定时器用于处理器间同步

而在去解释[1],我认为其PIT(而不是本地APIC)是联系在一起的HZ值(至少到2.6内核)。

现在,来到你的问题,在理论上你的想法看起来是正确的。 像本地APIC和PIT时间戳计数器,是另一时间源[1]。 [4],你会发现这样的确认。

Linux可能利用这个寄存器的优势得到更准确的时间测量比由可编程定时发送。 要做到这一点,Linux的必须确定时钟信号频率,同时对系统进行初始化。 事实上,由于在编译内核时,这个频率不宣,同样的内核映像可以在CPU上,其时钟可以在任何频率打勾运行。

但是,请记住,时间戳计数器在每个CPU时钟周期递增。 这给我们带来了与CPU时钟周期[5]相关的计数器相关的棘手陷阱。 一个例子是,现代的CPU可以改变他们的CPU时钟频率,以节省电力,这将影响存储在时间戳计数器的值。 如果出现这种情况,你可以估算它可以对你的时间测量的影响。 而且,绝对空闲内核可以调用,直到接收到外部中断其完全停止处理器HALT指令。 在这段时间中,TSC将永远不会增加,你会失去一些珍贵的“增量”,否则将做您的测量更加精确。 总之,处理TSC是一个困难的问题,而不是特别适合为可编程中断使用。

  1. 罗伯特·爱,LKD --3rd版。 (第11章)
  2. http://lxr.linux.no/linux+v2.6.31/arch/x86/include/asm/param.h#L5
  3. http://www.6test.edu.cn/~lujx/linux_networking/0131777203_ch02lev1sec7.html
  4. http://www.makelinux.net/books/ulk3/understandlk-CHP-6-SECT-1
  5. http://lwn.net/Articles/209101/


文章来源: Does using TSC as clock source improve timer and scheduling granularity?