Proces pobierania CPU TSC, szczególnie w środowisku wielordzeniowym i wieloprocesorowym

W świecie Linuksa, aby uzyskać precyzyjny zegar / zegary z nano sekundami, można użyć:

#include <sys/time.h>

int foo()
{
   timespec ts;

   clock_gettime(CLOCK_REALTIME, &ts); 
   //--snip--      
}

Ta odpowiedź sugerujeasm podejście do bezpośredniego zapytania o zegar procesora za pomocąRDTSC instrukcja.

W wielordzeniowej, wieloprocesorowej architekturze, jak synchronizuje się zegar / wartość zegara w wielu rdzeniach / procesorach? Moje rozumienie polega na tym, że odbywa się tam nieodłączne szermierka. Czy to zrozumienie jest prawidłowe?

Czy możesz zasugerować jakąś dokumentację, która wyjaśniłaby to szczegółowo? Jestem zainteresowany mikroarchitekturą Intel Nehalem i Sandy Bridge.

EDYTOWAĆ

Ograniczenie procesu do pojedynczego rdzenia lub procesora nie jest opcją, ponieważ proces jest naprawdę ogromny (pod względem zużycia zasobów) i chciałby optymalnie wykorzystać wszystkie zasoby w maszynie, które obejmują wszystkie rdzenie i procesory.

Edytować

Dziękujemy za potwierdzenie, że TSC jest zsynchronizowany między rdzeniami i procesorami. Ale moje pierwotne pytanie brzmi: w jaki sposób ta synchronizacja została wykonana? czy to jakiś rodzaj szermierki? czy znasz jakąkolwiek publiczną dokumentację?

Wniosek

Dziękujemy za wszystkie dane wejściowe: Oto wniosek na tę dyskusję: TSC są zsynchronizowane przy inicjalizacji przy użyciu RESETU, który odbywa się na rdzeniach i procesorach w systemie wieloprocesorowym / wielordzeniowym. A potem każdy rdzeń jest sam. TSC są utrzymywane niezmiennie za pomocą pętli fazowej, która normalizowałaby zmiany częstotliwości, a tym samym zmiany zegaraw danym rdzeniu i tak TSC pozostaje zsynchronizowany między rdzeniami i procesorami.

questionAnswers(4)

yourAnswerToTheQuestion