Time Namespace youki-dev/youki #3265by CheatCodeSam

Time Namespace

CLOCK_MONOTONICCLOCK_BOOTTIME にオフセットを設定できる namespace。

$ man 7 time_namespaces
Clock何を表すメモ
CLOCK_MONOTONIC単調増加の経過時間
起動後の経過
手動の時刻変更でジャンプしない
CLOCK_BOOTTIME単調増加の経過時間
起動後の経過 + suspend時間
手動の時刻変更でジャンプしない
suspend中もカウントする
CLOCK_REALTIME壁時計手動の時刻変更やNTP調整でジャンプし得る

ユースケース

  • 異なる時間設定でのテスト
    • タイムアウトを待つテストで時間短縮に使える
  • CRIU でチェックポイントして他のノードでリストア
    • 未来時刻でアプリケーションが再開するとタイムアウトが起きる可能性がある
    • 参考: cri-o#8033

以前にも Virtual time という類似機能の提案があった。

使い方

OCI runtime-spec の timeOffsets でコンテナの時間オフセットを指定できる。

/proc/<pid>/timens_offsets へ初期の time namespace からのオフセットを書き込む。

Note
子プロセスから適用されるタイプ
Warning
CLOCK_REALTIME は変更されない