온라인 상태에서 Linux 시스템을 NTP와 동기화하고 오프라인 상태에서 예측 가능한 RTC와 동기화하는 기존 메커니즘이 있습니까?
센서 데이터를 수집하고 타임 스탬프하는 임베디드 Linux 시스템 인 원격 "수집기"를 운영합니다. 우리는 5 초 미만으로 합리적으로 작게 유지하기 위해 시계 오류가 필요합니다. 일반적으로 NTP를 사용하여 시계를 동기화하며 시스템이 온라인 상태 인 한 정상적으로 작동합니다.
문제는 일부 수집기에는 매우 나쁜 업 링크가있어 몇 시간, 며칠 또는 몇 주 동안 다운 될 수 있다는 것입니다. 로컬 데이터 수집을 멈추지는 않지만 NTP가 없으면 Linux 시스템 시계가 심하게 예측할 수 없습니다.
하드웨어의 RTC도 많은 속도를 유지하지만 일정한 속도로 유지됩니다. RTC 드리프트 속도는 보드마다 다르지만 보드마다 일정하며 측정 할 수 있습니다.
우리에게 필요한 것은 다음을 수행하는 메커니즘이라고 생각합니다.
- 배포 전에 보드의 RTC 드리프트 속도 측정
- 가능하면 NTP를 통해 지속적으로 / 정기적으로 시스템 시간 조정
- NTP를 사용할 수없는 경우 RTC에서 정기적으로 시스템 시간을 조정하십시오. 알려진 RTC 드리프트 속도를 고려하십시오.
- 선택 사항 : 온라인 상태에서 진행중인 RTC 드리프트 속도 측정 및 기록 (1)
'메커니즘'이란 두 가지 상태 "온라인"과 "오프라인"을 모두 처리 할 수있는 잘 관리되고 문서화 된 소프트웨어 및 / 또는 구성 요소를 의미하며, 시스템 클록이 올바른 시간 소스 (ntp vs. rtc), 상태 변화 감지 및 RTC 드리프트 수정. 특별한 ntpd 구성 / 플러그인, 별도의 데몬, 크론 작업 또는 기타로 구현되는지 여부는 중요하지 않습니다.
나는 Chrony 를 보았지만 , 문서 에 따르면 시스템 클럭 의 드리프트를 예측하려고 시도 하는데, 우리의 경우 RTC보다 훨씬 더 예측할 수 없다. Chrony는 재부팅 동안 시간을 유지하기 위해서만 RTC를 사용하는 것 같습니다.
(1) 참고 ntpd는 커널의 '11 분 모드 '를 활성화합니다 (11 분마다 시스템 시계에서 rtc 업데이트). 현재 커널과 ntpd에는 11 분 모드를 방지 할 방법이없는 것 같습니다. 따라서 ntpd가 실행되는 동안 rtc 드리프트 정보가 손실됩니다 (thx @billthor).
업데이트 / 편집 :
- USB 또는 직렬을 통해 MSF 또는 DCF77 신호 (유럽 기반)에 외부 라디오 시계를 추가하는 것을 고려하고 있습니다. 그러나 우리는 오히려 하드웨어를 간결하게 유지합니다.
- 우리의 수집가는 종종 지하에 실내에 위치하고 있습니다. 따라서 GPS 시계를 추가해도 도움이되지 않습니다.
- 데비안 7을 사용합니다. util-linux-2.20.1의 hwclock, ntpdate-4.2.6p5, ntpd의 ntp-4.2.6.p5, chrony-1.24 (잠재적으로 1.30)를 의미합니다.
- 주 우리의 문제는 우리가 사용하는 방법을 알고하지 않는 것이 아님을
ntpdate(8)
,hwclock(8)
,date(1)
, 등의 추가 섹션을 참조하십시오 이탤릭체 내가 '메커니즘'으로 무엇을 의미하는지에 대한합니다. - '11 분 모드 '에 대한 각주 추가
- 다음 은 오프라인 동기화 및 RTC 드리프트에 대한 매우 흥미로운 토론입니다.