« 「リアルタイム放射線情報」開設 | トップページ | Ubuntu 12.04 Desktopのdnsmasq »

2012年1月21日 (土)

RealTimeIsUniversalの落とし穴にはまった

「RealTimeIsUniversal」はWindowsレジストリの設定項目で、Mac OS XやLinuxとデュアルブートで使う際、コンピューターのバッテリーでバックアップされたハードウエア時計(リアルタイム・クロック、Real Time Clock, RTC; 以降RTCと略)の取り扱いを統一するために必要なものだ。この設定値を「1」にすると、RTCの時刻がUTC(Universal Time, Coordinated:協定世界時)であるとしてWindowsの時刻を設定するようになる。その方法・効用などについて、ここで改めて説明するより、「RealTimeIsUniversal」で検索 していただいた方が宜しかろうと思う。

現在プライベートで主に使っているコンピューターのOSはWindows Vista SP2である。2年ほど前Linuxとデュアルブートにしていた時期があり、その際上記の設定をしていた。Linuxを専用のハードウエアに移してデュアルブートを止めた後も、特に支障が無いと思いそのまま使い続けたのだが、それが大きな間違いだった。

/*******  *******/

RTCは修正しない「仕様」

結論を先に言ってしまおう。「RealTimeIsUniversal=1」に設定すると、Windows上で時刻を修正しても、一切RTCに反映されない。つまり再起動したり、スリープ(サスペンド)や休止状態から復帰する都度、修正前の遅れ/進みのある時刻に戻ってしまう、と言うこと。NTPサーバー(インターネット時刻サーバー)と時刻を同期させて、その結果をRTCに反映するには、Windows以外のOSとデュアルブートになっていないと不可能である。

この2年間、こんな「仕様」になっているとは思いが及ばなかった。全く「想定外」である。
インターネット上で「RealTimeIsUniversal=1」に設定するとデュアルブートに伴う時刻の問題が解決すると言う趣旨の情報は多数見かけるが、WindowsからはRTCの修正ができなくなると言う点に明確に言及したものを以前見た記憶がない。

 

「インターネット時刻サーバーと同期する」にしているのに時計が狂う

以前から「コンピューターの時刻が何かおかしい」と感じていた。
1年半くらい前、NTPサーバーと時刻を同期する間隔をディフォルトの1週間から1時間に変更した。でもまだ何か変だ。
今回ようやく以下のような現象が常に起こっている事が確認できたので、気合を入れて調査してみた。

  • Windows起動直後に時刻が5分遅れている
  • NTPサーバーと同期を「今すぐ更新」すると時刻が合う
  • 再起動すると時刻が5分遅れている

その結果、前述の「仕様」が判明した。
実は皆知っていて、私だけ知らなかったのかもしれないが・・・。

 

確かな情報はケンブリッジにあった

できるだけ正統な情報を求めてMicrosoftのサイトを探したが、見つからなかった。「RealTimeIsUniversal」は、Microsoftが「非公式に公認」している「裏技」だから、らしい。
Microsoftが「非公式に公認」と言うニュアンスを含め、最も確かな情報は英国ケンブリッジでコンピューター・サイエンスの教授をやっているMarkus Kuhnのホームページにあった[1]。そこにたどり着く一歩手前で見つけたMicrosoftの開発者フォーラムのスレッド[2]で引用され、結果的に追認されているようなので、正統な情報と見て間違い無いだろう。Markus Kuhnのホームページの関連部分を要約すると、

  • Windows Vista SP2およびWindows 7で、「RealTimeIsUniversal=1」に伴う問題が解決した
  • それ以前のWindows(XPやVista SP1)では、サスペンドや休止状態から復帰した際、UTC時刻になってしまう問題がある
  • 「RealTimeIsUniversal=1」を設定すると、Windows Vista SP2およびWindows 7であっても、RTCを更新しない
  • RTC更新するには、デュアルブートになっているWindows以外のOSでインターネット時刻サーバーと同期する必要がある

Markus Kuhnが「...this improved support for UTC in the CMOS clock may not immediately be widely documented...」と書いている通り、これら情報全部がまとめて記述されているのは、私が検索結果から辿った限りでは他に見つからなかった。改めて読み返すと、そういう趣旨の内容だったのかと判るものもあったが、予備知識無しにそれを読み取るのは難しいと思う。

 

結局・・・

「RealTimeIsUniversal=1」はデュアルブート環境限定、と言うことらしい。「RealTimeIsUniversal=0」に設定を直して、今は順調である。
オマケとして、問題のコンピュータのRTCの長期的な偏差が約2年間で5分遅れ、つまり約-5ppmだと判った。RTC用に使われる32.768kHzの水晶振動子は許容偏差が±20ppmになっている場合が多いので、まぁそんなものだろう。

 

  1. ^ IBM PC Real Time Clock should run in UT
  2. ^ RealTimeIsUniversal bug in Vista

|

« 「リアルタイム放射線情報」開設 | トップページ | Ubuntu 12.04 Desktopのdnsmasq »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543745/53787810

この記事へのトラックバック一覧です: RealTimeIsUniversalの落とし穴にはまった:

« 「リアルタイム放射線情報」開設 | トップページ | Ubuntu 12.04 Desktopのdnsmasq »