Синхронизация времени в локальной сети
От: andrey_nado  
Дата: 29.03.12 15:39
Оценка:
Задача: синхронизировать время на двух или более компьютерах, находящихся в локальной сети. Точность синхронизации — порядка 1 миллисекунды. Использовать интернет не обязательно, один из компьютеров может использоваться в качестве эталона. Компьютеры работают под управлением OS Windows (XP или выше), но интересно также кроссплатформенное решение.

Кто что подскажет?
Re: Синхронизация времени в локальной сети
От: okman Беларусь https://searchinform.ru/
Дата: 29.03.12 15:46
Оценка: 2 (1) +2
Здравствуйте, andrey_nado, Вы писали:

_>Задача: синхронизировать время на двух или более компьютерах, находящихся в локальной сети. Точность синхронизации — порядка 1 миллисекунды. Использовать интернет не обязательно, один из компьютеров может использоваться в качестве эталона. Компьютеры работают под управлением OS Windows (XP или выше), но интересно также кроссплатформенное решение.


_>Кто что подскажет?


Первое, что приходит в голову — поднять в локальной сети свой time server (Network Time Protocol).
Re: Синхронизация времени в локальной сети
От: Miroff Россия  
Дата: 29.03.12 16:02
Оценка:
Здравствуйте, andrey_nado, Вы писали:

_>Кто что подскажет?


NTP чем не устраивает?
Re[2]: Синхронизация времени в локальной сети
От: andrey_nado  
Дата: 29.03.12 16:09
Оценка:
Здравствуйте, Miroff, Вы писали:

M>NTP чем не устраивает?


А есть в Windows XP/Vista/7 сервер и клиент NTP?
Re[3]: Синхронизация времени в локальной сети
От: Centaur Россия  
Дата: 29.03.12 17:15
Оценка:
Здравствуйте, andrey_nado, Вы писали:

_>А есть в Windows XP/Vista/7 сервер и клиент NTP?


Не только есть, но и включён по умолчанию и настроен на Microsoft’овский сервер.
Re[3]: Синхронизация времени в локальной сети
От: Centaur Россия  
Дата: 29.03.12 17:16
Оценка:
Здравствуйте, andrey_nado, Вы писали:

_>А есть в Windows XP/Vista/7 сервер и клиент NTP?


…а сервер можно и линуксовыйподнять, если (если!) вдруг не найдётся.
Re[3]: Синхронизация времени в локальной сети
От: Ops Россия  
Дата: 31.03.12 13:07
Оценка: 12 (2)
Здравствуйте, andrey_nado, Вы писали:

_>А есть в Windows XP/Vista/7 сервер и клиент NTP?


Клиент есть, сервер тоже, но по-умолчанию выключен, как настроить — тут: http://blogs.msdn.com/b/w32time/archive/2008/04/02/configuring-a-standalone-time-server.aspx
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Синхронизация времени в локальной сети
От: b-3 Россия  
Дата: 31.03.12 14:54
Оценка: 2 (1)
Здравствуйте, andrey_nado, Вы писали:

_>Задача: синхронизировать время на двух или более компьютерах, находящихся в локальной сети. Точность синхронизации — порядка 1 миллисекунды. Использовать интернет не обязательно, один из компьютеров может использоваться в качестве эталона. Компьютеры работают под управлением OS Windows (XP или выше), но интересно также кроссплатформенное решение.


Я подскажу, что требование очень жесткое для Windows. Первым делом поставьте ntpd и посмотрите, какую точность обеспечит он. Если повезёт, это будет порядка 2-5 мс. Если не повезёт, то это может быть и 50 мс (что для вас много).

"Не повезёт" может означать к примеру следующее

    * Сетевой концентратор вставляет задержки в 2-4 мс при доставке пакета[/li]
    * Точность таймера на материнской плате существенно хуже 1 мс
    * Исходное время подвержено скачкам в 30 (300, 3000... ) мс, т.к. корректируется бог весть как из интернетов
    * CPU на машинах загружен под 100% и из-за этого синхронизация ухудшается

В общем, я не разделяю всеобщего оптимизма. 1мс это очень жёстко для неспециализированного железа с виндой. Зачем собственно такая точность, передаёте какой-нибудь сигнал? Про самосинхронизирующиеся коды слышали? Если у вас задача не реалтаймовая, лучше использовать их, а не долбаться с NTP
Забанен с формулировкой "клинический дисидент".
Re[2]: Синхронизация времени в локальной сети
От: andrey_nado  
Дата: 02.04.12 13:27
Оценка:
Здравствуйте, b-3, Вы писали:

b-3>Зачем собственно такая точность, передаёте какой-нибудь сигнал?


На одном компьютере измеряется некая величина, причём как мгновенное значение, так и первая производная по времени.

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

> Про самосинхронизирующиеся коды слышали?


Боюсь, в данном случае он не поможет.
Re[3]: Синхронизация времени в локальной сети
От: b-3 Россия  
Дата: 02.04.12 18:32
Оценка: 2 (1)
Здравствуйте, andrey_nado, Вы писали:

b-3>>Зачем собственно такая точность, передаёте какой-нибудь сигнал?

_>На других компьютерах эта величина периодически (раз в секунду) считывается с первого компьютера по HTTP. По получении нужно получить как можно более точное значение измеряемой величины в настоящий момент, а не в момент измерения. Для этого вместе с величиной и её производной передаётся временная отметка,
Стоп, стоп. А откуда вы под виндой возьмёте временную отметку с точностью порядка 1мс?

Таймеры под виндой бывают двух видов: использующие кварц часов материнской платы (точная частота, но огрубление значения до 5-10мс) и использующие CPU frequency generator (значение не огрубляется, но погрешность частоты до нескольких процентов). Ни то, ни другое, не позволяет так запросто получить 1 мс метку времени на десктопном железе. У вас есть какая-то заготовка на эту тему?

В принципе можно попробовать поставить ntpd в режиме, когда он отдаёт значения через multimedia timer, но этот режим у него полуэкспериментальный и проблемный... Вот, к примеру история одной из попыток достичь точности в 1 мс. Даёт представление о том, какое это увлекательное дело в нереалтаймовой ОС
Забанен с формулировкой "клинический дисидент".
Re[4]: Синхронизация времени в локальной сети
От: andrey_nado  
Дата: 02.04.12 19:16
Оценка:
Здравствуйте, b-3, Вы писали:

b-3>Стоп, стоп. А откуда вы под виндой возьмёте временную отметку с точностью порядка 1мс?


Мне не нужно производить отсчёты с точным до 1 мс интервалом. Мне достаточно знать текущее время с точностью до 1 мс, когда я делаю измерение. Это возможно под современными версиями Windows?

Если это невозможно, и текущее время определяется с точностью до ~10 мс, то постановка задачи меняется: теперь мне нужно синхронизировать время с точностью до этих самых 10 мс (или сколько там позволяет таймер). Такую точность мне NTP обеспечит?
Re: Синхронизация времени в локальной сети
От: dilmah США  
Дата: 02.04.12 19:21
Оценка:
_>Кто что подскажет?

вообще, для локальных сетей есть timed
Re[2]: Синхронизация времени в локальной сети
От: andrey_nado  
Дата: 02.04.12 19:23
Оценка:
Здравствуйте, dilmah, Вы писали:

D>вообще, для локальных сетей есть timed


Поясните, пожалуйста, что это и под какими ОС работает.
Re[5]: Синхронизация времени в локальной сети
От: b-3 Россия  
Дата: 06.04.12 20:16
Оценка: 2 (1)
Здравствуйте, andrey_nado, Вы писали:

_>Здравствуйте, b-3, Вы писали:


b-3>>Стоп, стоп. А откуда вы под виндой возьмёте временную отметку с точностью порядка 1мс?


_>Мне не нужно производить отсчёты с точным до 1 мс интервалом. Мне достаточно знать текущее время с точностью до 1 мс, когда я делаю измерение. Это возможно под современными версиями Windows?


_>Если это невозможно, и текущее время определяется с точностью до ~10 мс, то постановка задачи меняется: теперь мне нужно синхронизировать время с точностью до этих самых 10 мс (или сколько там позволяет таймер). Такую точность мне NTP обеспечит?

5-10 мс добиться можно точно. Призываю вас проэкспериментировать) Что касается 1мс — нужно смотреть последний релиз ntp, там вроде планировались улучшения.

Вот ещё мысль. Если бы мне позарез требовалась 1мс точность в ваших условиях, а со стандартным NTPD/W32time/etc бы ничего не получилось, я бы имел такой запасной вариант:
— посылаем sntp пакет, запуская мультимедиа таймер (Stopwatch в .net, QueryPerformanceTimer в винапи). Пакет простой, в инете есть примеры кода.
— по мультимедиа таймеру отмеряем интервал между отправкой sntp запроса и получением sntp ответа. Результат замера будет типа 5мс, что даёт нам смещение относительно ведущего компьютера с теоретической погрешностью до 2.5 мс из-за несимметричнности канала, но на практике там может быть стабильно лучше 1мс, особенно если соединить напрямую по ethernet
— получение ответного пакета udp, содержащего метку времени, вызывает замер значения. В этот момент, имея свежую метку времени и держась за QueryPerformanceTimer, можно выжать что-то порядка 0.2-0.5 мс. Mission complete

Фокус удаётся из-за того, что вы вообще не синхронизируете системное время, а сращиваете логику получения метки времени и обработки сигнала. Правда это потребует разобраться в формулах ntp, но там несложно, по сути одна арифметика вроде (T4-T1)-(T3-T2)
Забанен с формулировкой "клинический дисидент".
Re[6]: Синхронизация времени в локальной сети
От: Jolly Roger  
Дата: 07.04.12 03:29
Оценка: :)
Здравствуйте, b-3, Вы писали:

b-3>по мультимедиа таймеру отмеряем интервал между отправкой sntp запроса и получением sntp ответа. Результат замера будет типа 5мс, что даёт нам смещение относительно ведущего компьютера с теоретической погрешностью до 2.5 мс из-за несимметричнности канала, но на практике там может быть стабильно лучше 1мс, особенно если соединить напрямую по ethernet

b-3>- получение ответного пакета udp, содержащего метку времени, вызывает замер значения. В этот момент, имея свежую метку времени и держась за QueryPerformanceTimer, можно выжать что-то порядка 0.2-0.5 мс. Mission complete

алгоритм Марзулло
"Нормальные герои всегда идут в обход!"
Re[6]: Синхронизация времени в локальной сети
От: andrey_nado  
Дата: 10.04.12 16:56
Оценка:
Здравствуйте, b-3, Вы писали:

Спасибо за развёрнутый ответ. Думаю, для моих целей проще всего просто установить NTPD.
Re[2]: Синхронизация времени в локальной сети
От: batu Украина  
Дата: 10.04.12 17:09
Оценка:
Здравствуйте, b-3, Вы писали:

b-3>Здравствуйте, andrey_nado, Вы писали:


_>>Задача: синхронизировать время на двух или более компьютерах, находящихся в локальной сети. Точность синхронизации — порядка 1 миллисекунды. Использовать интернет не обязательно, один из компьютеров может использоваться в качестве эталона. Компьютеры работают под управлением OS Windows (XP или выше), но интересно также кроссплатформенное решение.


b-3>Я подскажу, что требование очень жесткое для Windows. Первым делом поставьте ntpd и посмотрите, какую точность обеспечит он. Если повезёт, это будет порядка 2-5 мс. Если не повезёт, то это может быть и 50 мс (что для вас много).


b-3>"Не повезёт" может означать к примеру следующее


b-3>

    b-3>* Сетевой концентратор вставляет задержки в 2-4 мс при доставке пакета[/li]
    b-3>* Точность таймера на материнской плате существенно хуже 1 мс
    b-3>* Исходное время подвержено скачкам в 30 (300, 3000... ) мс, т.к. корректируется бог весть как из интернетов
    b-3>* CPU на машинах загружен под 100% и из-за этого синхронизация ухудшается
    b-3>

b-3>В общем, я не разделяю всеобщего оптимизма. 1мс это очень жёстко для неспециализированного железа с виндой. Зачем собственно такая точность, передаёте какой-нибудь сигнал? Про самосинхронизирующиеся коды слышали? Если у вас задача не реалтаймовая, лучше использовать их, а не долбаться с NTP

Итого Windows не подходит для решения задач реального времени. Попытки вычислять "правильное" время не приведут ни к чему.. Проходил еще как на космос работал.. Там со временем очень жестко было.. Да еще и три процессора синхронизировались. Троированная система была.. Оптимальный вариант пересмотреть решение задачи и синхронизироваться где-то на более высоком уровне задачи, процессов, потоков. как ни назови. Лишь бы увеличить интервалы до реального. Либо менять операционку..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.