我正在尝试在内核模块中测量两个时间点之间的时钟计数器差异。 我使用名为get_ccnt()
的以下函数,在特定时间获取时钟计数器值:
static __inline__ long long int get_ccnt(void)
{
#if defined(__i386__)
long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
#elif defined(__x86_64__)
unsigned int hi, lo;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (long long int)lo)|( ((long long int)hi)<<32 );
#endif
}
我关注的是,我正在使用HP EliteBook 2530p,其中搭载了Intel Core 2 Duo SL9400 (规格参考)。
据我听说,在Nehalem之后的CPU上,所有核心具有一致的时钟计数器(如果我错了,请指出)。但是,Intel Core 2 Duo SL 9400的代号是Penryn。
因此,我认为如果一个内核模块在两个时间点之间从一个核心移动到另一个核心,则两个核心之间的一致性会受到影响,并且无法获得正确的时钟差异。
我的想法正确吗?如果是这样,是否有解决方法(例如,修复一个内核模块,不将其移动到另一个核心?)