Вопрос или проблема
GNU make
полагается на временные метки, чтобы определить, была ли изменена зависимость после сборки файла. Если вы внесете изменения во время добавления высокосекундной или корректировки NTP, возможно ли, что make
подумает, что зависимость старше собранного файла, хотя на самом деле это не так? Это приведет к тому, что файл никогда не будет пересобран.
Временные метки UNIX не сохраняются как даты и время, а как монотонные счетчики с начала эпохи UNIX 1970-01-01 00:00:00¹.
Таким образом, эта проблема не возникает.
¹ не совсем точно, были корректировки с высокосекундами… это длинная, довольно неприятная история. Тем не менее, суть в том, что временные метки файлов увеличиваются монотонно с течением времени. Кстати, похоже, что высокосекунд больше никогда не будет.
Ответ или решение
GNU make
— это инструмент управления сборкой, который использует временные метки для отслеживания изменений файлов и зависимостей. Вопрос о том, как ведет себя make
в контексте изменения временных меток во время секунды скачка (Leap Second) или при настройке протокола NTP (Network Time Protocol), представляет собой интересный аспект функционирования программных средств и систем в целом.
Как работает make
GNU make
анализирует временные метки файлов, чтобы определить, произошли ли изменения в зависимостях после последней сборки целевого файла. Настоящая проблема заключается в том, что временные метки могут не всегда правильно отражать порядок изменений из-за особенностей работы с временными данными.
UNIX временные метки
Временные метки, используемые в UNIX, представляют собой количество секунд, прошедших с начала эпохи UNIX, которая началась 1 января 1970 года. Важно отметить, что хотя временные метки обозначают абсолютное время, они хранятся как монотонные счетчики, что означает, что каждое следующее значение временной метки всегда должно быть больше или равно предыдущему, за исключением случаев, когда возникает проблема, связанная с секундой скачка или настройками времени NTP.
Проблема со скачками во времени
Секунды скачка — это коррекционные меры, которые добавляются к системному времени, чтобы синхронизировать атомные часы с вращением Земли. Хотя это и создает некоторые сложности, современные операционные системы и файловые системы умеют обрабатывать такие ситуации, сохраняя монотонность временных меток в контексте обоих сценариев:
-
Секунды скачка: Хотя вторая дополнительная может создать временной разрыв, который не фиксируется как обычная секунда, операционные системы учитывают данное изменение и не позволяют временным меткам файлов уменьшаться. Это значит, что
make
не сможет интерпретировать временную метку зависимостей как "меньшую", чем метка собранного файла. -
Настройка NTP: Протокол NTP предназначен для синхронизации времени на устройствах через сеть. При настройке NTP также учитывается, что временные метки файлов не должны быть менее предыдущих, что сохраняет корректность работы
make
. Хотя время может быть изменено, оно всегда будет корректно проконсультировано с точки зрения хранения и процессинговых операций.
Заключение
В свете вышесказанного, изменения, происходящие во время секунды скачка или при настройках NTP, не приведут к ошибкам в интерпретации времени в GNU make
. Поскольку временные метки файлов сохраняют монотонность, скрипт управления сборкой сможет корректно отслеживать зависимости и изменения. Таким образом, какое бы время ни было установлено, система будет всегда вести себя предсказуемо, что обеспечивает надежность и стабильность CI/CD процессов.
Этот аспект работы make
подчеркивает важность точной синхронизации времени и надлежащего управления временными метками — ключевых компонентов в обеспечении бесперебойной работы современных программных систем.