Red Hat Enterprise Linux 에서 윤초 문제를 해결

Red Hat Enterprise Linux 에서 윤초 문제를 해결

  12 시 17분 2015년 4월 8일 업데이트
 

컨텐츠

  1. 시작
  2. 이후 발생하는 윤초 문제
  3. 시스템 구성
  4. 윤초란?
  5. 윤초 대응
  6. 알려진 문제
  7. 테스트
  8. 관련 도큐먼트

시작

윤초는 Coordinated Universal Time (UTC) 의 시간을 평균 태양시에 맞추기 위해 UTC에 적용되는 1초 조정에 대한 것입니다.
하지만 지구의 자전속도는 기후 또는 지질의 조건에 의해 변화하기 때문에 윤초가 비정기 적으로 UTC에 삽입됩니 다.
이 지식베이스에서는 윤초에 관련한 정보와 Red Hat Enterprise Linux 이 윤초 삽입 문제에 어떻게 대응하는지에 대해 설명합니다.

이후 발생하는 윤초 문제

다음 윤초 삽입은 2015년 6월 30일 23:59:60 (UTC)에 예정되어있습니다.

시스템구성

  • Red Hat Enterprise Linux 버전 4
  • Red Hat Enterprise Linux 버전 5
  • Red Hat Enterprise Linux 버전 6
  • Red Hat Enterprise Linux 버전 7

윤초란?

세계 대부분의 모든 로컬 타임존은 세계 나라들을 몇개로 구분하는 원자시계에서 얻어진 Coordinated Universal Time (UTC) 에
기반하고 있습니다. 지구의 자전은 일정하지 않고 시간 경과와 함께 점점 변화합니다. 그리고 평균속도는 점점 느려집니다.
이것에 의해 일명 윤초를 UTC 시간 스케일에 삽입하여 UTC 시간 프로세스를 실제 지구의 자전에 맞추어 수정합니다.
 .
이렇게 남은 1초는 주로 달과 태양의 인력에 의하여 시간 경과함에 따라 함께 지구가 자전하는 속도는 점점 느려져 발생합니다.
또 자전속도는 지구의 내부조건(핵 또는 맨틀 등)과 외부조건(대기나 바다 등)의 영향도 받습니다. 근래 시각의 대부분은 복수의 나라에 250개 이상의 원자시계에 의해 계측되고 있습니다. 이것은 원자의 에너지 레벨이 변하는 것을 계측합니다.
이 시계를 사용하여 UTC를 계산하고 있지만 이 시핵계측 메카니즘은 지구의 자전과는 함께 운동하지 않기 때문에
그 차이를 “윤초”로 정기적으로 조정할 필요가 있습니다.
또 1820년과 비교하여 1일이 2미리초(2ms) 길어진 것을 참고할 필요가 있습니다. 따라서 지구의 자전속도는 UTC와 점점
맞지않아 갑니다.
.
International Earth Rotation Service (IERS) 는 정상적인 지구의 자전을 계측하고 윤초를 삽입할 타이밍을 결정합니다.
윤초는 그 달의 마지막날이 끝나는 순간(UTC 오전 0시)  6월 또는 12월의 마지막에 삽입합니다.
윤초는 이제 까지는 아래의(*) 중 하나로 삽입되어 왔습니다. 윤초가 예정되어 있는지 IERS가 Bulletin C 에 고지합니다.
현재 Bulletin C는 다음 윤초의 반년전에 공개됩니다.
IERS Bulletin C #30 from July 2005 에서는 2005년 12월 31일 (UTC)가 끝나는 새벽에 윤초가 삽입되는 것을 발표하였습니다.
이것은 1998년 이후 처음 삽입된 윤초입니다. 그 이전 7년간에 개발된 어플리케이션의 대다수가 윤초에 대응하지 못했습니다.
윤초는 세계에서 동시에 삽입되어야 하기 때문에 각지에서 삽입이 이루어지는 타이밍은 UTC에서 계산된 로컬타임 오프셋에 의해
다릅니다. 예를들면 타임존이 UTC +3h 일 경우는 오전 0시 + 3시간으로 오전 3시에 윤초가 삽입됩니다.

UTC 에 윤초가 삽입 될 때 시간추이는 다음과 같습니다.

  2011/12/31 23.59.57
  2011/12/31 23.59.58
  2011/12/31 23.59.59
  2011/12/31 23.59.60 <-- 윤초
  2012-01-01 00.00.00
  2012-01-01 00.00.01
  2012-01-01 00.00.02
TAI 로 시스템 시간이 유지되고 “정상적인” 타임존이 사용되고 있는 경우는 23:59:60 가 기재되어 있을 가능성이 있습니다만 UTC의
Unix 탑재에는 23:59:60 가 존재하지 않기 때문에 Linux의 커널에서는 0:00 UTC 후의 최초 시간 갱신시에 1초를 되돌리는 것으로
윤초를 삽입합니다. 로컬 타임에는 타임존의 로프셋에 의해 삽입되는 타이밍이 다릅니다. 예로 UTC+3인 경우는 다음과 같습니다.
2012-01-01  02:58:00.000
2012-01-01  02:58:00.500
2012-01-01  02:59:00.000
2012-01-01  02:59:00.500
2012-01-01  03:00:00.0xx <-- 윤초
2012-01-01  02:59:00.0xx
2012-01-01  02:59:00.500
2012-01-01  03:00:00.000
2012-01-01  03:00:00.500
윤초는 통상시의 비연속성이 됩니다. 그 시간은 통상의 단조증가 추이와는 달리 1초 스텝프(stepped)됩 니다. 윤초가 삽입된 순간과
그 1초후의 타임스탬프는 다음과 같습니다.
  2011/12/31 23.59.60 <-- 윤초
  2012-01-01 00.00.00

윤초의 일시는 표준화할 수 있습니다.
60초는 1분이 되고 분 단위를 59에서 60으로 변경합니다.
60분은 1시간이 되고 시간의 단위를 23에서 24로 합니다.
24시간은 1일이 되고 일의 단위를 증가하여 똑같이 계속합니다.
마지막으로 이 2줄의 시간을 맞출것 인가 이 연속하는 2초를 같은타임 스탬프로합니다.

여러 시간 전달 서비스는 IERS에 의해 초 삽입이 결정되면 윤초의 고지를 전달합니다. 예를들면 독일의 장파 트랜스미터 DCF77와
위성 네비게이션 시스템 GPS 등이 그런 서비스입니다.  따라서 이 것의 시스템에서 보내진 신호를 디코드할 리시버는
윤초의 통지도 디코드합니다. 이것들의 리시버에서 시간을 읽는 어플리케이션은 이 정보가 적용된 프로토콜에 포함되어 있으면
윤초의 통지도 판단 가능하게 됩니다.  (예: time string transmitted by the receiver)
시간 코드의 리시버는 어플리케이션에 윤초의 통지만을 전달하고 그 기간, 시간을 정확히 기록합니다.
윤초를 정확히 처리하는 것은 어플리케이션과 OS입니다.
(*):북미에서 2012년 8월 31일 오전 0시 (UTC)에 일부의 NTP (Network Time Protocol) 서버가 윤초 통지를 잘못 발행했었습니다.
2개의 stratum 1 서버(truechimer.cites.illinois.edu 와 time-b.nist.gov)가 윤초 통지를 잘못하여 발신한 것을 찾아냈습니다.
그 2개의 서버중 하나의 단계 구조안에 속하는 모든 하위 stratum (stratum 2,3,4….) 의 NTP 서버는 윤초를 잘못 통지한 것을
생각할 필요가 있습니다. 이것의 서버를 사용하는 NTP 클라이언트는 커널의 윤초 인디케이터 플래그를 설정합니다.
이것은 시스템이 재기동할 때까지 제거되지 않습니다.

윤초 대응

이 문제 처리방법은 사용하고 있는 Red Hat Enterprise Linux 시스템이 NTP (Network Time Protocol) 나
PTP (Precision Time Protocol) 데몬을 사용하여 시간을 동기화시키고 있는지에 따라 다릅니다.

NTP가 동작하고 있는 시스템

NTP 서버 사이에 시간을 동기시키는 NTP 데몬을 기동하고 있는 경우 Red Hat Enterprise Linux 의 모든 버전은 자동으로 삽입되는
윤초의 보정에 대응할 필요가 있습니다. 윤초가 발생하기 전 마지막 1일에 NTP서버는 클라이언트에 “윤초가 발생했 다” 는 것을
통지합니다. 이것에 의해 23:59:59 (UTC) 가 되면  Linux 커널은 여분의 초를 추가합니다. 아래는 2008년부터 2009년에 걸쳐
실시된 윤초 삽입시에 NTP 클라이언트로써 동작한  Red Hat Enterprise Linux상의 시간 추이입니다.
 2008-12-31 23:59:59:052549000 UTC    <-- 1st occurrence of the 60th second
2008-12-31 23:59:59:259988000 UTC
2008-12-31 23:59:59:465214000 UTC
2008-12-31 23:59:59:669629000 UTC
2008-12-31 23:59:59:873936000 UTC
2008-12-31 23:59:59:079184000 UTC    <-- 2nd occurrence of the 60th second
2008-12-31 23:59:59:284011000 UTC
2008-12-31 23:59:59:488648000 UTC
2008-12-31 23:59:59:692691000 UTC
2008-12-31 23:59:59:896577000 UTC
2009-01-01 00:00:00:052378000 UTC 

윤초가 발생하면 커널은 시스템로그에 메시지를 출력합니다.

PTP 가 동작하고 있는 시스템

PTP 로 교환된 타임스탬프는 통상 TAI (International Atomic Time) 로 윤초가 포함되어 있지않습니다. 하지만 ptp4l 와 phc2sys 는
시스템 로그가 UTC로 실행되고 있는 동안 커널 플래그를 설정하여 윤초를 삽입합니다. 커널은 윤초를 평소대로 삽입합니다.

NTP 또는  PTP 를 실행하지 않는 시스템

Note: Red Hat does not recommend running without a source of time synchronization enabled as there is no guarantee that systems will remain in sync with each other. Time drift may occur on each system as determined by its clock source. The decision to run without NTP/PTP/Chrony will need to be made on a per-system or per-cluster basis with the understanding that time drift may occur.
(참고 : 시스템이 서로 동기화를 유지한다는 보장이 없기 때문에 Red Hat은 시간 동기화의 소스를 enabled 하지않고 사용 하는 것을
추천하지 않습니다. 그 클럭 소스에 의해 결정되는 시간 드리프트는 각 시스템에서 발생할 수 있습니다. NTP / PTP / Chrony없이
사용하는 결정은 시스템 별 또는 클러스터 단위로 시간 편차가 발생할 수 있다는 이해도가 필요할 것이다.)
기본적으로는 시각관리에 NTP 또는 PTP시스템을 사용하지 않는 Linux 시스템에는 윤초에 의한 시각 보정은 실시되지 않습니다.
즉 윤초가 발생하면 이 시스템에는 1초, 시각이 어긋나게 됩니다. 윤초의 발생 후 수동으로 시각을 맞출 필요가 있습니다.
tzdata 패키지를 이용가능한 최신버전으로 업데이트하고 /usr/share/zoneinfo/right 디렉토리에서  /etc/localtime 에
적절한 파일을 복사하고 시간을 현재에 맞는 로컬시간으로 리셋하면 윤초를 수정한 시간을 보고하도록 설정됩니다./usr/share/zoneinfo/right 의 파일에는  1970-01-01 00:00:00 UTC에 Epoch 가 시작되고 나서 발생한 모든 윤초를 수정한
로컬 시간 정보가 포함되어 있습니다. /usr/share/zoneinfo 아래에 없는 그외 다른 타임존 파일에는 윤초의 수정은 추가되지 않습니다. 2008년에 윤초가 추가된 후 Epoch에서 24회 윤초가 추가되었습니다.

Any application that expects the time to be in UTC will have issues if a right/* timezone is used.
(어떤 어플리케이션은 항상 UTC를 사용될 것을 기대한다. 이것은 만약 right/*의 타임존을 사용하면 문제가 될것이다.)

예를들면 America/Los_Angeles (US Pacific)의 타임 존을 사용하고 있는 경우는 아래의 커맨드를 사용하여 Pacific Time 으로
시간을 리셋하면 윤초를 수정한 시각을 보고하도록 시스템을 재설정가능 합니다.
cp /usr/share/zoneinfo/right/America/Los_Angeles /etc/localtime 
After /etc/localtime has been changed glibc will reload this file automatically; in addition, note that adjusting timezones does not change the system time, only the conversion from the system time to local time that happens in applications via glibc functions, such as localtime()ctime(), etc. A system restart is not required after this update; however, if any applications are caching results from these functions then these applications may need to be restarted after tzdata has been updated.
(이후 /etc/localtime 이 변경되면 glibc는 자동으로 이 파일을 리로드한다. 게다가 시스템 존을 변경하면 시스템 타임은
변경되지 않는다. 어플리케이션이 Glibc 함수 localtime(), ctime() 등을 경유할 경우 시스템시간을 로컬시간으로 바꿔 줄 뿐이다.
이 업데이트 후 시스템을 재시작할 필요가 없다. 하지만 만약 어떤 어플리케이션이 저들 함수 결과를 캐싱한다면
그 어플리케이션은 tzdata가 업데이트 된 후 리스타트가 필요할 것이다. )
** 일본어 문서와 비교하여 추가된 사항은 영어원문이 들어가있다.

알려진 문제

에라타 RHEA-2012-0356 를 적용하면 RHEL3,4,5,6 에서 2012년 6월말의 윤초 삽입이 NTP에 접속하지 않은 시스템에서도
적절히 인식되도록 보증하고 있습니다.
RHEL 4
  1. Red Hat Enterprise Linux 4 에서는 이 메시지가 표시되면 커널이 크래쉬할 가능성이 있습니다. 이 문제에 대해서는
    System hangs on printing the leap second insertion message 를 참조하십시오.
  2. ntpd 와 동기화하지 않은 시스템에 윤초가 삽입되도록 tzdata-2015a-1.el4 이후로 인스톨하십시오. 이 패키지는 RHEA-2015:0141-1 에서 제공하고 있습니다.
RHEL 5
  1. Red Hat Enterprise Linux 5에서는 이 메시지가 표시되면 커널이 크래쉬할 가능성이 있습니다.
    System hangs on printing the leap second insertion message 를 참조하십시오.
  2. ntpd 와 동기화 하지않는 시스템에 윤초가 삽입되도록 tzdata-2015a-1.el5 이후로 인스톨하십시오. 이 패키지는 RHEA-2015:0141-1 에서 제공하고있습니다.
RHEL 6
  1. 윤초의 삽입 통지를 받으면 시스템이 행업될 가능성이 있습니다. 이 문제에 대해서는 Systems hang due to leap-second livelock 을 참조하십시오.
  2. 윤초가 추가되면 futex 가 무거운 어플리케이션이 CPU를 대량 소비합니다.  이 문제에 대해서는 Why is there high CPU usage after inserting the leap second? 를 참조하십시오.
  3. ntpd 와 동기화 하지 않은 시스템에 윤초가 삽입되도록 tzdata-2015a-1.el6 이후로 인스톨 하십시오. 이 패키지는
    RHEA-2015:0141-1 에서 제공하고 있습니다.
  4. 윤초 삽입시에 TAI 오프셋이 정상적으로 업데이트 되지 않습니다. 이 문제에 대해서는 TAI offset is incorrect during the leap second 를 참조하십시오.
  5. ntp 에서 -x 를 사용하여도 윤초의 삽입이 발생하지 않는 경우에 순간적인 시간 변경이 됩니다. 이 문제에 대해서는 Does Red Hat plan to release xleap.patch with ntp? 을 참조하십시오.
RHEL 7
  1. ntpd 와 동기화 하지않은 시스템에 윤초가 삽입되도록 tzdata-2015a-1.el7  이후로 인스톨 하여 주십시오. 이 패키지는
    RHEA-2015:0141-1 에서 제공하고 잇습니다.
  2. ntp 에서 -x 를 사용하여도 윤초의 삽입이 발생하지 않는 경우에 순간적인 시간 변경이 됩니다. 이 문제에 대해서는
    Does Red Hat plan to release xleap.patch with ntp? 을 참조하십시오.

주의:PPC 와 IA64 아키텍처를 사용하는 경우는 Systems not running NTP or PTP 의 방법을 선택하는 것을 추천합니다.

테스트

Red Hat 은 이 문제에 대해 계속 테스트를 실시하고 있습니다. 실시된 테스트에 관한 정보가 있으면 지식베이스는 업데이트 됩니다.
이 테스트를 실행하기 위한 툴이 Access Lab 에서 제공되고 있습니다.
이용하시려면  Leap Second Vulnerability Detector 로 이동하십시오.
또한 고객님 스스로 빌드하거나 환경을 테스트하는 것을 추천합니다. 샘플 프로그램을 포함한 테스트 방법에 대해서는
Are we susceptible to a leap second event? 를 참조하십시오.

관련 문서

추가로 윤초에 관한 정보와, 그것들이 어떻게 Linux와 NTP에서 처리되는지에 대해서는 아래의 링크를 참조하십시오.

Leave a Reply

will not be published