我想在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)?
答案 0 :(得分:0)
clocksource提供帮助来计算mult
和shift
值:
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来降低转换精度 因素。