18: Intel Edisonの時計と時刻同期の仕組み
よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。本日は軽めのネタにて。
Edisonは内部に時計を持っています。チュートリアルの通りにさっさとWiFi接続をしてしまえば、その時からネットワークを介した時刻同期が行われるためあまり意識せず、現在時刻を扱えます。
しかし、Edisonには内臓のバッテリーは無いため、リアルタイムクロック(RTC)は給電を止めると初期化されてしまいます。それでもまぁ、ネットワークに繋がり次第同期を行うため、問題に気づくことはなかなかありません。
実験
Edisonのファームウェア初期化を行い、時計の状況を見てみましょう。
# reboot ota
この初期化の直後、Edisonはネットワークに繋がってはいません。しかし、電源は継続してONの状態であるため、時刻は正確なものを表示しています。
# date Thu Dec 18 05:31:48 UTC 2014 # hwclock Thu Dec 18 05:31:50 2014 0.000000 seconds
ではこのままネットワークに繋がずに、(init 0コマンド等でOSをシャットダウンしてから)電源供給を止めてみましょう。念のため10秒くらい放置してから、再び給電、起動します。その上で時刻を確認すると…
# date Thu Oct 9 09:23:18 UTC 2014 # hwclock Sat Jan 1 00:02:26 2000 0.000000 seconds
おお、システムクロック(前者)はどうしてこうなった的な時刻になっています。ハードウェアクロック(後者)は、恐らく起動時に2000/01/01 0:00 (UTC)から刻み始めた時刻でしょう。
ここでネットワークに繋いでみます。
# systemctl -l status systemd-timesyncd ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled) Active: active (running) since Thu 2014-10-09 09:22:29 UTC; 2 months 8 days ago Docs: man:systemd-timesyncd.service(8) Main PID: 152 (systemd-timesyn) Status: "Using Time Server 216.239.32.15:123 (time1.google.com)." CGroup: /system.slice/systemd-timesyncd.service └─152 /lib/systemd/systemd-timesyncd Jan 01 00:00:13 edison systemd[1]: Starting Network Time Synchronization... Jan 01 00:00:13 edison systemd-timesyncd[152]: System clock time unset or jumped backwards, restoring from recorded timestamp: Thu 2014-10-09 09:22:29 UTC Oct 09 09:22:29 edison systemd[1]: Started Network Time Synchronization. Oct 09 09:22:32 edison systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:22:32 edison systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:26 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:26 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:28 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:53 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:53 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:54 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:56 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:35:56 edison-miyamoto-x systemd-timesyncd[152]: Network configuration changed, trying to establish connection. Oct 09 09:36:27 edison-miyamoto-x systemd-timesyncd[152]: Using NTP server 216.239.32.15:123 (time1.google.com). Dec 18 05:37:06 edison-miyamoto-x systemd-timesyncd[152]: interval/delta/delay/jitter/drift 32s/+6033639.712s/0.040s/0.000s/+0ppm # date Thu Dec 18 05:37:48 UTC 2014 # hwclock Thu Dec 18 05:37:50 2014 0.000000 seconds
というわけで、systemd-timesyncdというデーモンにより、即座に時刻同期が行われました。ntpdじゃないんですね。
ちなみにsystemd-timesyncdの設定ファイルは/etc/systemd/timesyncd.confで、同期先はGoogleのタイムサーバのようです。
# cat /etc/systemd/timesyncd.conf # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # See timesyncd.conf(5) for details [Time] Servers=time1.google.com time2.google.com time3.google.com time4.google.com
まとめ
Edisonを運用する上で、恐らく時刻同期はおろそかにすることができません。対策として「電源を絶やさない」「電源断後の起動時にネットワーク接続する」「別途電源を搭載したRTCモジュールを装備し、時刻同期を行う」等の対応が必要となると思います。
明日のエントリーはこちらです。