Sto provando a misurare una differenza di contatori di clock tra due punti temporali in un modulo del kernel. Io uso la seguente funzione denominata get_ccnt()
per ottenere un controvalore orologio ad una certa ora:Consistenza contatore orologio multicore
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
}
Quello che preoccupazione è, io sto usando HP EliteBook 2530p in cui Intel Core 2 Duo SL9400 (spec. reference)
Ho sentito che le CPU dopo lo Nehalem
hanno un contatore di clock costante su tutti i core. (Se ho torto, per favore segnalalo.) Ma Intel Core 2 Duo SL 9400 ha un nome in codice Penryn
.
Quindi, penso che se un modulo del kernel si sposta da un core ad un altro tra due punti temporali, allora la coerenza tra due core è compromessa e non riesco a ottenere la giusta differenza di clock.
E 'giusto quello che sto pensando? Se lo è, c'è un modo per risolverlo (ad esempio, correggere un modulo del kernel per non spostare un core in un core?)
Ho scoperto [QUESTO] (https://aufather.wordpress.com/2010/09/08/high-performance-time-measuremen-in-linux/) articolo. – LPs
Grazie mille. Sembra che lui/lei cerchi di risolvere il problema legando un processore ad una certa affinità della CPU. Proverò a controllarlo più tardi. – Jeon
L'app non deve essere "passaggio tra core" anche se multi-thread. (Ogni thread viene eseguito in modo indipendente.) Se si prova a profilare due thread su core diversi, è possibile calcolare l'autonomia di ciascun core in modo indipendente e aggiungere entrambi i risultati insieme per un tempo totale. (Supponendo di voler rimanere con RDTSC.) O forzare tutti i thread sullo stesso core. In caso contrario, facendo RDTSC sul thread principale dovrebbe restituire il tempo trascorso corretto per tornare a quel thread, indipendentemente da altri thread. In ogni caso, tuttavia, darà jitter in quanto il kernel/OS li assegna e li esegue come meglio crede. – rdtsc