Каков наилучший способ синхронизации времени с точностью до миллисекунды И точности между машинами? - PullRequest
26 голосов
/ 19 сентября 2008

Из того, что я понимаю, кристаллы на ПК печально известны из-за перекоса часов. Если часы всегда смещаются, каков наилучший способ синхронизации часов между машинами с точностью до миллисекунды? Из того, что я обнаружил, NTP и PTP являются возможными решениями, но мне было интересно, есть ли у кого-нибудь опыт работы с stackoverflow.com!

Я понимаю, что NTP является популярным выбором, но мне интересно, имел ли кто-нибудь опыт работы с PTP (IEEE1588)

Ответы [ 9 ]

15 голосов
/ 19 сентября 2008

Просто запустите стандартный демон NTP.

Он имеет возможность принимать данные от нескольких устройств GPS, а также общаться с сетевыми серверами.

Редактировать: я имел в виду http://www.ntp.org/, не тот, который поставляется с Windows.

У меня нет никаких предложений относительно того, какие NTP-клиенты лучше всего подходят для Windows, но для машин Unix нет реальной причины не запускать NTP.

12 голосов
/ 19 сентября 2008

Вы не можете синхронизировать машины до уровня в миллисекунды, обмениваясь данными, потому что любой обмен данными уже занимает не менее миллисекунд и, таким образом, портит ваш результат! Даже протоколы, которые пытаются сначала измерить, сколько времени занимает передача данных, а затем отправляют информацию о времени (принимая во внимание измеренную задержку), немного лучше, чем в среднем, но они все еще не хороши, поскольку не каждая передача данных занимает одинаковое время ( просто постоянно пингуйте сервер в интернете и смотрите, как каждый пинг имеет различную задержку).

Единственный способ по-настоящему синхронизировать два компьютера в диапазоне миллисекунд состоит в том, чтобы они оба получали время из одного и того же источника с помощью метода передачи, который не имеет неизвестной или постоянно меняющейся задержки. Например. если оба получают спутниковый сигнал, который передает время. Сигнал всегда будет иметь постоянную задержку (со спутника на землю), и они оба получают его почти в течение одной наносекунды.

Например, в Германии есть радиоуправляемое время. Где-то в стране есть атомные часы (которые имеют правильное время до наносекунды в течение сотен лет), и некоторые отправители постоянно передают текущее время с заданной частотой по всей стране. Существуют будильники и даже наручные часы, которые могут принимать это время и постоянно синхронизировать его (ну, на самом деле, не всегда, большинство моделей делают это только один раз в 24 часа, чтобы сэкономить время работы от батареи). Такие приемные устройства также существуют для компьютеров и поставляются с программным обеспечением, которое может постоянно синхронизировать часы вашего компьютера с этим сигналом времени.

Насколько я знаю, GPS также отправляет информацию о времени (либо это, либо время может быть каким-то образом рассчитано на основе информации GPS, я не слишком знаком с протоколом GPS). Таким образом, подключив GPS-приемник к обоим компьютерам, вы также можете синхронизировать их с точностью до миллисекунды. Однако если ваша синхронизация выполняется через Интернет, не ожидайте лучшей синхронизации, чем отключение одного компьютера не более чем на 20 миллисекунд.

Чтобы обновить на комментатор,
NTP не так точен, как люди любят утверждать здесь:

NTP обычно может поддерживать время с точностью до десятков миллисекунд в течение общедоступный Интернет, и может достигать точности, превышающей одну миллисекунду в локальных сетях в идеальных условиях.

Источник: Википедия

Я бы предпочел синхронизировать их все без какой-либо сети, а в дальнейшем синхронизировать их с официальным временем по Гринвичу, и здесь GPS, вероятно, единственный способ получить действительно точные результаты на всех машинах (и это не только до мс, фактически до микросекунд).

9 голосов
/ 09 марта 2015

Вот какое-то 10-летнее программное обеспечение, которое синхронизируется с точностью до сотой миллисекунды. (Моя команда написала это, когда NTP не был достаточно хорош для нашей лаборатории.)

Из аннотации: «Распределенные часы для сетевых ПК. Эти часы без дополнительного оборудования позволяют синхронизировать данные датчиков с нескольких ПК с задержкой и дрожанием менее 10 микросекунд, в худшем случае 100 микросекунд».

Описание: http://scholar.google.com/citations?view_op=view_citation&citation_for_view=QmbeOvsAAAAJ:5nxA0vEk-isC

Исходный код: http://zx81.isl.uiuc.edu/clockkit/

3 голосов
/ 19 сентября 2008

Я использую NTP во всей сети в моей компании, и он работает довольно хорошо. Ключ должен иметь один авторитетный сервер в локальной сети и синхронизировать с ним все машины в сети. Лучше всего, чтобы на этом сервере были установлены радиочасы. NTP хорош, потому что он не просто корректирует время от времени, но фактически вычисляет и корректирует тактовую частоту, делая ее более точной.

Как только я настроил NTP в сети, я открыл, как пять VNC-сеансов, на другом сервере и сидел там, наблюдая за часами. Часы на всех серверах были синхронизированы с миллисекундами, и это сразу после установки. Это становится более точным, поскольку это бежит.

2 голосов
/ 19 сентября 2008

Решения на основе NTP или SNTP могут работать очень хорошо, но это сильно зависит от того, насколько хорошо реализован клиент.

Конечно, ответ на этот вопрос - , а не , чтобы использовать службу времени Windows по умолчанию, если вам нужна точность менее секунды. Общеизвестно, что он плохо справляется со стабильной временной базой на машине и, как правило, не корректирует коррекции и даже почти нестабилен, особенно когда машины имеют довольно неточные временные рамки для начала, что является распространенным явлением. Предположим, что стандартные встроенные в Windows инструменты могут надежно удерживать там точность - обычно всего несколько секунд между всеми машинами, и я обычно вижу колебания до 30 секунд между машинами - даже если вы настраиваете параметры реестра.

Бесплатный инструмент Achron - довольно хорошее решение для перехода в диапазон плюс / минус 500 миллисекунд. Чтобы добиться этого, потребуется более промышленное решение, такое как Greyware

1 голос
/ 26 февраля 2016

В последнее время я изучал (читал Googled) по этой теме, и вот что я узнал до сих пор:

  • Чтобы получить точность в миллисекундах (или лучше), вам нужна аппаратная поддержка. Источник GPS или аппаратная отметка времени (и хороший источник времени) в PTP.

  • Аппаратная метка времени в PTP выполняется с помощью поддерживаемой сетевой карты - у Intel она есть.

  • Без аппаратной отметки времени точность между NTP и PTP аналогична.

  • (Раньше PTP не использовался) Я прочитал, что NTP проще настроить.

  • Мой ограниченный опыт работы с источником времени GPS (по последовательному каналу) варьируется. Это прекрасно работает, если вы можете заставить его работать, но в центре обработки данных есть устройство, которое мне так и не удалось заставить его работать ...

  • Если ваши машины находятся в режиме colo, спросите ваш DC, что они могут предоставить - так что вам не нужно решать. : D

НТН

1 голос
/ 19 сентября 2008

Имейте также в виду, что аппаратные системные часы (т.е. неточные) считываются только при запуске машины - если вы говорите о серверных машинах, вы не потеряете время из-за них.

1 голос
/ 19 сентября 2008

Как вы уже предложили, NTP является отраслевым стандартом для решения этой проблемы, но для этого требуется либо подключение к Интернету, либо источник уровня 0 (точные аппаратные часы, такие как GPS-приемник с компьютерным интерфейсом).

Если вы используете подключение к Интернету, рассмотрите возможность использования NTP Pool .

1 голос
/ 19 сентября 2008

NTP - определенно путь. По сути, запускайте и забывайте, пока вы выпускаете брандмауэр на локальном главном сервере (обычно это брандмауэр или маршрутизатор).

...