У меня есть сервер Linux, время которого синхронизировано с устройством NTP на основе GPS, расположенным поблизости. Время пинга от сервера до устройства составляет около 1 мс, с очень низким джиттером:
--- x.x.x.x ping statistics --- 100 packets transmitted, 100 received, 0% packet loss, time 99001ms rtt min/avg/max/mdev = 0.874/0.957/1.052/0.051 ms
Однако клиент NTP оценивает точность синхронизации времени примерно в 5-6 мсек, что кажется очень высоким с учетом настройки:
synchronised to NTP server (x.x.x.x) at stratum 2 time correct to within 5 мс polling server every 16 s
ntpq -p дает следующее:
remote refid st t when poll reach delay offset jitter ============================================================================== *x.x.x.x .PPS. 1 u 10 16 377 0.964 -0.019 0.036
Два вопроса:
Значение, которое ntpstat
отображается после «времени, точного с точностью до», это корневая дисперсия + корневая задержка / 2. ntpq -p
не показывает прогон "корневой дисперсии" ntpq -c rl
вместо.
Тем не менее очевидно, что основным источником неточности является дисперсия, а не задержка (которая составляет всего 0,964).
Дисперсия - это «номинальная ошибка относительно первичного эталонного источника». Я кратко просмотрел NTPv4 RFC, и вот что в нем говорится:
Дисперсия (эпсилон) представляет собой максимальную погрешность измерения. Он увеличивается со скоростью, равной максимальному допустимому отклонению тактовой частоты системы (PHI), обычно 15 PPM. 1 PPM равен 10 ^ (- 6) секундам в секунду.
Если использовать терминологию rrdtool, дисперсия - это не показатель, а скорее счетчик. Большое значение может не означать, что что-то не так.
Увы, я не смог достаточно хорошо понять алгоритм ntp, чтобы увидеть, как уменьшить это число. Я заметил, что это значение иногда сбрасывается. Не знаю почему.
Причина, по которой я спросил об оборудовании выше, заключается в том, что многие устройства GPS (слой 0, «корневой» источник) подключаются к компьютеру, который затем действует как сервер NTP через последовательный канал.
Последовательные соединения часто имеют джиттер 1-5 мс на линии из-за служебных данных / ожидания прерывания. Следовательно, я предполагаю, что ваш источник NTP читает из последовательного источника.
Вы можете внести некоторые изменения в последовательное соединение, чтобы уменьшить джиттер. В первую очередь, отключение FIFO может дать вам достойные результаты.
http://support.ntp.org/bin/view/Support/KnownHardwareIssues#Section_9.1.5. http://www.febo.com/time-freq/ntp/jitter/index.html
Время правильное в пределах 5 мс - БОЛЬШОЕ !!! 5 мс - это 5/1000 секунды. Все, что меньше 100 мс, легко приемлемо для чего угодно, кроме небольшого количества ситуаций, в этом случае вы будете использовать не GPS, а локальные атомные часы и два внешних эталонных генератора. С пулом ntp мы получаем в течение 10 мс.