클록 드리프트란?
클록 드리프트는 컴퓨터 시계가 실제 시간보다 점점 빠르거나 느리게 가려는 경향입니다. 모든 컴퓨터에는 타이밍 신호를 생성하는 수정 발진기가 있습니다. 하지만 수정은 불완전하여 온도, 노화, 제조 편차, 전원 변동에 따라 약간씩 다른 속도로 진동합니다. 1ppm(백만분의 1) 드리프트만 해도 보정 없이는 하루에 86밀리초의 오차가 생깁니다.
일반적인 드리프트 속도
- PC 수정 발진기: 10~100ppm — 보정 없이 하루에 1~9초 오차
- 서버급 TCXO: 0.1~1ppm — 훨씬 낫지만 NTP 없이도 드리프트
- GPS 기준 발진기: 0.001ppm 미만 — 나노초 정확도
- 세슘 원자 시계: 0.00001ppm 미만 — 수년간 나노초 정확도
NTP의 드리프트 보정
NTP는 단순히 시계를 맞추는 것이 아니라 드리프트 속도를 지속적으로 측정하고 시계 주파수를 조정합니다:
- 스텝(급격한 조정): 오프셋이 125ms 초과 시 즉각 수정
- 슬루(점진적 조정): 125ms 미만 오프셋의 경우 최대 500ppm으로 시계 속도를 조정해 점진적으로 보정 (100ms 보정에 약 200초 소요)
- 주파수 규율: NTP는 시간이 지나면서 로컬 발진기의 드리프트 속도를 학습해 지속적으로 보상합니다
클록 드리프트 모니터링
# chrony (현대 Linux NTP 클라이언트)
chronyc tracking
# System time: 0.000012340 seconds fast of NTP time
# Frequency: 23.451 ppm slow
가상 머신 드리프트
VM은 드리프트 문제가 특히 심합니다. 호스트 부하가 높을 때 하이퍼바이저가 VM에 CPU 시간을 제때 할당하지 못해 게스트 시계가 크게 뒤처질 수 있습니다. 현대 하이퍼바이저는 게스트 시간을 호스트에 직접 동기화하는 kvm-clock 같은 준가상화 시계 소스를 제공합니다. VM에서는 항상 NTP 또는 systemd-timesyncd를 실행하세요.
컨테이너와 클라우드 시간
Docker 컨테이너는 호스트 커널과 시계를 공유합니다 — 호스트와 다른 시간을 가질 수 없습니다. Kubernetes 파드도 마찬가지입니다. 호스트 OS가 NTP와 동기화되어 있으면 컨테이너는 정확한 시간을 자동으로 상속합니다.