LoginSignup
11
6

More than 5 years have passed since last update.

chronyがうるう秒をどう処理するのか実験してみました

Posted at

★chronyのうるう秒の処理って?

chronyはCentOS6でもepelリポジトリからインストールする事ができます。
なので、CentOS7以外のサーバでも利用ができます。

chronyは基本的にslewモードで動くので、うるう秒が来ても、1秒ドカンと入らずに徐々に合わせてくれるような気がしてしまいますが、実際どうなるか実験してみました。

結論から言うと、ntpdと同じで1秒ドカンと挿入されました。
実験の詳細は以下です。

★使用ツール

NICTの時空標準研究室のサイトで公開されている、perlで書かれたSNTPを利用して、うるう秒を任意の時間に発生させるサーバを立てます。

Perl版SNTPサーバ うるう秒テスト用バージョン 2005.12.01

上記のツールの使い方については、私の会社のブログに記載したので、ここでは割愛させていただきます。

うるう年ならぬ、うるう秒が来ます

★レッツ実験!

うるう秒を発生させるツールを起動して、そこにchronydで同期させます。
すると、以下のようにLeapフラグが立つのが確認できます。

# chronyc tracking
Reference ID    : xx.xx.xx.xx (hogehoge.local)
Stratum         : 4
Ref time (UTC)  : Tue Jun 30 23:53:42 2015
System time     : 0.000000000 seconds slow of NTP time
Last offset     : +0.000068975 seconds
RMS offset      : 0.000068975 seconds
Frequency       : 0.014 ppm slow
Residual freq   : +33.706 ppm
Skew            : 0.143 ppm
Root delay      : 0.000231 seconds
Root dispersion : 0.001801 seconds
Update interval : 2.0 seconds
Leap status     : Insert second

最終行に、Insert secondの文字がありますので、leapを受信したようです。
実際のleapはうるう秒挿入の24時間前から受信が始まる事になっています。

ここでカーネルにleapが通知されているかを確認すると、

# ntptime
ntp_gettime() returns code 1 (INS)
time d93daae2.0c6ec000 Wed, Jul 1 2015 8:55:14.048, (.048565),
maximum error 10000 us, estimated error 16000000 us, TAI offset 9
ntp_adjtime() returns code 1 (INS)
modes 0x0 (),
offset 0.000 us, frequency -25.574 ppm, interval 1 s,
maximum error 10000 us, estimated error 16000000 us,
status 0x10 (INS),
time constant 7, precision 1.000 us, tolerance 500 ppm,

INSと出てるので、カーネルに通知されている事がわかります。
このままうるう秒まで待ってみて、直前からperlのgettimeofdayの結果を連続で表示するスクリプトを走らせます。
するとこんな結果になりました。

08:59:58.025634
08:59:58.125842
08:59:58.226014
08:59:58.326189
08:59:58.426417
08:59:58.526601
08:59:58.626764
08:59:58.726976
08:59:58.827187
08:59:58.927467
08:59:59.027683 ←一回目の59秒
08:59:59.127878
08:59:59.228071
08:59:59.328297
08:59:59.428535
08:59:59.528753
08:59:59.628938
08:59:59.729136
08:59:59.829441
08:59:59.929633
08:59:59.029812 ←二回目の59秒
08:59:59.130005
08:59:59.230200
08:59:59.330435
08:59:59.430641
08:59:59.530820
08:59:59.630993
08:59:59.731174
08:59:59.831416
08:59:59.931633
09:00:00.031870 ←1秒遅れて9時になった

★実験結果まとめ

以上の結果から分かることは、基本slewモードのchronyでもうるう秒はleapをカーネルに通知してドカンと1秒挿入しちゃいます。
なので、CentOS6系で、バグ持ちカーネルにepelリポジトリからchronyをインストールしている場合は(あまり無いケースかもしれませんが)、ntpdと同様に注意が必要です。

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6