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
ネットワークの遅延を発生させる@CentOS 5

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

no image
gmailでフィルタリング転送した時メールは受信トレイに残るの?

gmailの基本転送機能は全てのメールをあるアドレスに転送しますが、フィルタを用 …

no image
VirtualBox 5で、USBメモリ全体をディスクとして使う@Windows 10

管理者権限でWindowsのコマンドプロンプトを起動し、以下のようにUSBメモリ …

no image
リモートデスクトップでPC再起動 or シャットダウン@Windows 7

Windows リモートデスクトップ接続では、通常のスタートメニューから再起動や …

no image
シェルで2進数、8進数、10進数、16進数変換@bash

シェルスクリプトで2進数や16進数を扱う方法です。 まずは、bc コマンドを使っ …

no image
Windowsのtelnetコマンドの文字コード@Windows XP

限られた環境で、ターミナルのソフトにWindowsのtelnetしかない場合、t …

no image
スペースの入ったディレクトリ名やファイル名をスクリプトで処理する@Linux

findコマンドでスペース入ったディレクトリやファイルを検索し、その結果をfor …

no image
WordPressのPukiwikiプラグイン導入

以前pukiwikiを使っていたので便利かなと思い入れてみた。例えば <p …

no image
vimでBackSpaceが効かない@Cygwin

Cgywin上で、BackSpace が効かず、文字が消せない場合は、~/.vi …

no image
gitで現在の変更を一時的に退避して他の修正をする

ソースコードにある目的をもって機能追加している際、機能とは関係ないバグを見つける …