あれ?VMware ESXi内のゲストOS同士のntpdについて。

ESXiの中でテスト用のLinuxServerを構築し設定したところ、時刻あわせのntpdに関する制限?のようなものに気がついたのでメモ。

当方のESXiでは、下図のような構成でゲストOSが動作しています。

DNSサーバ(192.168.xxx.2)ではずいぶん前からntpdが起動しており、ntpq -pするとこんな感じ。

[DNSサーバ]
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.******.ad. .GPS. 1 u 3 64 1 42.771 233.190 0.008
LOCAL(0) .LOCL. 5 l 2 64 1 0.000 0.000 0.008
※上位のntpはGPSなので、stratumが1。自分のは5くらいになってます。

そして、テストのLinuxサーバにも以前からDNSサーバのアドレスをntp.confに記述して起動しておったわけですよ。
みてみるとこんな感じ。

[TEST Linux]
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) 73.78.73.84 5 l - 64 1 0.000 0.000 0.002
*** DNS *** .INIT. 16 u - 64 0 0.000 0.000 4000.00

stratumが16の件について。

DNSのntp.confのrestrict項の記述を間違えたかと思いましたが、そんなこともなく。
確認のため、TEST Linuxサーバのntpdを止めて、ntpdateしてチェックするとこんな感じ。

[TEST Linux]
# ntpdate -d 192.168.xxx.2
20 Aug 12:18:48 ntpdate[11416]: ntpdate 4.2.0@1.1161-r Wed May 20 09:49:43 JST 2009 (1)
Looking for host 192.168.xxx.2 and service ntp
host found : (*** DNS ***)
transmit(192.168.xxx.2)
receive(192.168.xxx.2)
transmit(192.168.xxx.2)
receive(192.168.xxx.2)
transmit(192.168.xxx.2)
receive(192.168.xxx.2)
transmit(192.168.xxx.2)
receive(192.168.xxx.2)
transmit(192.168.xxx.2)
192.168.xxx.2: Server dropped: strata too high
server 192.168.xxx.2, port 123
stratum 16, precision -17, leap 11, trust 000
refid [192.168.xxx.2], delay 0.02623, dispersion 0.00003
transmitted 4, in filter 4
reference time: 00000000.00000000 Thu, Feb 7 2036 15:28:16.000
originate timestamp: d0187297.adcd3e95 Fri, Aug 20 2010 12:18:47.678
transmit timestamp: d0187298.21612c6a Fri, Aug 20 2010 12:18:48.130
filter delay: 0.02646 0.02623 0.02650 0.02623
0.00000 0.00000 0.00000 0.00000
filter offset: -0.45194 -0.45204 -0.45220 -0.45206
0.000000 0.000000 0.000000 0.000000
delay 0.02623, dispersion 0.00003
offset -0.452043

やっぱりstratum 16だ。

ちなみに、ntpdのstratumは、時刻の信頼度のこと。1~15の順で分けられ、最も精度が高いものが1となる。16というのは、まだ上位のntpと同期していないということ。
・・・・そんなはずないんだけどなぁ。

ためしに、vmesxi上で動作させているntpdにあわせてみた。

[TEST Linux]
# ntpdate -d vmesxi
20 Aug 12:26:53 ntpdate[11518]: ntpdate 4.2.0@1.1161-r Wed May 20 09:49:43 JST 2009 (1)
Looking for host vmesxi and service ntp
host found : vmesxi
transmit(192.168.xxx.220)
receive(192.168.xxx.220)
transmit(192.168.xxx.220)
receive(192.168.xxx.220)
transmit(192.168.xxx.220)
receive(192.168.xxx.220)
transmit(192.168.xxx.220)
receive(192.168.xxx.220)
transmit(192.168.xxx.220)
server 192.168.xxx.220, port 123
stratum 2, precision -20, leap 00, trust 000
refid [192.168.xxx.220], delay 0.02614, dispersion 0.00024
transmitted 4, in filter 4
reference time: d01873e5.0a0ba31a Fri, Aug 20 2010 12:24:21.039
originate timestamp: d018747c.50704730 Fri, Aug 20 2010 12:26:52.314
transmit timestamp: d018747e.18b790fb Fri, Aug 20 2010 12:26:54.096
filter delay: 0.03047 0.02618 0.02625 0.02614
0.00000 0.00000 0.00000 0.00000
filter offset: -1.78058 -1.78263 -1.78267 -1.78263
0.000000 0.000000 0.000000 0.000000
delay 0.02614, dispersion 0.00024
offset -1.782639

20 Aug 12:26:54 ntpdate[11518]: step time server 192.168.xxx.220 offset -1.782639 sec

・・・うまく時計あわせできた。
もしかしてESXi内で動作しているゲストOSのntpdは、ESXiが全部仕切っちゃうのでしょうか。

ちょっと様子見てみます。

<備考>

ESXi内で動作しているFreeBSDの時刻が、とんでもなくずれる場合の対処法。

# echo 'kern.hz=100' >> /boot/loader.conf
※loader.confに kern.hz=100を記述

これでよし。

通常実機では、FreeBSDでもLinuxでもこのタイマー割り込みレートは kern.hz=1000 ですが、ESXiなどのゲストOS内環境では割り込みを取りこぼすことがあるため、ゲストOS内のタイマーレートを下げることで解決するようです。

Linuxについては以下の通り。

[/etc/grub.conf]kernel行末尾に以下を追加
divider=10 clocksource=acpi_pm

※dividerはdiv(割る)の意味で、この場合 1000 ÷ 10 = 100Hz
Thanks to arakawaさん