アカウント名:
パスワード:
commits List 2005-04 [dragonflybsd.org]:
OpenNTPD はそもそも、あんまり精密に時刻を同期させるような仕組みではない。 Joerg が頑張ってハックしてくれているけど、まだまだ大変みたいだ。 その労を念頭に置きながら書いてみたら、一日で少なくとも xntpd と同じ程度 (つまり OpenNTPD よりだいぶまし) なアルゴリズムができた。 まだいろいろあるけど、最も厄介なところはできたよ。 時刻を同期させるだけだから単純かと思うけど、面倒なんだね。
OpenNTPD は、はっきり言って使えないね。バグとかじゃなくて、 アルゴリズムが悪い。ただ適当に時刻を修正するだけであって、 統計を使ってドリフトを埋めたりしていないんだ。これじゃあ、 もともと誤差が少ない状況でしか動作しない。 dntpd なら、ノイズを除いてきちんと計算した データから、しっかりオフセットとドリフトを出して修正するぜ。
adjusting clock frequency by xxxx to xxxxppm
なお、 ntpd だけじゃなくて kernel も最新じゃないとダメです。 adjfreq というシステムコールが必要なんですね。
man adjfreq してみたら
HISTORY The adjfreq() function call first appeared in OpenBSD 4.0.
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
dntpd (スコア:5, 参考になる)
commits List 2005-04 [dragonflybsd.org]:
users List 2005-11 [dragonflybsd.org]: みたいな感じかな?Re:dntpd (スコア:5, 参考になる)
OpenNTPD は簡易なもの [openntpd.org]として設計されています。
あまり精密さを求めたり本格的な NTP サーバにするというのではなく、
「面倒だからだれも NTP を使わない」という状況を正すための、
そしてそれだけのためのものなのです。
Re:dntpd (スコア:2, おもしろおかしい)
最近、「面倒だからだれも NTP を使わない」
というサーバにお目にかかりました。
10 分違っていて log の解析時に思考が停止しました。
時間精度が低いと、ロードバランサー配下のサーバ log 調査時、労力が高くなります。
# ntpd が動いてなかったのは問題外ですが
OpenNTPD が簡易なものであり、
dntpd がちゃんとした物であるなら
secure であると診断してもらって
OpenBSD に取り込んで欲しいです。
# もちろん Free, Net にも。
# xntpd のフォローは無いんですかね?
Re:dntpd (スコア:2, 参考になる)
使って、FreeBSDでコンパイルできることは確認しましたが
sysctlにkern.basetimeが無いので実行は出来ないです。
そこで、これとSYSCTLマクロ宣言や扱いが似ている
kern.boottimeを使うようにしてお茶を濁すと実行は
できますが、果たしてこれで良いのか...
(FreeBSDのkern.boottimeが入り組んでて訳わからんもんで)
http://www.dragonflybsd.org/cgi-bin/cvsweb.cgi/src/usr.sbin/dntpd/ [dragonflybsd.org]
Re:dntpd (スコア:2, 参考になる)
dntpd は kern.basetime を何度も取得して差を出したり
しているみたいです (client.c の lin_regress あたり?)。
clock_gettime(CLOCK_MONOTONIC, &ts); とかに
書き換えたほうが意図に合っているのかなあ。
Re:dntpd (スコア:1, 参考になる)
sysntp_getbasetime の中身を gettimeofday(tvp, NULL); にして、dntpd -d -f dntpd.conf としてデバッグモードで起動して確認した所、slope の値が、-1.000004 とかみたいな値になっていました。
kern.basetime の代わりに、kern.boottime を使うパターンだと、slope は、大体 0.00005 とかあたりで安定。
恐らく後者の方が動作がより近いと思うので、kern.basetime は基本的にはいつも変わらない数値なのだけど、別のユーティリティが書き換える可能性があるって事なのかな。dntpd のソース群の中にはkern.basetime を書き換えるような動作は見られないし。
しかし、lin_regressのslopeを求める式をみてもよくわかりません。例えば、(info->lin_count * info->lin_sumxy - info->lin_sumx * info->lin_sumy) とか、(info-lin_count - 1) * info_lin_sumxy じゃ駄目なのかとか。
Re:dntpd (スコア:1, 参考になる)
今までためしにkern.basetimeをboottimeに書き換える方法でntpサーバーを一つだけ指定して動かしてみたところ、誤差がはげしくなっていました。10秒以上ずれていました。
FreeBSDのxntpdやntpdateのソースと比べて確認してみないといけないか。
Re:dntpd (スコア:2)
最新のsnapshot [iij.ad.jp] をお試しください。
というログが出てきていたら良いようです。
私はいま更新したばっかりなので、あと数日したら違いが出てくるのかなぁーと期待しています。
なお、 ntpd だけじゃなくて kernel も最新じゃないとダメです。
adjfreq というシステムコールが必要なんですね。
man adjfreq してみたら
って出てきました。Re:dntpd (スコア:1, 興味深い)
Re:dntpd (スコア:1, 参考になる)
しかしそんな環境では単に統計手法がキャンセルされるだけでしょうから、
dntpdに切り替えてはいけない理由にはなりませんね。
単にOpenNTPDと同じ程度の精度になるだけ。
Re:dntpd (スコア:1)
>dntpd がちゃんとした物であるなら
>secure であると診断してもらって
>OpenBSD に取り込んで欲しいです。
OpenBSD の場合は sys/kernel/kernel_time.c が
あまりにも違うので、そのままでは無理みたいですね。
ユーザランドだけでうまくできるなら
いつの間にか入っていたりするかもしれませんが。(^^;
Re:dntpd (スコア:0)
Re:dntpd (スコア:3, 参考になる)
Re:dntpd (スコア:2, 参考になる)