Для ядра Linux предложен механизм раздельного учёта времени в контейнерах
Для обсуждения в списке рассылки разработчиков ядра Linux предложен набор патчей с реализацией пространства имён для времени. После завершения разработки обсуждаемый механизм позволит раздельно управлять временем в каждом контейнере, давая возможность выставлять своё дату/время, синхронизировать время независимо от базового окружения и корректно возобновлять показания таймеров при восстановления контейнера после заморозки.
В текущем виде ядро Linux предоставляет общие счётчики всех видов времени для контейнеров, что создаёт трудности при миграции контейнеров между узлами и восстановлении после заморозки их состояния. При восстановлении остановленного на какое-то время контейнера важно не столько изменение показания календарного времени (CLOCK_REALTIME), сколько правильность восстановления значений монотонных часов (CLOCK_MONOTONIC) и часов времени после загрузки (CLOCK_BOOTTIME).
Монотонные часы отражают неразрывно увеличивающееся время, прошедшее с момента определённого события в прошлом, т.е. если контейнер был заморожен, то показания монотонных часов должны восстановить значение на момент заморозки, пропустив интервал времени, в котором контейнер находился в состоянии заморозки или сна. Аналогичная ситуация возникает при восстановлении времени с момента загрузки (в современных ядрах Linux значения CLOCK_MONOTONIC и CLOCK_BOOTTIME совпадают).
Суть предложенных изменений в добавлении для каждого пространства имён дополнительных смещений к базовым значениям системных часов. При обращении процесса, находящегося в некорневом пространстве имён, к системным вызовам, связанным с манипуляцией временем, указанные смещения будут суммироваться c базовыми показаниями времени. В представленном на рассмотрение наборе изменений смещение пока реализованы только для таймеров CLOCK_MONOTONIC и CLOCK_BOOTTIME. Для CLOCK_REALTIME детали реализации пока находятся на стадии обсуждения и непонятно, достаточно ли будет смещения, как поступать при смене времени в хост-окружении и есть ли необходимость в корректировке времени, используемом для отражения момента создания или изменения файлов в VFS.
В текущем виде ядро Linux предоставляет общие счётчики всех видов времени для контейнеров, что создаёт трудности при миграции контейнеров между узлами и восстановлении после заморозки их состояния. При восстановлении остановленного на какое-то время контейнера важно не столько изменение показания календарного времени (CLOCK_REALTIME), сколько правильность восстановления значений монотонных часов (CLOCK_MONOTONIC) и часов времени после загрузки (CLOCK_BOOTTIME).
Монотонные часы отражают неразрывно увеличивающееся время, прошедшее с момента определённого события в прошлом, т.е. если контейнер был заморожен, то показания монотонных часов должны восстановить значение на момент заморозки, пропустив интервал времени, в котором контейнер находился в состоянии заморозки или сна. Аналогичная ситуация возникает при восстановлении времени с момента загрузки (в современных ядрах Linux значения CLOCK_MONOTONIC и CLOCK_BOOTTIME совпадают).
Суть предложенных изменений в добавлении для каждого пространства имён дополнительных смещений к базовым значениям системных часов. При обращении процесса, находящегося в некорневом пространстве имён, к системным вызовам, связанным с манипуляцией временем, указанные смещения будут суммироваться c базовыми показаниями времени. В представленном на рассмотрение наборе изменений смещение пока реализованы только для таймеров CLOCK_MONOTONIC и CLOCK_BOOTTIME. Для CLOCK_REALTIME детали реализации пока находятся на стадии обсуждения и непонятно, достаточно ли будет смещения, как поступать при смене времени в хост-окружении и есть ли необходимость в корректировке времени, используемом для отражения момента создания или изменения файлов в VFS.
Ещё новости по теме:
18:20