Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

ゲストOSの時刻同期@VMware + adjtimeでの調整

      2013/07/15

Windows上のVMware ServerでゲストOSとしてLinux (Debian etch)を動かしていますが、このLinuxの時刻があり得ないぐらいずれてしまいます。以前はカーネルのbootオプションに

clock=pit

をつけることでなんとか時刻を保持できていたが、ハードを更改するとこのオプションをつけてもずれが激しい。どうもIntelのCeleronからAMDのAthlon X2に変更したのが原因のよう。

Athlon X2のコア同士のTSCのずれがあるらしく、AMDのDual Core Optimizerを入れるとかなり正常に近づき、NTPで同期できるようになった。

 # ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp.xx.xxxxxxx. .GPS.            1 u    - 1024  377   15.990  -59.864  30.723

== 追記 2008/8/17  ==

上記方法で一応ntpで補正できる範囲にはなったが、それでも誤差が大きいらしく、ずっと以下のログが出力されてしまします。

Aug 10 09:45:09 gin ntpd[3554]: time reset -2.491515 s
Aug 10 09:45:09 gin ntpd[3554]: frequency error -512 PPM exceeds tolerance 500 PPM

上記のようなログが20分おきぐらいに出力されるので、私の環境では、20分に2~3秒ぐらいずれていて(マイナスはローカルがntpより早い)、ntpサーバへのポーリングタイムが64秒より長くなりません。なので、adjtimeを使用して調整することにしました。adjtimeはハードウェアクロックの精度が悪い時にその誤差を調整するもので、今回ぐらいの誤差ならば調整できそうです。

まずはapt-get コマンドでコマンドをインストールします。

# apt-get install adjtimex

adjtimeで補正する誤差を計算します。以下のように計測しました。

# /etc/init.d/ntp stop
# ntpdate -b ntp.nc.u-tokyo.ac.jp; sleep 180; ntpdate -b ntp.nc.u-tokyo.ac.jp
17 Aug 01:04:33 ntpdate[19824]: step time server 130.69.251.23 offset -0.176401 sec
17 Aug 01:07:33 ntpdate[19830]: step time server 130.69.251.23 offset -0.419513 sec

ここでは東大のntpサーバを使用しています。最初に時計を合わせて、180秒(3分)待って、さらに合わせます。この時のずれが-0.419513秒(offsetの値)つまり、0.41953秒早く進んでいます。3分で0.42秒、つまり20分で2.8秒のため、上記でかいた20分で2~3秒というログと辻褄があいます。もっと正確に検出したいならば、sleepの値をのばしたり、何回も測定して平均を計算するとよいと思います。

上記結果より、1日当たりの誤差を計算します。私の環境では数回の計測と計算の結果、1日で、-196.19856秒としました。

この値を /etc/default/adjtimex に設定してあげます。このファイルの設定値は秒ではなく、TICKとFREQで設定します。

1TICK=6553600FREQ  で、+1TICK=8.64 秒/日 早く進むらしいので、196.19856秒遅く時計を進ませるためには、-196.19856/8.64=-22.70 となる。TICKは10000で誤差なしということらしいので、小数点を無視して、TICK=10000-23=99977, FREQ=0を設定することにしました。

TICK=99977
FREQ=0

これでadjtimeで、上記設定を有効にします。

# /etc/init.d/adjtimex start

以上で、誤差がかなり少なくなりましたがまだ誤差があったので(そもそもsleep 180が正確でないので)、最終的には”99971″にしました。vmwareは誤差が大きいので、ntpは起動しておきましょう。

# /etc/init.d/ntp start

== 追記 2009/4/26  ==

vmwareの時刻補正機能とNTPを同時に動かしていると時刻修正機能がバッティングしてしまいます。maznはNTPを止めて、 vmwareで補正するように変更しました。ただしホストOSは時刻が正確であることが前提です。

あと、以下のコマンドで最適なtickを計算してくれるようです。

# adjtimex --compare
                                      --- current ---   -- suggested --
cmos time     system-cmos  error_ppm   tick      freq    tick      freq
1240719539      -0.625205
1240719549      -0.634765     -956.0   9990   4000000
1240719559      -0.643681     -891.6   9990   4000000    9999   3446719
1240719569      -0.651886     -820.5   9990   4000000    9998   5345630
1240719579      -0.659008     -712.3   9990   4000000    9997   4803917
1240719589      -0.668480     -947.2   9990   4000000   10000    536868
1240719599      -0.677599     -911.9   9990   4000000    9999   4782655
1240719609      -0.687442     -984.3   9990   4000000   10000   2968118

suggestedのtickとfreqを設定するのがよいとは思いますが、vmware上では安定しないようなので、これらの平均を設定するのがよさそうです。

 - IT技術, サーバ構築 ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
コマンドラインで画像編集@Cygwin

シェルスクリプトで画像を扱いたい場合は、 ImageMagick というソフトが …

no image
Portable Ubuntu for Windows

Portable Ubuntu for Windowsなるものがあるらしいです。 …

no image
携帯動画変換君がqt3gppflatten.exeでエラー

なぜか最近携帯用の着うたを携帯動画変換君で3gpに変換しようとすると、qt3gp …

no image
Git 最低限の設定@CentOS 5

分散型バージョン管理システムgit をCentOS 5上で使ってみた。 まずCe …

no image
adblock plusで正規表現を使う@Firefox

広告削除ツールとして有名なFirefoxアドオンのaddblock plusで正 …

no image
pythonスクリプトをダブルクリックで起動する→拡張子関連づけ詳細設定@Windows 7 with python 2.7

拡張子 .py を持ったファイルをダブルクリックで起動する方法です。 ※Wind …

no image
Ubuntuの起動画面が途中で見えなくなる@Ubuntu 9.04

Ubuntu 9.04を入れてみました。 起動時の画面が途中で真っ暗になったり、 …

no image
パイプでつないだコマンドの戻り値を調べる@bash

シェルスクリプトで、実行したコマンドの戻り値を知る方法は有名ですよね。 以下のよ …

no image
ネットワークの遅延を発生させる@CentOS 5

検証などでネットワーク遅延を発生させたい場合、qdisc を使って簡単に実現でき …

no image
リモートデスクトップでウィンドウ表示と全画面表示を切り替える@Windows 7

最近はクラウドやらなんやらで、Windows 付属のリモートデスクトップ機能を使 …