Каков наилучший способ синхронизации времени с точностью до миллисекунды И точностью между машинами?

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

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


person PiNoYBoY82    schedule 18.09.2008    source источник


Ответы (9)


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

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

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

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

person wnoise    schedule 18.09.2008

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

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

Исходный код: https://github.com/camilleg/clockkit
(до 13 февраля 2020 г.). это было на http://zx81.isl.uiuc.edu/clockkit/, теперь не в сети.)

person Camille Goudeseune    schedule 09.03.2015
comment
Я действительно хотел перейти по этим ссылкам, но ссылки на zx81.isl.uiuc.edu не работают, а ссылки на research.google.com ссылаются на zx81.isl.uiuc.edu/camilleg/dsceu04.pdf тоже не работает :( - person gazarsgo; 01.10.2015
comment
@gazarsgo попробуйте это: webcache.googleusercontent.com/ - person AddingColor; 03.05.2017
comment
Neato, @AddingColor, даже если диаграммы не пережили преобразование в HTML. В любом случае, ссылки zx81 остаются активными уже несколько лет. - person Camille Goudeseune; 03.05.2017
comment
@CamilleGoudeseune Будет ли это работать в открытом Интернете? Если да, то с какой степенью точности? (микро/наносекунды) - person rawinput; 12.12.2018
comment
@CamilleGoudeseune Как связать с обычным C++, потому что я установил libcommoncpp2-dev с apt (ubuntu 16) и нормально импортировал заголовки, но связывание не работает: неопределенная ссылка на `ost::IPV4Address::~IPV4Address()' - person rawinput; 12.12.2018
comment
Конечно, в открытом Интернете точность зависит от соединений. В clockkit.conf настройте параметры для PhasePanic и updatePanic. Чтобы связать, попробуйте удалить -fPIC из make-файла. Это и несколько настроек #include заставили его работать на Fedora 23. - person Camille Goudeseune; 19.12.2018
comment
@CamilleGoudeseune Еще раз извините, не могли бы вы дать мне число (точность в мс) при хорошем интернет-соединении, например, стабильном 100/20 Мбит/с. - person rawinput; 03.01.2019
comment
Загрузка со скоростью 100 Мбит/с и загрузка со скоростью 20 Мбит/с быстрее, чем 10 Мбит/с LAN, с которой тестировалось это программное обеспечение, поэтому в среднем 10 микросекунд, 100 микросекунд в худшем случае все еще сохраняется. - person Camille Goudeseune; 03.01.2019
comment
@CamilleGoudeseune все эти ссылки кажутся мертвыми, есть ли новые, на которые мне следует указать? кроме того, будет ли ваша система также работать для синхронизации двух или более смартфонов с точностью до миллисекунды? - person Felipe Mulinari Rocha Campos; 14.04.2020
comment
@FelipeMulinariRochaCampos 1, исправлено. 2, я не пробовал компилировать его на Android или macOS. Зависимость от libcommoncpp2-dev может быть сложной. - person Camille Goudeseune; 15.04.2020

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

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

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

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

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

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

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

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

person Mecki    schedule 18.09.2008
comment
Хотя этот ответ указывает на некоторые проблемы с хорошим протоколом, вывод совершенно неверен. Используя NTP, вы можете легко удерживать машины в локальной сети с точностью до миллисекунды. Даже через Интернет вы можете рассчитывать на удержание времени, скажем, в диапазоне 10 мс, используя NTP. - person Tall Jeff; 19.09.2008
comment
10 миллисекунд - это не миллисекундная точность, как запросил спрашивающий. Вы голосуете против моего вопроса, хотя я единственный, кто пытается остаться в рамках запросов спрашивающего. И даже здесь, в моей GBit LAN, время пинга варьируется более чем на 1 мс, иногда в зависимости от загрузки сети. - person Mecki; 22.09.2008
comment
NTP (протокол) способен и может легко поддерживать точность выше 1 миллисекунды между машинами в одной и той же локальной сети. Я проголосовал за вас, потому что то, что вы описываете, не соответствует действительности. - person Tall Jeff; 22.09.2008
comment
Mecki, вы процитировали ссылку, которая противоречит вам, потому что там написано, что есть несколько статей о точности NTP. Лучшее из них, кажется, принадлежит Дейву Миллсу (главному исследователю NTP). NTP v4 с модами ядра для его поддержки способен обеспечить точность намного выше 1 мс, возможно, до 1 нс. Я думаю, что следует пойти по тому пути, который говорит xsaero00, с этим авторитетным сервером, имеющим карту синхронизации GPS ... - person Andor; 05.05.2009
comment
Согласно его статье, NTP v3 имеет точность 1-2 мс в локальной сети и 10 мс в глобальной сети. говоря о статье Миллса. Звучит как НЕ лучше, чем 1 мс для меня. Чтобы получить лучшие результаты, вам нужен NTP v4 с модами ядра для его поддержки. Если только связанная статья не резюмировала статью Миллса должным образом. - person Mark Ransom; 08.10.2009
comment
Вы, кажется, предполагаете, что это вариант использования WAN. Но вопрос не говорит об этом - только между машинами, которые, как я думаю, скорее всего будут в локальной сети, чем нет. Так что мне кажется, что вполне возможно, что 1-2 мс вполне с точностью до миллисекунды (я не читаю это как требование быть точным с точностью до доли миллисекунды) - person StaxMan; 17.05.2010
comment
@Mecki, ссылка не работает. - person rmp251; 30.05.2014
comment
en.wikipedia.org/wiki/Precision_Time_Protocol — конечно, можно. Это просто не дешево. - person wishi; 09.03.2016

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

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

person Mike Starov    schedule 18.09.2008

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

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

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

person Tall Jeff    schedule 18.09.2008

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

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

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

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

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

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

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

ХТН

person Lester Cheung    schedule 26.02.2016

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

person Chris    schedule 18.09.2008

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

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

person nsayer    schedule 18.09.2008

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

person Ana Betts    schedule 19.09.2008
comment
Вы в этом уверены? Не могли бы вы добавить некоторые доказательства или пояснения, пожалуйста? Спасибо. - person Cristian Ciupitu; 19.09.2008
comment
У меня нет конкретной ссылки, но я верю, что утверждение верно в отношении однократного прочтения. Хотя программные часы реального времени, вероятно, даже менее точны, чем аппаратные на многих машинах. Отсюда и потребность во внешнем (скажем NTP) источнике. - person Tall Jeff; 22.09.2008