Рис. 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 показания часов могут изменяться, поэтому данный сервер следует отключать на время выполнения тех операций, для которых необходим точный отсчет времени.
Использование клиентских средств NTP
Ранее уже шла речь о том, что при формировании сети можно расположить на одном из компьютеров сервер NTP, который получал бы информацию о времени от внешнего сервера, и настроить остальные компьютеры так, чтобы они обращались за этой информацией к серверу NTP, расположенному в локальной сети. В результате во всей сети будет поддерживаться точное время, а трафик, связанный с NTP-обменом будет относительно невелик. На каждом из компьютеров такой сети будет выполняться программа ntpd, но на всех машинах, кроме одной, она выступит в роли клиента. В сложной сети вы можете организовать несколько уровней серверов NTP. Например, для обслуживания клиентов в каждой подсети можно установить отдельный сервер NTP, а один из них настроить так, чтобы он обращался за сведениями о текущем времени в Internet. Такой подход минимизирует трафик NTP в локальной сети.
Читать дальше