현대 CPU의 동적 주파수 스케일링과 크리스털 발진기의 온도 의존성으로 인해 타이밍 지터가 발생합니다. CPU 온도 변화는 인접한 크리스털 발진기의 주파수를 변동시켜 시스템 클럭의 안정성을 저해합니다. 이 문제 해결을 위해 두 가지 주요 전략이 적용되었습니다. ### 1. CPU 코어 고정 및 실시간 우선순위 설정
-
성능 거버너: 모든 CPU를 최대 주파수로 고정하여 동적 주파수 스케일링을 비활성화합니다.
-
핵심 프로세스 고정: PPS 인터럽트(IRQ 200)와
chronyd프로세스를 CPU 0에 전담 배정하고,chronyd에 실시간 우선순위(SCHED_FIFO 50)를 부여합니다. -
ksoftirqd/0 우선순위: CPU 0의 커널 소프트웨어 인터럽트 핸들러 우선순위를 높여 핵심 타이밍 작업의 응답성을 확보합니다. ### 2. PID 제어 기반 열 안정화 (타임 버너)
-
목표: CPU 온도를 54°C로 일정하게 유지하여 인접한 크리스털 발진기의 열 환경을 안정화합니다.
-
작동 방식: CPU 온도를 측정하고, PID 컨트롤러가 목표 온도 유지를 위한 CPU 부하를 계산합니다. 이 부하는 CPU 1, 2, 3에서 실행되는 워커 프로세스들이 MD5 해싱과 슬립을 반복하며 조절합니다.
-
효과: CPU 온도를 일정하게 유지하여 크리스털 발진기의 주파수 안정성을 극대화하고, 열로 인한 주파수 드리프트를 제거합니다. ### 결과 이 최적화로 주파수 변동성 81%, 주파수 표준 편차 77%, RMS 오프셋 49% 감소를 달성했습니다. 시스템은 GPS PPS 참조로부터 38나노초의 중앙값 RMS 오프셋을 유지하며, 주파수 드리프트는 ±0.14 PPM 범위 내로 안정화되었습니다.