Jeo*_*eon 6 c x86 assembly cpu-architecture
我试图测量内核模块上两个时间点之间的时钟计数器的差异.我使用以下命名函数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
}
Run Code Online (Sandbox Code Playgroud)
我关注的是,我使用的是HP EliteBook 2530p,其中Intel Core 2 Duo SL9400(规格参考)
我听说CPU之后的Nehalem所有内核都有一致的时钟计数器.(如果我错了,请指出.)但是,英特尔酷睿2双核SL 9400有一个代号Penryn.
因此,我认为如果内核模块在两个时间点之间从一个核心移动到另一个核心,那么两个核心之间的一致性就会受到影响,我无法获得正确的时钟差异.
我在想什么?如果是,有没有办法解决它(例如修复内核模块不将核心移动到核心?)