如何将周期转换为纳秒

时间:2015-10-15 14:40:12

标签: linux-kernel linux-device-driver

我想在Linux中将基于CPU计数器寄存器值的Cycles转换为纳秒。

我可以看到Linux提供了相同的cyc_to_ns()/ clocksource_cyc2ns api。

api都要求传递三个参数。

例如:

cyc_to_ns(u64 cyc,u32 mult,u32 shift);

现在我有了cyc(CPU计数器寄存器)值,但是没有mult和shift的值。

任何人都可以指出我,我该如何计算这两个值(mult和shift)?

1 个答案:

答案 0 :(得分:0)

clocksource提供帮助来计算multshift值:

clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 maxsec)
  

@to和@from是HZ中的频率值。对于时钟源@to是   NSEC_PER_SEC == 1GHz,@ from是计数器频率。对于时钟   event @to是计数器频率,@ from是NSEC_PER_SEC。

     

@maxsec转换范围参数控制时间范围   运行时转换必须覆盖的秒数   计算多个和移位因子。这保证没有64位   当转换的输入值为时,会发生溢出   乘以计算的多因子。更大的范围可能   通过选择较小的mult和shift来降低转换精度   因素。