Próbuję zmierzyć różnicę liczników zegara między dwoma punktami czasowymi w module jądra. Używam następującą funkcję o nazwie get_ccnt()
aby uzyskać wartość licznika zegara w pewnym momencie:Konsola wielodzielcza z zegarem
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
}
Co ja troską jest, używam HP EliteBook 2530p, w którym Intel Core 2 Duo SL9400 (spec. reference)
Słyszałem, że procesory po Nehalem
mają stały licznik zegara nad wszystkimi rdzeniami. (Jeśli się pomyliłem, proszę to wskazać:) Ale Intel Core 2 Duo SL 9400 ma nazwę kodową Penryn
.
Tak więc myślę, że jeśli moduł jądra przesunie się z jednego rdzenia do drugiego między dwoma punktami czasowymi, wówczas spójność między dwoma rdzeniami jest zagrożona i nie mogę uzyskać prawidłowej różnicy zegara.
Czy to prawda, o czym myślę? Jeśli tak, czy jest jakiś sposób, aby to naprawić (np. Naprawić moduł jądra, aby nie przenosić jądra do rdzenia?)
Dowiedziałem się o [TYM] (https://aufather.wordpress.com/2010/09/08/high-performance-time-measuremen-in-linux/) artykule. – LPs
Wielkie dzięki. Wygląda na to, że próbuje rozwiązać problem, wiążąc procesor z pewnym powinowactwem procesora. Spróbuję to sprawdzić później. – Jeon
Twoja aplikacja nie powinna "przełączać między rdzeniami", nawet jeśli jest wielowątkowa. (Każdy wątek działa niezależnie.) Jeśli próbujesz profilować dwa wątki na różnych rdzeniach, możesz niezależnie od czasu użycia każdego rdzenia i dodać oba wyniki łącznie przez cały czas. (Zakładając, że chcesz trzymać się RDTSC.) Lub zmuś wszystkie gwinty do tego samego rdzenia. W przeciwnym razie wykonanie RDTSC na głównym wątku powinno zwrócić prawidłowy czas, jaki upłynął, aby powrócić do tego wątku, niezależnie od innych wątków. Daje jitter prawie w każdym przypadku jednak, ponieważ jądro/OS przydziela i uruchamia je według własnego uznania. – rdtsc