Начиная с версии ядра Linux 3.10, функция clock_gettime()
теперь принимает CLOCK_TAI
.
Подробного описания этих часов найти не удалось. Какова его эпоха?
EDIT 1: только что сравнил вывод CLOCK_REALTIME и CLOCK_TAI в моей ОС Linux 3.19, и он возвращает точно такое же значение (1442582497)!? CLOCK_REALTIME уменьшается в секундах координации?
EDIT 2: Согласно эта статья, разница между CLOCK_TAI и (плохо названным) CLOCK_REALTIME должна составлять количество високосных секунд.
РЕДАКТИРОВАНИЕ 3. Причина, по которой CLOCK_TAI
и CLOCK_REALTIME
совпадают, объясняется в статье, на которую есть ссылка в Редактировании 2. Акцент сделан мной.
Для приложений, где можно было бы работать со временем TAI вместо UTC, ядро предоставляет специальные часы CLOCK_TAI, которые включают секунды координации и не нуждаются в исправлении после секунды координации, полностью избегая проблемы с обратным скачком времени. . Он реализован как часы, работающие с фиксированным интегральным смещением по отношению к CLOCK_REALTIME, которое атомарно увеличивается на 1, когда часы CLOCK_REALTIME переводятся назад на дополнительную секунду. Он был представлен в ядре Linux версии 3.10 и доступен с ядрами, поставляемыми в RHEL7. Обратите внимание, что смещение от CLOCK_REALTIME инициализируется при загрузке до нуля, и ни ntpd, ни chronyd не устанавливают для него правильное значение по умолчанию (в настоящее время 35). Переключение на CLOCK_TAI в приложениях, конечно, потребует изменений в код и, возможно, также все протоколы, использующие представление времени Unix.
Редактировать 4: Этот ответ, полученный на Ask Ubuntu, все проясняет.
CLOCK_MONOTONIC
. - person Colonel Thirty Two   schedule 18.09.2015