ARMv8的精确测量时钟周期
一、TSC (Time Stamp Counter)
TSC是Time Stamp Counter(时间戳计数器)的缩写,它是 Inter X86 架构上的一个计数器,它记录自启动以来处理器消耗的时钟周期数。
在每个时钟到来时,该计数器自动加一。
因为 TSC 随着处理器周期速率的变化而变化,所以它提供了非常高的精确度。它经常被用来分析和检测代码。
TSC 的值可以通过在X86指令rdtsc指令来读取。
在X86上的内联汇编实现如下:
uint64_t Rdtsc(void)
{
uint32_t lo, hi;
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}
二、ARM Generic Timer
通用计时器(ARM Generic Timer)为 ARM 内核提供了一个标准化的计时器框架。通用计时器包括一个系统计数器(a System Counter)和一组单核计时器(a set of per-core timers),如下图所示:

系统计数器是一种常开设备,提供固定频率的递增计数(其计数频率和CPU主频无关)。系统计数器的计数值通过广播到系统中的每一个内核中,从而使内核对时间的流逝有一个共同的看法。其频率通常等于CPU外部时钟频率。
每个核心都有一组计时器(Each core has a set of timers)。这些计时器是作为比较器存在的,用来与系统计数器所广播值进行比较。软件可以配置计时器用来在将来的设定点产生中断或事件。软件还可以使用系统计数器值来添加时间戳,因为系统计数为所有内核提供了一个公共参考点。
注意
通用计时器仅测量时间的流逝。它不报告时间或日期。通常,SoC也会包含一个实时时钟(RTC)来表示时间和日期。
三、精确计时理论公式
设系统计数器的值为 N N N,其固定频率为 f f f,则精确流逝的时间 t t t(单位:秒)是:
t = N f t=\frac{N}{f} t=

本文详细介绍了在ARMv8架构中如何使用时间戳计数器(TSC)和通用计时器来精确测量时钟周期。通过读取系统计数器的固定频率和值,然后结合CPU频率或倍频计算出CPU时钟周期。同时,文中给出了具体的ARM汇编指令用于读取相关计数器,并展示了不同计算方法。
最低0.47元/天 解锁文章
1344

被折叠的 条评论
为什么被折叠?



