-
Raspberry Pi 기반 NTP 서버의 주파수 변동을 줄이기 위해 CPU 코어 고정과 열 안정화를 결합한 실험 결과 소개
- CPU 온도 변화가 크리스털 오실레이터의 주파수 드리프트를 유발함을 관찰하고, 이를 일정 온도로 유지해 안정화
-
PID 제어 기반 ‘time burner’ 프로세스로 CPU를 54°C에 유지하며, 81% 주파수 변동 감소와 77% 표준편차 감소 달성
-
CPU 0을 chronyd 전용으로 고정하고 나머지 코어로 열 부하를 유지해 NTP 오프셋을 평균 38ns 수준으로 개선
- 정밀 시각 동기화나 과학 장비 등 극한의 정확도가 필요한 환경에서 저비용 고정밀 타이밍 서버 구현 가능성 제시
문제: 온도 변화로 인한 타이밍 불안정
- Raspberry Pi의 동적 주파수 조절(DVFS) 기능이 전력 효율에는 유리하지만, 정밀 시각 동기화에는 불리
- CPU 부하에 따라 클록 주파수가 변하면 시스템 클록의 틱 속도도 변동
-
크리스털 오실레이터의 주파수는 온도에 민감하며, CPU 발열에 따라 수 ppm 단위로 변동
- 낮과 밤의 온도 변화에 따라 주파수 드리프트가 발생
- Grafana 모니터링 결과, CPU 온도 변화에 따라 약 ±1ppm의 주파수 오프셋이 관찰됨
- RMS 오프셋 평균은 86ns 수준으로, 개선 여지 존재
발견: 일정 온도 유지의 효과
- CPU 온도를 일정하게 유지하면 주파수 안정성 향상 가능성 확인
- 해결책은 두 가지로 구성
-
CPU 코어 격리 – chronyd와 PPS 인터럽트를 CPU 0에만 할당
-
열 안정화 – 나머지 코어를 지속적으로 가동해 일정 온도 유지
- 2025년 11월 17일 09:10에 열 안정화 시스템을 활성화하자 주파수 진동이 즉시 감소
해결책 1: CPU 코어 고정 및 실시간 우선순위 설정
-
CPU 0: chronyd와 PPS 인터럽트 전용
-
CPU 1–3: 일반 작업 및 열 부하 유지
- 부팅 시 자동 실행되는 최적화 스크립트 구성
- CPU 주파수 조절 모드를 performance로 고정
-
PPS IRQ(200) 를 CPU 0에 고정
-
chronyd를 실시간 우선순위(SCHED_FIFO 50) 로 설정
-
ksoftirqd/0 프로세스 우선순위 향상
- 스크립트는 /etc/rc.local 또는 systemd 서비스로 등록 가능
해결책 2: PID 제어 기반 열 안정화
- CPU 온도를 일정하게 유지하기 위해 PID 제어 루프를 사용
- 목표 온도: 54°C
-
CPU 1–3에서 3개의 워커 프로세스가 MD5 해시 연산으로 부하 생성
- PID 출력값에 따라 연산 시간과 대기 시간을 조절
-
PID 파라미터
- Kp=0.05, Ki=0.02, Kd=0.0
- 온도 변화가 느리므로 미분항(Kd)은 0
- 결과적으로 CPU 온도는 ±0.2°C 범위 내에서 안정 유지
결과: 주파수 안정성 향상
-
주파수 변동성 81% 감소, 표준편차 77% 감소, RMS 오프셋 49% 감소
- 평균 RMS 오프셋: 85.44ns → 43.54ns
- 중앙값 RMS 오프셋: 80.13ns → 37.93ns
- CPU 온도 54°C 유지 상태에서 ±0.14ppm 범위의 주파수 안정성 확보
- 실내 온도 변동(18.9~22.2°C)에도 불구하고 안정성 유지
설정 절차
- 사전 준비: GPS PPS 기반 NTP 서버 구축 필요
-
필수 패키지 설치
-
linux-cpupower, python3, util-linux
-
부팅 최적화 스크립트 /usr/local/bin/pps-optimize.sh 작성 및 systemd 등록
-
열 제어 스크립트 /usr/local/bin/time_burner.py 작성 및 서비스 등록
-
ExecStart=/usr/bin/python3 /usr/local/bin/time_burner.py -t 54.0 -n 3
-
검증 명령
- CPU governor: performance 확인
- chronyd CPU 고정 및 우선순위 확인
-
chronyc tracking으로 RMS 오프셋 측정 (예: 35ns 수준)
모니터링 및 문제 해결
- 실시간 모니터링: watch -n 1 "chronyc tracking"
- 서비스 상태 확인: sudo systemctl status time-burner.service
- PID 튜닝
- 온도 진동 시 Kp 감소, 안정화 지연 시 Ki 증가
- 목표 온도는 50~60°C 범위에서 조정 가능
- 높은 CPU 사용률(약 90%)은 의도된 동작
트레이드오프
-
전력 소비 증가: 3–4W 지속 소비 (연간 약 15–25kWh)
-
발열 증가: 54°C 유지, 안전 범위 내
-
CPU 자원 점유: 4코어 중 3코어 사용
- NTP 전용 장비에는 적합, 다중 서비스 환경에는 부적합
적용 가능 분야
-
정밀 시각 동기화, 과학 장비, 분산 시스템 연구, 네트워크 테스트 등
- 일반 용도에는 과도하지만, 저비용 고정밀 실험 환경 구축에 유용
향후 개선 방향
-
적응형 PID 튜닝으로 계절별 온도 변화 대응
-
하드웨어 기반 냉각 제어(PWM 팬 등)로 전력 효율 개선
-
OCXO(오븐 제어 크리스털 오실레이터) 적용 시 열 드리프트 제거 가능
결론
- CPU 코어 고정과 PID 제어 열 관리 결합으로 초정밀 NTP 서버 구현
- 주파수 안정성 81% 향상, RMS 오프셋 38ns 달성
- 실험을 통해 열 관리와 실시간 스케줄링의 상관관계를 입증
- 실용성보다는 기술적 탐구와 학습 가치 중심의 프로젝트임