О точном времени

imageК сервису синхронизации времени по протоколу NTP все уже привыкли — оно включено по умолчанию или легко включается для большинства популярных операционных систем. Однако какая точность при этом достигается? Какие бывают сервера точного времени, и с какими можно работать простым смертным? Какие есть подводные камни, и как выбрать «правильные» сервера времени?



Типы серверов


Сервера бывают Stratum 1 и 2, 3(выше редко).

Stratum 1 — получают точное время непосредственно от источника точного времени: атомных часов (например time-a.nist.gov, точность — трилионные доли секунды) или GPS приемника (ntpx.imvp.ru точность — миллиардные доли секунды). Есть сервера получающие точное время через сотовую сеть CDMA (миллионные доли секунды). При работе с ntpd узнать тип сервера можно командой ntpq -np: «PPS» значит GPS, «ACTS» значит прямое соединение с атомными часами (там же и другая ценная статистика — пинг, «дрожжание» пинга(jitter), ранг сервера(1,2...) ).

«Простым» смертным обращаться к Stratum-1 серверам строго запрещено, т.к. нагрузка на них и так очень большая (а на многие Stratum-1 сервера вообще нет публичного доступа). Считается что вы можете подключаться к Stratum-1 серверам или просить доступ к ним, если вы держите NTP сервер, обслуживающий не менее 100 клиентов. Полный список серверов можно увидеть тут: support.ntp.org/bin/view/Servers/StratumOneTimeServers. Естественно, желательно подключатся к серверам в своей стране.

Stratum 2 — получают точное время от Stratum-1 серверов. При правильной настройке и выборе серверов-источников точного времени имеют погрешность менее 1мс. Подключатся обычно можно всем, но многие сервера регулярно умирают от нагрузки (например time.windows.com). www.pool.ntp.org/ поддерживает round-robin списки публичных Stratum-2 NTP серверов. Таким образом обеспечивается балансировка нагрузки, и они практически всегда доступны. Подключиться к этим серверам можно по адресам 0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org и 3.ru.pool.ntp.org (это для России, выбираются случайно из списка ~50 серверов).

Stratum 3 — получают время от Stratum-2 серверов, и т.д.

Практическая точность


Stratum-1
Это график разницы системного времени с временем полученным со Stratum-1 серверов (canonical.com — Stratum-2 сервер, для сравнения).
*.nist.gov — расположены в США, из-за «большого» пинга иногда случаются жуткие «выбросы». Ошибка с Российских Stratum-1 серверов обычно укладыватся в +- 1 мс.
image

Stratum-2
Это — разница с Stratum-2 серверами: 4 из Российского пулла, 1 из европейского, дефолтный сервер времени убунты (europium.canonical.com), и те же *.nist.gov:
image
Сразу бросаются в глаза сервера, имеющие постоянную ошибку до 20 мс.

Резюме


  • Время на серверах и рабочих станциях нельзя пускать на «самотёк», иначе отклонение времени может достичь минут.
  • Если точность +-0.05 секунды вас устраивает, можно не заморачиваться с выбором серверов, и синхронизироваться с сервером по умолчанию
  • Если необходима точность до +-0.01 секунды, нужно найти Stratum-2 NTP в вашей стране, построить с них графики отклонения (Munin+плагин ntp_peers), и отбросить «кривые». Под windows это конечно будет затруднительно сделать. Затем в linux установить демон ntpd, и дать ему 3-6 серверов для синхронизации (он сам будет выбирать наиболее «качественные»).
  • Если нужна точность до +-0.001 секунды И вы будете предоставлять сервис точного времени в вашей организации — подключайтесь к Stratum-1 серверам в вашей стране. Ваш сервис крайне желательно делать публичным.
  • Если нужно точнее 0.001 секунды — остается только настраивать свой Stratum-1 сервер от GPS или CDMA. В обоих случаях нужно либо антенну с улицы вести, или чтобы сигнал «добивал» (в случае с GPS — малореально). Атомные часы объемом менее кубометра пока не делают, так что этот вариант отпадает


PS. Кстати, по умолчанию в Ubuntu синхронизация времени происходит один раз при загрузке системы. Если аптайм под полгода — время может сильно уехать. Устанавливаете ntpd — он корректирует время постоянно и «плавно» (без резких рывков, «размазывая» замедление/ускорение времени). В Windows синхронизация происходит раз в сутки неделю одним «скачком», что может вызвать сложности при обработке логов, если набежала большая разница.

Товарищи!


Даешь большое публичных NTP серверов в России! Особенно Stratum-1 (с ними вообще у нас напряженка, 2-3 штуки на весь exUSSR). Кстати, точное время можно брать и с Глонасс, кто возьмётся запустить первый Глонасс-powered сервер?

PPS. Не могу понять, в какой блог перенести, подскажите :-)
+117
27 декабря 2009, 17:28
64
BarsMonster 429,5 G+

комментарии (95)

0
jeje #
Просвятите в каких сервисах важны десятые и сотые секунды?
+7
BarsMonster #
Везде, где на многих серверах в разных частях мира обрабатываются данные, сильно зависящие от времени.

Я темой заинтересовался, когда из-за упомянутой особенности Убунты набежало 2 минуты разницы во времени и собираемые данные стыли вконец «разъезжаться» :-)
+13
BarsMonster #
Просто если пустить на самотек — десятыми долями секунды дело не ограничится :-)
+3
shadowspok #
когда сдаешь манор в lineage, то не дай бог рука на сотую долю секунды дрогнет :))
0
BarsMonster #
На это дело нужен бот ;-)
+31
trak #
На это дело нужно забить, и вернутся в реальную жизнь.
+4
BarsMonster #
Это неплохая площадка для программирования :-)
Самому играть вовсе не обязательно :-)

Впрочем, это уже тема для отдельной статьи :-)
0
Lux_In_Tenebris #
не лучше ли тогда Second Life в этом отношении осваивать?
–6
naryl #
Вам похоже возвращение в реальную жизнь не помогло научиться правильно писать на родном языке.

Но правописание тся/ться — это тоже тема для отдельной статьи :-)
–12
trak #
В данном случае меня мои девчёнки (жена, дочка и крестная дочка) потащили на кухню кушать пельмени и мне не когда было проверить, что я там написал. А граммарнаци пусть слюни пускают на мои мягкие знаки. ололололо :)
–1
NickyX3 #
некоторым классам на 76+ быстрее нафармить просто дропом, чем заморачиваться манором и его сдачей
0
SmartBye #
Полагаю что там нужно не точное мировое время, а время максимально приближенное к серверному. Кто знает, когда, как и откуда он обновлялся?
+4
superhabra #
Ну очевидно же — для тарификации сотовых операторов!
0
AddRemover #
им хвататает 0.1 сек
+1
superhabra #
Не-нет-нет, чем точнее они обсчитают абонента — тем им лучше.
+1
AddRemover #
Это точно, округлять в плюс это они умеют. Что секунды, что килобайты (причем с точностью не 1 кбайт, а 300Кбайт. Да-да, пинганули 8.8.8.8, а заплатили за 300кбайт трафика)
0
superhabra #
— Никакой ошибки быть не может — у нас точность до тысячной доли секунды!
Вот такой вот у них может быть ответ :)
+1
ufik #
Если у вас вебсервер на одной машине а база на другой, то синхронизация очень важна, особенно если дело касается работы с деньгами.
+2
Ninib #
позновательно, автору спасибо =)
–3
Levsha100 #
PPS. Не могу понять, в какой блог перенести, подскажите :-)

В «DIY или Сделай Сам» =)
+7
krmolot #
>«Атомные часы объемом менее кубометра пока не делают, так что этот вариант отпадает „
Делают:)
“разработали функционирующие атомные часы объемом 40 кубических сантиметров.»
www.newsru.org/world/08sep2003/clock_.html
www.symmetricom.com/products/frequency-references/rubidium-frequency-standard/SA.31m-SA.33m-SA.35m/
0
locust #
подтверждаю. Такое оборудование выпускают Oscilloquartz и Symmetricom. Я его видел, стоит в обычной 19-дюймовой стойке, максимум 5U
+2
trak #
Денег стоит наверное как серебро один к одному по весу?
0
BarsMonster #
Это было бы очень дешево ) Там коробочка 5 на 5 сантиметров, я лично в шоке :-)
+1
shergin #
А для получения времени с GPS или Глонасс нужно (очень) дорогостоящее оборудование?
+3
k0der #
время с GPS показывает обычный GPS-приемник
0
SmartBye #
А откуда GPS (спутники?) берут точно время?
+7
danilissimus #
на борту каждого спутника стоят атомные часы, время от времени спутники синхронизируются друг с другом и с «землей».
+5
persei #
На каждом спутнике атомные часы установлены + постоянная синхронизация. Это обязательное требование
+4
persei #
опять забыл коменты обновить
0
dobry_kolbasnik #
а на ГЛОНАССе?
+1
BarsMonster #
То же самое, все 3 системы спутниковой навигации чертовски похожи :-)
0
dobry_kolbasnik #
а еще ведь китайская есть…
0
BarsMonster #
Еще нет у них ничего, только планы и экспериментальные запуски…
0
JerryJJ #
Есть европейская Galileo, но она в широкую эксплуатацию так до сих пор и не пошла, хотя предназначалась для коммерческого использования. Их коды взломали еще до запуска продаж и на этом дело притихло, но сколько-то спутников работают.
0
BarsMonster #
Галилео посчитана в этих 3-х :-)
+1
P_r_i_m_a_t #
+2
alekciy #
Чорт! В английской части вики о глонасе написано больше, чем в русской (
+2
trak #
Больше всего меня в этих спутниках поражает тот факт, что часы на них учитывают теорию относительности (прочитал у Хокинга). Это как будто привет из «Star Trek».
0
Daemon_Hell #
Ну скорости там немалые. А точность нужна большая. Вот и приходится :)
0
MaximKat #
не скорость, а высота
+6
Untitled #
Старый анекдот вспомнился.
СССР, 4й год перестройки.
За столом сидит генерал, и с мрачным лицом пьёт водку.
Тут из радиоточки доносится:
Передаём сигналы точного времени:
В Москве – 15 часов, в Куйбышеве – 16, в Свердловске – 17, в Красноярске – 19, в Иркутске 20,
в Петропавловске-Камчатском – полночь.
Генерал бьёт по столу кулаком, восклицая — Ну, бля бардак в стране!

За статью спасибо, интересно.
А как обрабатывается задержка при передаче информации, между сервером и компьютером пользователя?
+3
XolodIT #
Wiki:
NTP использует алгоритм Марзулло (предложен Кейтом Марзулло (Keith Marzullo) из Университета Калифорнии, Сан-Диего), включая такую особенность, как учёт времени передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0.2 мс (1/5000 с) и лучше внутри локальных сетей.
+6
zencd #
Интересная штука… Если кто по-русски объяснит как оно работает, был бы благодарен.
+1
unicast #
Хорошей иллюстрацией будет задачка Рэймонда М. Смаллиана (1978)
Вопрос:
У одного человека не было наручных часов, но зато дома висели точные настенные часы, которые он иногда забывал заводить.
Однажды, забыв в очередной раз завести часы, он отправился в гости к своему другу, провел у того вечер, а вернувшись домой, сумел правильно поставить часы.
Каким образом ему удалось это сделать, если время в пути заранее известно не было?
Ответ:
Выходя из дома, человек заводит часы и запоминает, в каком положении находятся стрелки. Придя к другу и уходя из гостей, он отмечает время своего прихода и ухода. Это позволяет ему узнать, сколько он находился в гостях. Вернувшись домой и взглянув на часы, человек определяет продолжительность своего отсутствия. Вычитая из этого времени то время, которое он провел в гостях, человек узнает время, затраченное на дорогу туда и обратно. Прибавив ко времени выхода из гостей половину времени, затраченного на дорогу, он получает возможность узнать время прихода домой и перевести соответствующим образом стрелки своих часов.
0
Carry #
а как учитывается асимметрия задержки?
0
alekciy #
Видимо группой запросов и набором статистики по ним.
0
Carry #
По-моему это малореально. Даже не представляю как можно померить задержку в одну сторону.
Кажется отсюда берется «Сразу бросаются в глаза сервера, имеющие постоянную ошибку до 20 мс.»
0
BarsMonster #
Ну, почему малореально: «пинг» несколько раз, считаем среднее, и прибавляем к полученному времени.
Постоянная задержка 20мс — это уже проблема сервера.

До американских серверов пинг 200мс, а отклонение времени обычно не более 10мс.
0
Carry #
ping — это задержка туда + обратно, а сколько туда и сколько обратно — неизвестно.
+2
BarsMonster #
Шлем свой timestamp, сервер с ответом прикрепляет свой, по приёму опять смотрим свой.
Повторяем 10 раз. Bingo :-)
+1
Carry #
Во, вот это уже похоже на правду :)
+1
alekciy #
Вот это и есть имеемая в виду серия запросов. Серия позволяет уменьшит процент ошибки от случайных единовременных факторов.
+7
hellt #
Есть еще такая штука как синхронизация первичных цифровых синхронных сетей (SDH). Устройства таких сетей должны быть синхронизированы, чтобы внутренние тактовые генераторы могли распознавать временные интервалы в цифровых потоках.
На сети РЖД есть своя сеть тактовых сетевых генераторов, которая состоит из Первичных Эталонных Генераторов (ПЭГ, они же Stratum-1), Ведомых/Вторичных Задающих Генераторов (ВЗГ) и сетевых устройств.
Так вот сейчас остро стоит вопрос передачи синхросигнала через сети Ethernet (в связи с распространением последней на транспортных сетях), и NTP протокол отчаянно сосет в этом плане. На смену ему изобретен протокол PTP v2 (IEEE-1588-2008)
–2
hellt #
вводная статья по ptp находится здесь — www.itc.ua/node/22222
0
XolodIT #
даа, подсасывает… здесь еще есть en.wikipedia.org/wiki/Precision_Time_Protocol
+1
trak #
А для простых смертных есть возможность перейти на этот протокол? На линукс-сервере?
+1
locust #
IEEE 1588 aka Precision Time Protocol (аналог NTP, который при поддержке железа умеет синхрить время до порядка наносекунд, без поддержки — до микросекунд, образ линукса для тестирования www.ixxat.com/evaluation-kit-linux-live-cd_en.html)
0
trak #
Большое спасибо!
+1
hellt #
а простым смертным важны микросекунды и маленький джиттер?
+4
trak #
Не знаю, я просто любопытен, как и все гики.
+2
Nebonum #
А может мне кто-нибудь сказать как вынуть из ответа NTP сервера милисекунды?
Вот что отвечает NTP на «волшебный пакет»: 0x1C0301FA0000024F000000005F8C5E02CEE1FDE8A2191FFF0000000000000000CEE214E934B547FFCEE214E934B587FF
0
XolodIT #
а что за волшебный пакет? ntp сервер отвечает вроде вполне вменяемые вещи на
ntpdate -q 0.ru.pool.ntp.org, подробно можно посмотрть tcpdump'ом
0
Nebonum #
ntpdate — это уже готовая программа. Я же пытаюсь встроить синхронизацию времени в свою программу.
Отправляю по UDP пакет, в ответ приходит строка, указанная выше. В ней содержится информация о секундах, прошедших с 1 января 1900-го. Их я могу выделить. Но вот миллисекунды не знаю как…
+2
trak #
Я бы, честно говоря, взял исходник ntpdate и посмотрел там, что да как. По-моему, это самое простое :)
+1
dobry_kolbasnik #
может, все таки с 1 января 1970 ??
0
Nebonum #
Верно, но сути вопроса не меняет.
0
vsviridov #
Неверно.

0
vsviridov #
NTP uses an epoch of January 1, 1900
0
XolodIT #
или ntpdate -d 0.ru.pool.ntp.org
+1
SunCho00 #
rfc спасет отца русской демократии
–2
Puchiko #
педанты, а у нас на некоторых серверах время по GMT, а где то просто — «по Москве» (про миллисекунды никто даже не заикается). Зато разбирать логи очень занимательное занятие)
+1
litos #
> В Windows синхронизация происходит раз в сутки
>

Нет, раз в неделю, чтобы сделать раз в сутки надо подредактировать ключ реестра
+1
ozonar #
точно, раз в неделю
+1
ozonar #
>>«Простым» смертным обращаться к Stratum-1 серверам строго запрещено

А что будет? Забанят? Или это просто на уровне совета?
+1
XolodIT #
это на уровне белого списка серверов, которые в свою очередь могут синхронизироваться с Stratum-1
+1
CBuH #
немного оффтоп: а графики вы с помощью чего делали? Случайно не с помощью rrdtool?
0
zaartix #
жутко похожи на munin, только видимо с плагином каким-то для конкретно этой задачи
0
spiritedflow #
> Случайно не с помощью rrdtool?

Обратите внимание на надпись по правому краю :)
0
BarsMonster #
В статье написано что мунин, и написано какой плагин использовался :-)
0
kagen #
в linux под вмварой которая на linux время может убегать на 6 часов за сутки спокойно… очень долго бился над проблемой в итоге понял, что проще поставить синхронизацию кроном раз в 5 мин… благо точность небольшая нужна)
+1
symbix #
Чтобы не убегало под вмварью, надо ядру указать частоту шедулера поменьше. Скажем, 100.

В FreeBSD это делается изменением параметра HZ в конфиге ядра, в линуксе наверняка есть подобное же.
+2
mvgolubev #
в linux под вмварой которая на linux время может убегать на 6 часов за сутки спокойно
По-моему, после установки VMware Tools можно включить синхронизацию времени гостевой ОС с часами хостовой ОС.
+1
icCE #
Вообще ставить синхронизацию кроном, это глупость и очень большая. Демон сам все умеет делать и делает это когда надо + он учитывает погрешность после определенного периода работы.
На крон ставить надо, если только провайдер блокировал порты.
0
yetanotherman #
6 часов за сутки — это разница периода в 25%, причем, в vmware это получается скачками. ntpd при этом говорит что «вы, товарищи, совсем офигели — микроскопом гвозди забивать» и нервно курит.
0
icCE #
Ну если такая пьянка то да, просто крон в общем то не должна являться панацеей.
–1
me76 #
а я по мере надобности вручную синхронизируюсь с wwp.greenwichmeantime.com/ — как показал опыт, нтп-сервера выставляли неверное время…
0
felvis #
давненько столкнулся с этой проблемой.
машины в онлайне висят по неск месяцев…
с тех пор завел привычку делать ntpdate на месный укр серв ежедневно при бекапе.
–1
Q2W #
Не верю я этим NTP-серверам, по крайней мере time.nist.gov.
У нас на фре один раз время уехало почти на 50 лет вперёд.
0
mvgolubev #
Насколько я знаю, существует технология при которой такие большие ошибки (сбои) корректируются.
Во-первых, скачок времени более какой-то заданной допустимой дельты (например, секунда или минута) при обычной синхронизации может игнорироваться. При желании разницу времени больше этой дельты можно синхронизировать только жёстко принудительно со специальным ключиком вручную.
А во-вторых, есть схемы синхронизации, когда в качестве источника времени используется сразу несколько NTP-серверов. Значения с тех NTP-серверов, чьи показания слишком сильно отличаются от остальных серверов, вообще отбрасываются, а по оставшимся вычисляется средний показатель по которому и синхронизируются системные часы. Это избавляет от ошибки на одном из NTP-серверов.
+5
unicast #
На моей старой работе были сервера, не подключенные к интернету. Я купил GPS-приёмник с интерфейсом RS-232 и поднял NTP. Антенну прилепил на магните на подоконник. Работало идеально.
А т.к. DNS тоже были внутренние, прописал запись time.windows.com с IP своего сервера, в итоге даже машины без домена всегда получали точное время.
+2
BarsMonster #
Вот, про такой способ создания своих Stratum-1 серверов я и писал, написали бы статью о настройке NTP сервера в связке с GPS приемником :-)
+1
unicast #
Ещё кому-нибудь интересно? ^_^
Завтра попробую раздобыть боевой конфиг.
+1
unicast #
0
nakamura #
Даже в нашей солнечной Молдавии есть Stratum-1 сервак, неожидано!
А часы должны показывать точное время, иначе они не часы. Так же и с календарем.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.