FreeBSD: Virtual PC 2007上で”calcru: runtime went backwards”が表示される

Windows XP でVirtual PC 2007を使い、その上にFreeBSD 9.2テスト環境を構築中です。

OS起動後からしばらく、コンソールに以下のようなメッセージが延々と流れます。(/var/log/messages から転記)

calcru: runtime went backwards from 13835 usec to 9692 usec for pid 456 (dhclient)
calcru: runtime went backwards from 72768 usec to 32845 usec for pid 418 (dhclient)
calcru: runtime went backwards from 1984709 usec to 895833 usec for pid 418 (dhclient)
calcru: runtime went backwards from 19257 usec to 8692 usec for pid 134 (adjkerntz)
calcru: runtime went backwards from 662 usec to 298 usec for pid 6 (pagezero)
calcru: runtime went backwards from 324 usec to 146 usec for pid 5 (vmdaemon)
calcru: runtime went backwards from 7901 usec to 4730 usec for pid 4 (pagedaemon)
calcru: runtime went backwards from 3329 usec to 1502 usec for pid 2 (sctp_iterator)
calcru: runtime went backwards from 103195 usec to 85858 usec for pid 14 (yarrow)
calcru: runtime went backwards from 1922437 usec to 1205796 usec for pid 13 (geom)
calcru: runtime went backwards from 868401 usec to 450152 usec for pid 1 (init)
calcru: runtime went backwards from 33298145 usec to 23310098 usec for pid 1 (init)
calcru: runtime went backwards from 35628 usec to 17186 usec for pid 0 (kernel)

これは、OS kernel がコンピュータの時計巻き戻しを検知したことを示しているメッセージのはずです。

時間は未来に向かって流れますから、時間が戻ることはありません。しかし、コンピューターの場合はOS起動時に内蔵時計が実際の時刻よりも進んでいる場合や遅れている場合がありますので、ntp という時刻合わせのプロトコルを使い世界中にある時刻サーバーのいずれかと時計を同期し時刻調整を行います。

FreeBSD の場合、/etc/rc.conf に ntpd_enable=”YES” と記述しておけば、勝手に時刻を現在時刻に合わせてくれて便利なので、私もそのように設定しています。起動時に時計が遅れている場合は、時計は進めるだけなの物理法則と一致していて問題ありませんが、コンピューター時計が進みすぎている場合戻す必要があります。時刻を合わせること自体は簡単ですが、OSはファイルのタイムスタンプ、プログラム実行開始時刻、課金情報などさまざまな時刻情報を使って動作していますので、進んでいた時刻を一気に戻してマイナス時間が検出されてしまうと既に動いているプログラムに不都合が発生してしまうことがあります。ですからntpdが大幅な時刻巻き戻しの必要を検出した場合、ちょっとずつ時刻を遅らせてゆき時刻を合わせ込みます。ですから起動直後は時刻同機に結構時間が掛かりますし、日付が違うほど異なっている場合はntpdがギブアップしてしまうこともあります。

さて、今回 Virtual PC 2007 で発生したメッセージですが、なんかとっても変。
複数のプロセスがバラバラな時間巻き戻しを検出している感じです。しかも数時間メッセージが出続けていました。

その後は時刻同期が完了したようで上記メッセージは表示されなくなりましたが、/var/log/message を見てみると次のようなntpdの同期メッセージが記録されていました。

Nov 21 20:06:51 pc31 ntpd[1055]: time reset -4.675839 s
Nov 22 00:40:23 pc31 ntpd[1055]: time reset -126.540828 s
Nov 22 01:06:02 pc31 ntpd[1055]: time reset -46.873541 s
Nov 22 07:28:40 pc31 ntpd[1055]: time reset -4.712845 s

どうも、私のPCとVirtual PC 2007の組み合わせでは放置しておくと時刻が進みがちのようです。
しかし、約30分で40秒以上進んでいることもあるし、約6時間で4秒程度のこともあるし、えらくクロックがばらつくようです。

コンソールにログが出力されるのは、OS起動直後だけのようですから、/etc/rc.conf に次の2行を追加し、OS起動時、多数のプロセスが起動する前に時刻合わせを一気に行って回避できないか試す予定です。

ntpdate_enable="YES"
ntpdate_hosts="asia.pool.ntp.org"

現状、コンソールに”calcru: runtime went backwards”というメッセージが大量に表示されるだけで、サーバー機能に影響はないので特に困っているわけではないのですが、過去にメモした覚えがないのでここに記録しておくことにしました。

余談ですが、Virtualbox で FreBSD 8.4 を使っているときは上記メッセージを見かけた記憶はありません。Connectix Virtual PC が Microsoft 製品になってしまい、無料配布になったこともあり、「Windows 以外のOS動作は知ったこっちゃない」 ってことなのかな~。

コメントを残す