@ Карта сайта News Автора!

Bog BOS: Работа со временем

Последние изменения:
2018.08.30: sysadmin: переработана статья про syslog

Последнее изменение файла: 2018.08.10
Скопировано с www.bog.pp.ru: 2018.10.15

Bog BOS: Работа со временем

Системы времени

Используются различные системы отсчета времени, основанные на астрономических наблюдениях, периоде атомных колебаний и смешанные:

Есть модификации UTC:

DUT1 - разница между UTC и UT1 точностью до 0.1 секунды, публикуется еженедельно обсерваторией США.

Юлианский день - номер дня с полудня 1 января 4713 года до н.э. Модифицированный Юлианский день есть Юлианский день - 2400000.5 (т.е. 0 - это начало нашей эры). При этом необходимо указывать систему времени (TAI, UT).

Часы в Linux

В компьютере имеется 2 реализации часов: часы реального времени (Real Time Clock - RTC, CMOS clock, hardware clock, /dev/rtc, /proc/driver/rtc) и системные часы (system clock, software clock). Часы реального времени представляют собой отдельную микросхему, питающуюся от литиевой батарейки (от нее питается также CMOS, хранящий настройки BIOS), и работают независимо от того, включен компьютер или нет. ОС при загрузке (/etc/rc.sysinit) считывает текущее время, после чего ведет свой счетчик времени (системные часы) самостоятельно основываясь на подсчете количества специальных регулярных прерываний (timer interrupt), обычно 100 Гц (1024 Гц). Системное время выражается в числе секунд (и микросекунд или наносекунд) после 00:00:00 January 1, 1970 UTC.

Показания этих часов могут отличаться друг от друга (и от реального времени ;). Чтение и запись RTC, согласование RTC и системного времени осуществляются программой hwclock(8) (в старых версиях Linux clock(8)). hwclock позволяет использовать RTC в режиме UTC или местного времени (см. переменные окружения в /etc/sysconfig/clock). Информация о расхождении хранится в файле /etc/adjtime.

Значение системных часов можно изменять командой date(1), но лучше этого не делать, т.к. многие программы не выносят разрывов и тем более уменьшения показания системных часов (например, старая версия X Window просто зависала при этом; на новой я не проверял ;). NTP (см. ниже) использует плавную подстройку частоты часов для коррекции текущего времени (по умолчанию, в небольших пределах, но их можно расширить). Позднее утилита adjtimex(8) (adjtime в SVR4) была выделена в отдельный пакет (adjtimex-1.11-5 для RH 7.2), что позволяет плавно подстраивать значение системных часов и корректировать их частоту с помощью сигналов точного времени (требуется несколько дней, --log --watch) или сделав пару запросов в день к NTP серверу с помощью ключа --host (полезно при модемном подключении к интернет). Позволяет также согласовать ход аппаратных и системных часов (предлагаемые корректировки можно получить командой: adjtimex --compare, только надо немного подождать). Не стоит использовать одновременно NTP и adjtimex или hwclock --adjust или hwclock --hctosys. Исчезла в RHEL 3 (White Box 3.0, CentOS 3).

Синхронизация времени в Интернет

Стабильность частоты типичного кварцевого генератора невелика (например, зависит от температуры, напряжения, механических деформаций и т.д.), к тому же базовая частота меняется от кристалла к кристаллу (считается допустимым отклонение частоты в 500 PPM, что приводит к уходу системных часов на 40 секунд в день; PPM - одна миллионная). Согласование хода аппаратных и системных часов с помощью adjtimex увеличивает точность хода, но недостаточно для работы сервера.

Системные часы серверов должны быть согласованы (синхронизированы) между собой с большой точностью (при небольшой загрузке - доли секунды) иначе невозможно отслеживать последовательность событий, разбирать журналы сообщений и т.д. Чем больше плотность событий (загрузка сервера), тем более точной должна быть синхронизация. При синхронизации обычно используется система времени UTC. В Интернет (TCP/IP) возможны следующие методы синхронизации:

Для более точной (субмикросекунда) синхронизации в локальной сети может использоваться протокол PTP (Precision Time Protocol v2, IEEE 1588), использующий аппаратные отметки точного времени, которые ставятся на входящих и исходящих PTP пакетах сетевыми контроллерами и коммутаторами, имеющими собственные часы. Для достижения субмикросекундной точности требуется поддержка ото всех элементов локальной сети, в противном случае рекомендуется оставаться на NTP. Не надо синхронизовать системные часы одновременно по NTP и по PTP, для этого есть утилита timemaster. Проверка наличия поддержки PTP в драйвере сетевого контроллера: "ethtool -T имя-интерфейса". Протокол PTP используют серверы chrony и ptp4l (linuxptp), Элементы локальной сети автоматически (алгоритм BMC) выстраиваются в иерархию (master-slave), в вершине которой находятся суперчасы (grandmaster), листья (и вершина) дерева имеют 1 порт и называются обычными (ordinary) часами, узлы с несколькими портами называются граничными (boundary) часами. Аппаратные часы (PHC) хоста (сетевого контроллера) синхронизируются аппаратно со старшими часами, системные часы синхронизируются программно со старшими часами. PTP использует систему отсчёта времени TAI в отличие от системного времени, используещег UTC. В настоящий момент разница между ними - 36 секунд.

Часовые пояса

http://tycho.usno.navy.mil/tzones.html
/usr/share/zoneinfo, tzfile(5), zic(8), TZ, /etc/localtime, /etc/sysconfig/clock

Задание в Cisco IOS часового пояса и даты перехода на дневное время.

Формат времени в Unix

Время в UNIX отсчитывается в секундах (микросекундах) с 1 января 1970 года.

Преобразование из внутреннего формата в человеческий:

Преобразование из человеческого времени во внутреннее:

Преобразование времени изменения файла в "лексикографический" вид (20010905122716):

Преобразование времени изменения файла во внутренний формат:

RFC

Ссылки

@ Карта сайта News Автора!

Bog BOS: Работа со временем

Последние изменения:
2018.08.30: sysadmin: переработана статья про syslog

TopList

Copyright © 1996-2018 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)