MASUDAQ Blog

NO DEVELOPMENT NO LIFE.

Hyper-V と NTP(Linux ntpd) 時刻同期の問題

以前の記事で、Linux における NTP の設定方法を紹介した。しかしながら、Hyper-V の ゲスト OS が Linux の環境では、ntpd をデーモンとして起動し、しばらくしてもローカルクロック (127.127.1.0) のみしか同期が成功しない。

[root@centkun ~]# ntpq -p
remote                    refid                        st  t    when  poll    reach  delay        offset       jitter ==============================================================================
 clock.trit.net          192.12.19.20           2  u   308    1024    377  119.043   -545846  4247.45
 ntp1.Housing.Be    169.229.128.214     3  u   319    1024    377  110.793   -545772  4166.27
 153.16.4.137        192.36.143.152       2  u   311    1024    377  184.881   -545799  4249.43
*LOCAL(0)          .LOCL.                   10  l     10        64     377     0.000        0.000       0.001

"*" が付いているのは、LOCAL のみ。

Hyper-V で Linux をゲスト OS とする場合、ホストとの時刻同期はサポートされない。時刻同期がサポートされていなこと自体には、大きな問題はないが、Linux をゲスト OS とする場合、システム時刻の進みが尋常ではない。これは、Hyper-V で Linux ゲストを利用するシーンでは、致命的な障害となる。

前回の記事では、この障害を回避するために、ntpd で、外部の NTP サーバーと時刻を同期しようとしたのだが、これがうまく動作していなかった。

そして、この障害の発見が遅れたのは、不幸中の幸いか、ローカルクロック (127.127.1.0) との同期が成功していた点にあると考えられる。

[root@centokun ~]# date & hwclock
[1] 29419
2010年 7月 15日 木曜日 10:40:39 JST
2010年07月15日 10時40分39秒 -0.861611 秒 <[1]+ Done date

ハードウェアクロックは、時刻が進んでしまう現象はあるものの、システムクロックと比較して、時間の進みが緩やかだ。そのため、ntpd が外部の NTP と同期していると思い込んでしまっていた。

調査したところ、仮想マシンでは、タイマー割り込みによる CPU オーバーヘッドが発生することが原因らしい。これを緩和するには、タイマー割り込みの間隔を 1ms から 10ms に減らすように変更する。

具体的には、カーネルの起動パラメータに "divider=10" を設定する。
(RedHat 5.4、CentOS 5.4 が対象。他の OS は、ここを参照。)

[root@centkun ~]# vi /boot/grub/grub.conf

(before) kernel /vmlinuz-2.6.18-162.el4 ro root=/dev/VolGroup00/LogVol00 hda=noprobe hdb=noprobe
(after) kernel /vmlinuz-2.6.18-162.el4 ro root=/dev/VolGroup00/LogVol00 hda=noprobe hdb=noprobe divider=10

ファイルを保存し、OS を再起動する。

[root@centkun ~]# shutdown -r now

検証環境では、30 分位で同期されていることを確認した。

[root@centos ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+131.107.13.100  .ACTS.     1    u   38    64   337  113.739  183.491  72.309
+ntp-nasa.arc.na    .GPS.       1    u     5    64   377   60.020   230.378  42.939
*ntp.nc.u-tokyo.    .GPS.       1    u   24    64   377   4.979     237.430  38.567
 LOCAL(0)           .LOCL.  10    l    41    64   377   0.000     0.000      0.001

HyHyper-V は、他の VMware 等の仮想化技術と比較して、Unix、Linux 系のサポート状況、情報量が非常に少ない。
現状では、Hyper-V + Linux 環境は、現実的ではないと感じている。
今後の Hyper-V + Linux 環境の成熟を期待したい。

以下は、この記事で参考にしたサイト。

このエントリーをはてなブックマークに追加