2015년 4월 6일 월요일

네트워크상의 기기간 시간 동기화 (NTP & PTP)

여러 임베디드 시스템이 네트워크로 연결되어 있을때 기기간 시간 동기화가 필요한 경우가 많다. 시간 동기화에서 가장 먼저 고려되는 방법은 ntp를 사용하는 것인데 아마 여러분의 PC에서 동작하고 있는 OS도 ntp를 사용하여 현재 시간을 인터넷상의 타임 서버와 동기화 하고 있을 것이다.

개발 하고자 하는 장치가 인터넷 프로토콜을 지원한다면 ntp를 사용하여 시간을 맞출 수 있으며 인터넷 연결 여부와 상관 없이 동일 네트워크안에서 기기간 시간 동기도 가능하다.  여러분이 기기간 시간 동기에 ntp를 사용하고자 한다면 아래 두가지를 고려해야 한다. 

1. 동기화 시간 : 일반적으로 10분 이상이 지나야 동기화가 완료된다. 처음 ntp를 사용하는 사람들이 시간 동기가 되지 않는다고 어려워하는 대부분의 이유가 이 시간이 필요한 것을 모르기 때문에다. burst/iburst옵션을 사용하여 이 시간을 단축할 수 있다. (십분 이상에서 수분이내로)

2. 동기화 정확도 : ntp는 보통 ms단위의 정확성을 가지는 것으로 알려져 있다. 더 높은 정확성이 필요하다면 다른 방법을 고려해야 한다.  ( 아래 설명하는 ptp를 사용할 경우 HW 지원여부에  따라 us에서 ns까지 정확도를 높일 수 있다.) 

기기간 시간 동기를 위해서 Time Master와 Time Slave 장치를 정한다. RTC가 있는 장치 중 가장  정확한 시간을 가지는 장치를 Time Master로 정하면 된다. ntp의 Time Master의 설정 방법은 아래와 같다. 

ntp.conf   (/etc or /etc/ntp)
server 127.127.1.1 prefer burst iburst
fudge 127.127.1.1 stratum 10

- ntp.conf파일의 server 주소를 127.127.x.x 로 설정할 경우 자신을 Time Master로 인식한다. 
- burst/iburst 옵션을 사용하면 time sync 시간을 많이 단축할 수 있다. 

Time Master서 위와 같은 옵션으로 ntpd (daemon)을 실행시키고 Time Slave에서 "ntpdate server_ip"를 실행시키면 수분내에 time sync. 가 이루어진다.  Time Slave에서 지속적으로 Time Master와 시간을 동기화해야 한다면 ntpd (daemon)을 실행시킨다. Time Slave와 Master에 사용된 오실레이터나 크리스털의 클럭이 서로 미세하게 다를 수 밖에 없으므로(부품 공차) 시간이 지나면 clock drift등으로 인해서 기기간 시간오차가 점정 커지게 된다. 장시간 사용되는 네트워크라면 (Time Slaver 에서)ntpd를 실행하여 지속적으로 오차를 보정해주는 것이 좋다.(당연히 Time Master에는 ntpd가 항상 실행되어 있어야 한다) 

소규모 네트워크에서 동기화가 필요한 경우 수분~십분 이상 시간이 걸리는 ntp는 불편하기 짝이 없다. 네트워크상 장치들이 거의 동시에 부팅이 되고 동작을 시작해야 하는 경우 사용자를 몇분씩 기다리게 할 수는 없기 때문이다. 이런 경우 ptp를 사용하면 된다. ptp는 실행 즉시 동기화가 이루어지고 HW적으로 지원하는 경우 us단위 이상의 정확성을 가진다. (HW적으로 ptp를 지원하는 경우 ethernet 장치가 패킷에  time stamp를 넣어주는 기능을 가지고 있다. HW적으로 이를 지원하지 않을 경우 SW적으로 해당 값을 넣어주게 되는데, 실제로 값을 넣어주는 시간과 패킷이 전송되는 시간이 차이가 나기 때문에 HW적으로 지원하는 경우보다 시간에 오차가 발생하게 된다.)

사용 방법은 아래와 같다.

1. Time Master에 ptpd를 master 모드로실행
# ptpd -W

2. Time Slave 에 ptpd를client모드로실행
# ptpd –g &

사실 ntp대신 ptp를 사용하는 보다 일반적인 목적은 동기화 시간이 아닌, 정확도 이다. ntp는 ms단위까지 동기화가 가능한 반면 ptp는 HW지원 여부 및 HW에서 지원하는 정확도에 따라 us에서 ns까지도 정확도를 높일 수 있다.

참고로  sync되는과정을확인하시고싶으면아래와같이 client를실행시키시면다.
# ptpd -g –c –D &
ptpd의 몇가지 옵션 설명:
-W : run as a master without NTP
-c : console mode
-g: slave mode only
-b en0: 어떤network interface를 사용할지 지정
-h: end to end mode,  HW적으로고정밀 clock을지원하지않는 switch사용시에는end to end모드로만동작.
-D : display status in .csv format
-d: display status

ptpd는 아래에서 구할 수 있다.
http://ptpd.sourceforge.net

ptpd 관련 참고 사이트
http://grepjuice.com/tag/ubuntu/