Na kilku platformach produkcyjnych zaobserwowaliśmy objawy, które wydają się sugerować, że zegar czasu okresowo przeskakuje do przodu lub do tyłu. Skoki trwają zwykle około 1 sekundy, zazwyczaj anulują (skaczą do przodu, a potem bardzo szybko potem do tyłu) i zdarzają się około 50 razy dziennie. To przesunięcie jest najbardziej zauważalne w okresach szczytowego użycia aplikacji oraz w okresach operacji we / wy na wysokim dysku, takich jak codzienne kopie zapasowe. Te zmiany wpływają na naszą miękką aplikację wrażliwą w czasie rzeczywistym.
Systemami są serwery Oracle Netra X4250 i Netra X4270 z systemem SLES 11SP2 z domyślnym jądrem 3.0.58-0.6.6.
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
Wyłączyliśmy NTP , ale nie miało to żadnego wpływu na dryfy. Czy istnieją narzędzia mierzące przesunięcie zegara w ciągu dnia? Jak możemy tego uniknąć?
Są to platformy produkcyjne i nie możemy odtworzyć problemu w naszych laboratoriach, więc moja zdolność do eksperymentowania jest ograniczona. Jeśli zostawię to własnym urządzeniom, napiszę narzędzie do pomiaru dryfu i być może eksperymentuję ze źródłem zegarowym HPET.
ntpdate(8)
lubntpd(8)
).Odpowiedzi:
Jedyne znane mi narzędzia to narzędzia NTP, które powinny wystarczyć. Nie musisz tak naprawdę konfigurować ntpd do synchronizacji z danym źródłem zegara, możesz po prostu użyć
-d
opcji,ntpdate
aby pobrać obliczone przesunięcie.Przykład:
-d
jest opcją debugowania, która działa NTP bez faktycznego dotykania zegara systemowego.Nie jestem zbyt zaskoczony, że nie jesteś w stanie odtworzyć tego w środowisku programistycznym / testowym, ponieważ prawdopodobnie jest to spowodowane zegarem sprzętowym. Jeśli masz z kimś wsparcie sprzętowe, postaram się oddać twoje maszyny do serwisu. Jedną z możliwości jest zamiana jednej z maszyn deweloperskich dla tej maszyny produkcyjnej, naprawa wcześniejszych systemów PROD i ponowne wprowadzenie jej jako maszyny programistycznej w celu zastąpienia tej, która jest teraz w PROD.
Poza tym zmiana źródła zegara sprzętowego to wszystko, co możesz zrobić. Jeśli nie możesz lub nie możesz zrobić zamiany, sugeruję, abyś wybrał trasę hpet. Możesz sprawdzić, czy zmiana źródła zegara miesza się z usługami systemowymi, a następnie wdrożyć do produkcji jako gradobicia.
źródło
tsc
jest oparty na procesorze, więc ma sens, że wyższa aktywność procesora i tak spowodowałaby problem z zegarem sprzętowym. Jeśli hpet jest dla Ciebie wystarczająco szybki, być może będziesz musiał po prostu spróbować, uzyskać serwis lub zrobić zamianę. To jedyne opcje, które mogę dla ciebie zobaczyć.Jednym z rozwiązań jest użycie
HPET
Zobacz także High Precision Event Timer
Aby ustawić go jako parametr rozruchowy, użyj
Na starszym sprzęcie
TSC
często był niestabilny i był wyłączany przez jądro.źródło
Napisałem bardziej szczegółowe narzędzie do korelowania pomiarów zegara z objawami opóźnień wykazywanymi przez naszą aplikację. To narzędzie wydaje się wykluczać to, co wcześniej podejrzewałem o fluktuację zegara czasu Linuksa.
Tak krótko mówiąc, moja początkowa hipoteza była nieprawidłowa. Ale wiele się nauczyłem o zegarach Linuksa z odpowiedzi i linków, więc dziękuję wszystkim, którzy odpowiedzieli!
źródło
Czy zegar nie powinien być monotonna, chyba że ktoś go zmieni? Skoki do tyłu nie powinny być możliwe. Musi być coś, co ustawia zegar - zadanie crona lub jakiś inny demon (na przykład wezwanie do
hwclock --adjust
). Pamiętam, że sam NTTP aktualizuje statystyki dryftu i rutynowo kompensuje to, a jeśli nie uruchomisz ntp przez długi czas i uzyskasz ogromne przesunięcie, to mierzy czas na kilka dni po nim, jeśli nie zresetujesz/etc/adjtime
. Możesz mieć coś takiego - coś, co okresowo dostosowuje dryf czasu (i powoduje skoki).ntp
ma właściwie przeciwdziałać temu problemowi.źródło