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