Поддержка високосных секунд в FreeBSD

Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.


1. Введение

Секунда координации (високосная секунда) — это односекундная корректировка, вносимая в определённые моменты года в UTC для синхронизации атомных шкал времени с вариациями вращения Земли. В этой статье описано, как FreeBSD взаимодействует с секундами координации.

На момент написания следующая високосная секунда будет добавлена 2015-Jun-30 23:59:60 UTC. Эта високосная секунда выпадет на рабочий день для Северной и Южной Америки, а также для региона Азии/Тихоокеанского региона.

Секунды координации объявляются IERS в Бюллетене C.

Стандартное поведение високосной секунды описано в RFC 7164. Также см. time2posix(3).

2. Обработка високосных секунд по умолчанию в FreeBSD

Самый простой способ обработки високосных секунд — использование правил времени POSIX, которые FreeBSD использует по умолчанию, в сочетании с NTP. Когда ntpd(8) работает и время синхронизировано с вышестоящими серверами NTP, которые корректно обрабатывают високосные секунды, високосная секунда приведёт к автоматическому повтору последней секунды дня в системном времени. Другие корректировки не требуются.

Если вышестоящие серверы NTP не обрабатывают високосные секунды корректно, ntpd(8) изменит время на одну секунду после того, как ошибочный вышестоящий сервер заметит это и изменит своё время.

Если NTP не используется, после високосной секунды потребуется ручная корректировка системных часов.

3. Предупреждения

Високосные секунды добавляются одновременно по всему миру: в полночь по UTC. В Японии это середина утра, в Тихоокеанском регионе — середина дня, в Америке — поздний вечер, а в Европе — ночь.

Мы полагаем и ожидаем, что FreeBSD, при условии предоставления корректного и стабильного сервиса NTP, будет работать как задумано во время этой секунды координации, как это происходило во время предыдущих.

Однако мы предупреждаем, что практически ни одно приложение никогда не запрашивало у ядра информацию о високосных секундах. Наш опыт показывает, что, как и задумано, високосные секунды по сути являются повторением секунды, предшествующей високосной, и это становится неожиданностью для большинства программистов.

Другие операционные системы и компьютеры могут обрабатывать високосную секунду иначе, чем FreeBSD, а системы без корректной и стабильной службы NTP вообще не будут знать о високосных секундах.

Нередко компьютеры выходят из строя из-за високосных секунд, и опыт показал, что значительная часть всех публичных NTP-серверов может обрабатывать и объявлять високосную секунду неправильно.

Пожалуйста, постарайтесь убедиться, что из-за секунды координации не произойдет ничего ужасного.

4. Тестирование

Возможно проверить, будет ли использована секунда координации. Из-за особенностей NTP, проверка может работать до 24 часов до введения секунды координации. Некоторые крупные источники эталонных часов объявляют о секундах координации всего за час до события. Запрос к демону NTP:

% ntpq -c 'rv 0 leap'

Вывод, включающий leap_add_sec, указывает на корректную поддержку секунды координации. До 24 часов перед наступлением секунды координации или после её прохождения будет отображаться leap_none.

5. Заключение

На практике секунды координации обычно не представляют проблемы в FreeBSD. Мы надеемся, что этот обзор поможет прояснить, чего ожидать и как сделать обработку секунды координации более гладкой.


Изменено: 22 сентября 2025 г. by Vladlen Popolitov