Як можна виміряти та запобігти дрейфу годинника?


15

На декількох виробничих майданчиках ми спостерігали симптоми, які, начебто, свідчать про те, що час годинного годинника періодично стрибає вперед або назад. Стрибки, як правило, близько 1 секунди, зазвичай скасовуються (стрибки вперед, потім дуже скоро після цього) і відбуваються приблизно 50 разів на день. Цей дрейф є найбільш помітним у часи пікового використання додатків та в періоди великих операцій вводу / виводу диска, таких як щоденне резервне копіювання. Ці дрейфи впливають на наше м'яке в реальному часі додаток.

Системи - сервери Oracle Netra X4250 і Netra X4270, на яких працює SLES 11SP2 з ядром 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

Ми відключили NTP , але це не вплинуло на дрейфи. Чи є інструменти, які вимірюють час денного переміщення годин? Як ми можемо цього уникнути?

Це виробничі платформи, і ми не можемо відтворити проблему в наших лабораторіях, тому моя здатність експериментувати обмежена. Якщо залишити власні пристрої, я напишу інструмент для вимірювання дрейфу та, можливо, експериментую з тактовим джерелом HPET .


5
Відключення NTP робить годинник набагато нестабільнішим ... Єдиною причиною, за якою я бачу, як NTP не підтримує годинник у черзі, - це те, що годинник перебуває у нечутному стані, а NTP відмовляється його оновлювати (див. ntpdate(8)Або ntpd(8)).
фонбранд

1
NTPD відстежує і коригує переміщення годин, але те, що у вас є, не дрейфує. Дрейф послідовно знаходиться в одному напрямку приблизно приблизно однаковою кількістю часу. Якщо він випадковим чином стрибає вперед і назад, немає ніякого способу передбачити це і пристосувати його.
Патрік

1
Те, що @Patrick сказав правильно, проблема, яку ви описуєте, - це переривчастий стрибок часу вперед і назад, кілька разів на день. NTP добре працює на дрейфі, але це не допоможе вам у цьому. Щось, можливо, скидає дату вашої системи до якогось зовнішнього джерела часу, яке може мати лише 1 секунду. Якщо ваші сервери x86 *, то джерелом технічного обслуговування може стати джерело, а винуватцем є робота з Cron. Що стосується вимірювання зсуву годинника, відповідь ntpdate Братчлі є розумним підходом, за умови використання хорошої посилання на тактову стрічку 1: запускайте раз на хвилину та гнутло результат для зображення.
дуанев

1
Перебіг цієї оцінки NTP, починаючи на новому сервері ( drdobbs.com/embedded-systems/… ). На вивчення нового кристала потрібні години NTP. Для дійсно поганих кристалів НТП доведеться «ступати» годинник на значні кількості кілька разів під час тренування (див. Рис. 4 і 5 у цій статті). Кінцеве значення в ntp.drift 118ppm становить 10 секунд на день або 208 мс кожні 30 хвилин. Хоча це не те, що бачили ОП, NTP спочатку може спричинити помітні стрибки в часі.
дуанев

Відповіді:


8

Чи є інструменти, які вимірюють час денного переміщення годин?

Єдині інструменти, про які я знаю, - це засоби NTP, яких має бути достатньо. Вам не потрібно насправді налаштовувати ntpd для синхронізації з заданим джерелом тактової частоти, ви можете просто скористатися -dопцією, ntpdateщоб отримати обчислене зміщення.

Приклад:

[davisja5@xxxadmvlm08 ~]$ ntpdate -d clock.redhat.com 2>/dev/null | egrep "^offset"
offset -0.004545
[davisja5@xxxadmvlm08 ~]$

-d - це параметр налагодження, який виконує функцію NTP, фактично не торкаючись системного годинника.

Будь-яка порада, як ми можемо цього уникнути?

Я не надто здивований, що ви не в змозі відтворити це в середовищі розробників / тестів, оскільки це, мабуть, лише завдяки апаратному годиннику. Якщо у вас є підтримка апаратури з кимось, я б спробував забезпечити обслуговування ваших машин. Однією з можливостей є торгування однією з машин для розробників для цієї виробничої машини, виправлення колишніх систем PROD і повторне впровадження її як версію для розробників, щоб замінити ту, яка зараз у PROD.

Не маючи цього, переключення джерела апаратного годинника - це майже все, що ви можете зробити. Якщо ви не зробите або не можете зробити щось заміною, я б запропонував вам пройти маршрут. Ви можете перевірити, чи змінюється джерело тактових повідомлень із системних служб, а потім розгорнути його у виробництво як град.


Під «вимірюванням дрейфу годинника» я не мав на увазі дрейф від опорного джерела часу, такого як NTP дає вам. Я мав на увазі інструмент, який може виявляти "стрибки" в час денного годинника протягом безперервного діапазону часу. Наприклад, беруть відбір проб у день кожні 50 мс і повідомляють, якщо різниця від останнього відбору проб занадто далека від 50 мс. Такий інструмент показав би, якщо час доби з будь-якої причини відходить від базового апаратного годинника.
Бретт

1
Чи не може наявність такого втручання спричинити погіршення продуктивності, ніж ви сподіваєтесь вирішити? Напевно, це апаратні проблеми, тому вам знадобиться обслуговувати обладнання або використовувати джерело годинника без цього питання. tscбазується на процесорі, тому має сенс, що більша активність процесора все одно спричинить проблему з апаратним годинником. Якщо hpet для вас досить швидкий, вам, можливо, доведеться просто спробувати це, отримати сервісне обслуговування або зробити заміну. Це єдині варіанти, які я бачу для вас.
Братчлі

3

Одне рішення - використовувати HPET

Див. Також Таймер подій високої точності

Щоб встановити його як параметр завантаження, використовуйте

clocksource=hpet

На старшому апаратному забезпеченні TSCвін часто був нестабільним і його було відключено ядром.

З появою багатоядерних / гіперпотокових процесорів, систем з декількома процесорами та операційними системами, що перебувають у сплячому режимі, на TSC не можна покластися, щоб забезпечити точні результати ...

Вікіпедія: Лічильник часу


У виробничій системі, що демонструє симптоми тремтіння годинника, я переключив джерело тактового режиму на hpet. Це не впливало на спостережувані симптоми тремтіння годинника.
Бретт

HPET - це зовнішній апаратний таймер і не може тремтіти. Тож це рішення здається неправильним шляхом. Було багато проблем із тимчасовим старінням обладнання, особливо при використанні віртуалізації. Ви перевіряли це також за допомогою іншого програмного забезпечення?

1

Я написав більш детальний інструмент для співвідношення вимірювань годинника із затримкою симптомів, виявлених нашою програмою. Цей інструмент, здається, виключає те, про що я раніше підозрював як тремтіння в годинникові години Linux.

Так коротко розповідь, моя початкова гіпотеза була недійсною. Але я дізнався багато про годинники Linux з відповідей та посилань, тож дякую всім, хто відгукнувся!


3
(...) моя початкова гіпотеза була недійсною. Чи можете ви сказати нам, що було справжньою причиною?
Пьотр Доброгост

0

Чи не повинен годинник бути одноманітним, якщо хтось не змінить його? Стрибки назад не повинні бути можливими. Повинно бути щось, що встановлює годинник - робота з хроном чи якийсь інший демон (наприклад, дзвінок до hwclock --adjust). Я пам’ятаю, що сам ntp оновлює статистику за дрейфом і компенсує її регулярно, і якщо ви не запускаєте ntp протягом тривалого часу і отримуєте величезний зсув, він втрачає час після нього, якщо ви не скинете його /etc/adjtime. У вас може бути налаштовано щось подібне - те, що періодично коригує переміщення часу (і спричиняє стрибки).

ntp насправді призначений для боротьби з цією проблемою.


Це я і думав. Моє читання джерел апаратних годин говорить про те, що лічильник повинен монотонно зростати. Якби це було правдою, в гіршому випадку ми повинні дотримуватися помилкових частот тиків, але ніколи не відскакуємо назад. У багатопроцесорній системі я розумію, що tsc потрібно синхронізувати між процесорами - можливо, саме це спричиняє стрибки назад?
Бретт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.