Man*_*har 12 linux operating-system timer linux-kernel
在支持时间戳计数器(TSC)的处理器中,Linux使用TSC提供高分辨率计时器选项.根据我的理解,TSC是一个可以读取的寄存器,但不提供以配置的速率中断CPU的选项.因此,对于Linux中的定时器中断生成仍然必须依赖I/O APIC(在x86上),HZ值通常设置为1000或250.
即使TSC以微秒粒度给出时间戳,定时器/调度粒度仍将是4ms或1ms,具体取决于HZ值.这种理解是否正确?或者是否可以使用TSC改进计时器粒度?
在默认的Linux 2.6内核中,可编程中断控制器(PIT)(在所有PC上都可用)用作系统定时器[1].PIT,顾名思义,可以编程(通常,当内核启动时)以预定的速率中断CPU.这个预定的速率是你引用的HZ值,它是一个静态编译的值,等于内核编译参数CONFIG_HZ.[2] 因此,您可以在编译时修改CONFIG_HZ,并且PIT将开始以所述频率中断CPU.但是,请记住,PIT内部由大约1.193 MHZ的时钟驱动,因此将CONFIG_HZ设置为大于此值将不是一个好主意.正如[3]中所指出的那样
多处理器系统中的本地APIC(Advanded Programmable Interrupt Controller)的定时器用于处理器间同步
并且通过[1]中的解释,我相信它的PIT(而不是本地APIC)与HZ值相关联(至少直到2.6内核).
现在,提出你的问题,理论上你的想法看起来是正确的.时间戳计数器,如本地APIC和PIT,是另一个时间源[1].在[4]中,您可以找到对此的确认.
Linux可以利用该寄存器来获得比可编程间隔定时器提供的更精确的时间测量.为此,Linux必须在初始化系统时确定时钟信号频率.实际上,因为在编译内核时没有声明该频率,所以相同的内核映像可以在CPU上运行,其时钟可以以任何频率滴答.
但是,请记住,时间戳计数器在每个CPU时钟周期递增.这带来了与CPU时钟周期相关的计数器相关的棘手陷阱[5].一个例子是现代CPU可以改变它们的CPU时钟速率以节省功率,这将影响存储在时间戳计数器中的值.如果发生这种情况,您可以估计它对时间测量的影响.此外,绝对空闲的内核可以调用HALT指令来完全停止处理器,直到收到外部中断.所有这些时间,TSC永远不会增加,你会失去一些宝贵的"增量",否则会使你的测量更精确.简而言之,处理TSC是一个难题,不是特别适合用作可编程中断.
归档时间: |
|
查看次数: |
5917 次 |
最近记录: |