Контроль операций NTP
Контроль операций NTP
Помимо визуального контроля показаний часов с помощью программы xclock, для мониторинга операций NTP часто применяется программа ntpq. После вызова эта программа запрашивает команды, определяющие ее дальнейшую работу. Команды вводятся в текстовом режиме. В процессе выполнения программа отображает информацию о работе сервера. Некоторые наиболее важные команды ntpq описаны ниже.
• host имя_узла. По умолчанию ntpq опрашивает сервер, находящийся на локальном компьютере. Задавая команду host, можно использовать данную программу для проверки любого сервера NTP в сети. Аналогичный результат можно получить, задавая имя целевого узла при вызове ntpq, например ntpq remote.threeroomco.com.
• hostnames [yes | no]. Если вы укажете опцию yes, программа ntpq, сообщая о действиях удаленных компьютеров, будет отображать имена узлов (подобная конфигурация предусмотрена по умолчанию). Опция no указывает на то, что вместо имен должны отображаться IP-адреса. Такой же эффект вызовет опция -n, заданная при вызове программы ntpq.
• ntpversion номер_версии. Данная команда позволяет указать версию протокола NTP, которая будет использоваться при передаче запросов серверу NTP.
• quit. Данная команда задается после окончания работы с программой ntpq и завершает ее выполнение.
• peers. Данная команда предоставляет одно из самых мощных средств диагностики. Она отображает список серверов, с которыми взаимодействует ваш сервер. Если вы предварительно не задали команду host, в этом списке будут содержаться сервер на локальном компьютере и все серверы, указанные в файле ntp.conf. Кроме того, при вызове этой команды будет отображена дополнительная информация, в частности, серверы, используемые для синхронизации; уровень каждого сервера; время последнего обращения к каждому серверу и интервал между обращениями; числовой код, отражающий надежность соединения между компьютерами; задержка, смещение и погрешность синхронизации. В начале каждой записи отображается символ, указывающий на то, каким образом ваш сервер использует данные, предоставляемые другими серверами. Символ + означает, что сервер рассматривался как претендент на роль источника синхронизации, но вместо него был выбран другой сервер; символ * указывает на то, что сервер является вышестоящим по отношению к вашему серверу; символ ? определяет "испорченные часы" — сервер, показания которого признаны неверными. Кроме того, ntpq может отображать другие символы, определяющие различные характеристики серверов. Разновидностями команды peers являются lpeers (она может отображать информацию о большем количестве серверов) и opeers (не выводит имена серверов, с которым взаимодействует ваш сервер).
• associations. Данная команда выводит статистику соответствия для каждого сервера. Серверы указываются не с помощью имен или IP-адресов, а посредством идентификаторов соответствия, используемых в других командах. Разновидностями этой команды являются lassociations,passociations и lpassociations.
• readvar идентификатор_соответствия имя_переменной. Эта команда позволяет читать содержимое переменной. Она чаще всего применяется при отладке. Синонимом readvar является rv, a mreadvar представляет собой разновидность этой команды.
• readlist идентификатор_соответствия. Данная команда действует подобно readvar, но выводит список всех стандартных переменных. Синонимом readlist является rl, a mreadlist представляет собой разновидность этой команды.
• pstatus идентификатор_соответствия. Команда pstatus запрашивает информацию о состоянии системы. Результат выполнения данной команды практически совпадает с результатом команды readlist.
• writevar идентификатор_соответствия имя_переменной. Данная команда позволяет изменить значение переменной. Как правило, в ее использовании не возникает необходимости.
Программа ntpq вызывается при первоначальной настройке сервера NTP и при изменении его конфигурации. Кроме того, с ее помощью периодически выполняется контроль за функционированием сервера. На рис. 10.1 показан результат работы программы ntpq; в данном примере эта программа вызвана тогда, когда сервер NTP уже проработал некоторое время. Если вы вызовете ntpq сразу же после запуска ntpd, многие поля останутся пустыми или будут содержать значения, не имеющие смысла (чаще всего нулевые). Если сервер проработает около минуты, все поля будут заполнены реальными значениями, как это показано на рис. 10.1. Символы + и * в начале записей появляются лишь спустя несколько минут, так как для выяснения того, какие из серверов более надежны, требуется определенное время. В течение нескольких минут некоторые значения могут изменяться, а затем они станут стабильными. Если слева от имени сервера отображается символ ?, этот сервер имеет смысл удалить из конфигурационного файла, поскольку, вероятнее всего, он работает некорректно.
Рис. 10.1. Программа ntpq отображает информацию о состоянии NTP-сервера
Если вы заметите, что показания системных часов изменяются странным образом, имеет смысл вызвать программу ntpq и проверить текущее состояние сервера. Возможно, он не получает синхронизирующих данных из-за изменения IP-адреса сервера или вследствие нарушения работы сети. (Эпизодические сбои при обмене данными по сети не могут серьезно повлиять на работу временного сервера. Он лишь переключится на использование внутреннего таймера, а затем при возобновлении работы сети снова станет действовать в обычном режиме.) Если в течение нескольких минут после запуска ntpd сервер не сможет синхронизировать свои данные с одним из внешних временных серверов, вам следует проверить работу сети. Доступен ли удаленный сервер для пакетов, передаваемых с помощью программы ping? He блокирует ли брандмауэр запросы NTP? (Возможно, вам придется перенастроить брандмауэр для прохождения пакетов UDP, адресованных на порт 123.) Имеете ли вы право обращаться к удаленному серверу? (Не исключено, что на этом сервере используется брандмауэр или установлен ключ аутентификации.)
Обеспечение точного отсчета времени
В большинстве компьютеров работа внутреннего таймера основана на использовании генератора — электронного устройства, вырабатывающего периодический сигнал. Например, сигнал с частотой 100 Гц изменяет свое состояние 100 раз в секунду. Считая изменения сигнала, вырабатываемого генератором, компьютер отсчитывает время. Как было сказано ранее в этой главе, компьютерные таймеры чаще всего работают неточно. Это происходит по разным причинам. Во-первых, частота сигнала, вырабатываемого генератором, может отличаться от ожидаемой. Если, например, вместо 100 Гц частота сигнала составляет 100,1 Гц, то системные часы будут спешить более чем на минуту в день. Во-вторых, частота сигнала может изменяться в зависимости от внешних факторов, например от температуры. В этом случае погрешность системных часов будет зависеть от температуры в комнате, от того, сколько времени компьютер проработал после включения и т.д.
Погрешность в работе системных часов может также быть вызвана причинами, не связанными с работой генератора. Как правило, при поступлении очередного сигнала (этот сигнал носит название "тик") генерируется прерывание (на компьютерах x86 прерывание с номером 0). Если в это время процессор компьютера занят обработкой более приоритетных событий, некоторые из прерываний таймера могут остаться необработанными, т.е. некоторые "тики" могут быть пропущены.
Описанные причины приводят к возникновению "дрейфа" системных часов, что затрудняет работу пользователей и приводит к сбоям в выполнении некоторых важных программ. В ряде случаев, например при управлении научными экспериментами, отсчет времени должен производиться с высокой точностью. (Обычные версии Linux плохо справляются с такими задачами. Для управления научными экспериментами обычно используется разновидность данной системы, которая называется Real-time Linux; дополнительную информацию о ней можно получить по адресу http://fsmlabs.com/community/.) Если вам необходимо организовать работу высокоточных часов, установите опцию ядра Enhanced Real Time Clock в меню Character Devices.
Наличие модулей ядра часто приводит к потере "тиков", поэтому, если необходимо отсчитывать время с высокой точностью, вам следует по возможности включить все необходимые драйверы в состав ядра и минимизировать число модулей. Если компьютер будет постоянно находиться во включенном состоянии в комнате с постоянной температурой, "дрейф" часов окажется почти постоянным и может быть учтен в процессе работы. Сервер NTP предпринимает попытки компенсации "дрейфа", сравнивая показания часов с информацией, полученной от вышестоящего сервера. Следует заметить, что в результате работы самого сервера NTP показания часов могут изменяться, поэтому данный сервер следует отключать на время выполнения тех операций, для которых необходим точный отсчет времени.