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

    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. Не могу понять, в какой блог перенести, подскажите :-)
    Поделиться публикацией

    Похожие публикации

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

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

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

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

                      В «DIY или Сделай Сам» =)
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          подтверждаю. Такое оборудование выпускают Oscilloquartz и Symmetricom. Я его видел, стоит в обычной 19-дюймовой стойке, максимум 5U
                            +2
                            Денег стоит наверное как серебро один к одному по весу?
                              0
                              Это было бы очень дешево ) Там коробочка 5 на 5 сантиметров, я лично в шоке :-)
                          +1
                          А для получения времени с GPS или Глонасс нужно (очень) дорогостоящее оборудование?
                          • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            А откуда GPS (спутники?) берут точно время?
                              +7
                              на борту каждого спутника стоят атомные часы, время от времени спутники синхронизируются друг с другом и с «землей».
                                +5
                                На каждом спутнике атомные часы установлены + постоянная синхронизация. Это обязательное требование
                                  +4
                                  опять забыл коменты обновить
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      +1
                                      То же самое, все 3 системы спутниковой навигации чертовски похожи :-)
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          Еще нет у них ничего, только планы и экспериментальные запуски…
                                            0
                                            Есть европейская Galileo, но она в широкую эксплуатацию так до сих пор и не пошла, хотя предназначалась для коммерческого использования. Их коды взломали еще до запуска продаж и на этом дело притихло, но сколько-то спутников работают.
                                              0
                                              Галилео посчитана в этих 3-х :-)
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        +2
                                        Чорт! В английской части вики о глонасе написано больше, чем в русской (
                                        +2
                                        Больше всего меня в этих спутниках поражает тот факт, что часы на них учитывают теорию относительности (прочитал у Хокинга). Это как будто привет из «Star Trek».
                                          0
                                          Ну скорости там немалые. А точность нужна большая. Вот и приходится :)
                                            0
                                            не скорость, а высота
                                        +6
                                        Старый анекдот вспомнился.
                                        СССР, 4й год перестройки.
                                        За столом сидит генерал, и с мрачным лицом пьёт водку.
                                        Тут из радиоточки доносится:
                                        Передаём сигналы точного времени:
                                        В Москве – 15 часов, в Куйбышеве – 16, в Свердловске – 17, в Красноярске – 19, в Иркутске 20,
                                        в Петропавловске-Камчатском – полночь.
                                        Генерал бьёт по столу кулаком, восклицая — Ну, бля бардак в стране!

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

                                                    До американских серверов пинг 200мс, а отклонение времени обычно не более 10мс.
                                                      0
                                                      ping — это задержка туда + обратно, а сколько туда и сколько обратно — неизвестно.
                                                        +2
                                                        Шлем свой timestamp, сервер с ответом прикрепляет свой, по приёму опять смотрим свой.
                                                        Повторяем 10 раз. Bingo :-)
                                                          +1
                                                          Во, вот это уже похоже на правду :)
                                                            +1
                                                            Вот это и есть имеемая в виду серия запросов. Серия позволяет уменьшит процент ошибки от случайных единовременных факторов.
                                                      0
                                                      Вы правы. В протоколе нет такой возможности. Из наблюдений, ~20 мс наблюдается между ростелекомом и остальным рунетом. Это стало одной из причин, по которой доступ к моему Stratum 1 серверу предоставляется только после предварительной договоренности.
                                                      P.S. официальные российские ntp-сервера работают через Ростелеком.
                                                        0
                                                        Не до конца понял вашу мысль.
                                                        Carry ошибался инфа 100%, компенсация пинга — основная фича NTP.

                                                        Доступ к Stratum1 закрывают обычно чтобы посторонние люди запросами не флудили и все.
                                                          +1
                                                          Вот эта компенсация пинга и дает ошибку при постоянной асимметрии роутинга. Для простоты арифметики представим, что у нас есть две машины с идеальными часами. В момент t одна машина шлет другой пакет. Допустим, он идет 30 мс. В момент t+30 мс вторая машина получает этот пакет, помещает в него свой таймштамп (t+30) и отсылает обратно. И тут вдруг пакет идет по более длинному маршруту уже за 70 мс. Таким образом первая машина получает ответ на свой запрос в t+100. Так как никаких данных как и с какой скоростью шел пакет, машина предполагает, что путь туда и обратно занимал одинаковое время, следовательно, вторая машина поместила свой таймштамп в t+50. В таймстампе при этом t+30 и первая машина считает, что ее часы бегут на 20 мс. А так как такое происходит всегда, эту ошибку нельзя выявить какими-либо статистическими методами.
                                                            0
                                                            Спасибо, теперь понятно…
                                                            –1
                                                            Думаю, что в данном случае мне несколько виднее, почему я ограничил доступ к своему серверу.
                                                +7
                                                Есть еще такая штука как синхронизация первичных цифровых синхронных сетей (SDH). Устройства таких сетей должны быть синхронизированы, чтобы внутренние тактовые генераторы могли распознавать временные интервалы в цифровых потоках.
                                                На сети РЖД есть своя сеть тактовых сетевых генераторов, которая состоит из Первичных Эталонных Генераторов (ПЭГ, они же Stratum-1), Ведомых/Вторичных Задающих Генераторов (ВЗГ) и сетевых устройств.
                                                Так вот сейчас остро стоит вопрос передачи синхросигнала через сети Ethernet (в связи с распространением последней на транспортных сетях), и NTP протокол отчаянно сосет в этом плане. На смену ему изобретен протокол PTP v2 (IEEE-1588-2008)
                                                  –2
                                                  вводная статья по ptp находится здесь — www.itc.ua/node/22222
                                                  +1
                                                  А для простых смертных есть возможность перейти на этот протокол? На линукс-сервере?
                                                    +1
                                                    IEEE 1588 aka Precision Time Protocol (аналог NTP, который при поддержке железа умеет синхрить время до порядка наносекунд, без поддержки — до микросекунд, образ линукса для тестирования www.ixxat.com/evaluation-kit-linux-live-cd_en.html)
                                                      0
                                                      Большое спасибо!
                                                      +1
                                                      а простым смертным важны микросекунды и маленький джиттер?
                                                        +4
                                                        Не знаю, я просто любопытен, как и все гики.
                                                    +2
                                                    А может мне кто-нибудь сказать как вынуть из ответа NTP сервера милисекунды?
                                                    Вот что отвечает NTP на «волшебный пакет»: 0x1C0301FA0000024F000000005F8C5E02CEE1FDE8A2191FFF0000000000000000CEE214E934B547FFCEE214E934B587FF
                                                      0
                                                      а что за волшебный пакет? ntp сервер отвечает вроде вполне вменяемые вещи на
                                                      ntpdate -q 0.ru.pool.ntp.org, подробно можно посмотрть tcpdump'ом
                                                        0
                                                        ntpdate — это уже готовая программа. Я же пытаюсь встроить синхронизацию времени в свою программу.
                                                        Отправляю по UDP пакет, в ответ приходит строка, указанная выше. В ней содержится информация о секундах, прошедших с 1 января 1900-го. Их я могу выделить. Но вот миллисекунды не знаю как…
                                                          +2
                                                          Я бы, честно говоря, взял исходник ntpdate и посмотрел там, что да как. По-моему, это самое простое :)
                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                              0
                                                              Верно, но сути вопроса не меняет.
                                                                0
                                                                Неверно.

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

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

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

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

                                                                            В FreeBSD это делается изменением параметра HZ в конфиге ядра, в линуксе наверняка есть подобное же.
                                                                              +2
                                                                              в linux под вмварой которая на linux время может убегать на 6 часов за сутки спокойно
                                                                              По-моему, после установки VMware Tools можно включить синхронизацию времени гостевой ОС с часами хостовой ОС.
                                                                                +1
                                                                                Вообще ставить синхронизацию кроном, это глупость и очень большая. Демон сам все умеет делать и делает это когда надо + он учитывает погрешность после определенного периода работы.
                                                                                На крон ставить надо, если только провайдер блокировал порты.
                                                                                  0
                                                                                  6 часов за сутки — это разница периода в 25%, причем, в vmware это получается скачками. ntpd при этом говорит что «вы, товарищи, совсем офигели — микроскопом гвозди забивать» и нервно курит.
                                                                                    0
                                                                                    Ну если такая пьянка то да, просто крон в общем то не должна являться панацеей.
                                                                                –1
                                                                                а я по мере надобности вручную синхронизируюсь с wwp.greenwichmeantime.com/ — как показал опыт, нтп-сервера выставляли неверное время…
                                                                                  0
                                                                                  давненько столкнулся с этой проблемой.
                                                                                  машины в онлайне висят по неск месяцев…
                                                                                  с тех пор завел привычку делать ntpdate на месный укр серв ежедневно при бекапе.
                                                                                    –1
                                                                                    Не верю я этим NTP-серверам, по крайней мере time.nist.gov.
                                                                                    У нас на фре один раз время уехало почти на 50 лет вперёд.
                                                                                      0
                                                                                      Насколько я знаю, существует технология при которой такие большие ошибки (сбои) корректируются.
                                                                                      Во-первых, скачок времени более какой-то заданной допустимой дельты (например, секунда или минута) при обычной синхронизации может игнорироваться. При желании разницу времени больше этой дельты можно синхронизировать только жёстко принудительно со специальным ключиком вручную.
                                                                                      А во-вторых, есть схемы синхронизации, когда в качестве источника времени используется сразу несколько NTP-серверов. Значения с тех NTP-серверов, чьи показания слишком сильно отличаются от остальных серверов, вообще отбрасываются, а по оставшимся вычисляется средний показатель по которому и синхронизируются системные часы. Это избавляет от ошибки на одном из NTP-серверов.
                                                                                      +5
                                                                                      На моей старой работе были сервера, не подключенные к интернету. Я купил GPS-приёмник с интерфейсом RS-232 и поднял NTP. Антенну прилепил на магните на подоконник. Работало идеально.
                                                                                      А т.к. DNS тоже были внутренние, прописал запись time.windows.com с IP своего сервера, в итоге даже машины без домена всегда получали точное время.
                                                                                        +2
                                                                                        Вот, про такой способ создания своих Stratum-1 серверов я и писал, написали бы статью о настройке NTP сервера в связке с GPS приемником :-)
                                                                                      0
                                                                                      Даже в нашей солнечной Молдавии есть Stratum-1 сервак, неожидано!
                                                                                      А часы должны показывать точное время, иначе они не часы. Так же и с календарем.
                                                                                        0
                                                                                        Тут: leapsecond.com/java/gpsclock.htm пишут, что из за leap seconds время в системе GPS смещено от UTC на несколько секунд. Как в ntpd учесть это смещение при использовании GPS в качестве источника времени?
                                                                                          0
                                                                                          Настраивают так, что ntp с GPS берет только PPS сигнал, а само время — с других серверов.
                                                                                          Так ошибиться сложнее.

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

                                                                                        Самое читаемое