KVMにおいて ホストとゲストの時間管理はNTPを用いるべきか?
今回は、時間合わせの話です。
VPSを使っているとNTPを動かすべきか否か迷うことがありました。
(Linuxの場合)そもそも kvm-clockなるものがVPSのゲスト側ではすでに動作しています。kvm-clockは、ホスト側から供給される時計情報を参照すると言われていました。
であるなら、NTPの必要性があるのかないのか?という疑問が生じてきます。
そこで、色々調べてみると、ゲスト側での時刻合わせの必要性についての議論が http://comments.gmane.org/gmane.comp.emulators.kvm.devel/96835 にありましたので、今回は、その英訳を簡単に記載したいと思います。
(たぶん、これが一番わかりやすいと思います。)
質問: KVMにおいて ホストとゲストの時間管理はNTPを用いるべきか?
この議論は、http://comments.gmane.org/gmane.comp.emulators.kvm.devel/96835 で行われていたものを日本語に簡単に訳してみたものです。
英語力に自信がないので、もし、変だなぁと思われたら先のURLの原文を参照してください。
Aritoki TAKADA : 質問: ホストとゲストの時間管理はNTPを用いるべきか?
こんにちは
KVMホストとゲストの間で時間管理の設定を行っています。
しかし、色んな情報があって困っています。
その困っている点は、NTPがゲストOS上で動作させておくべきか否かです。
以下は、個人的に見つけた記事で、簡単にその情報をまとめてみました。
- Red Hatの場合
- 関連文書リンク :
- kvmclock:使用可能な場合は推奨
- ホスト上のNTP:推奨
- ゲスト上のNTP:推奨
- SUSEの場合
- 関連文書リンク :
- kvmclock:使用可能な場合は推奨
- ホスト上のNTP:推奨
- ゲスト上のNTP:kvmclockを使用する場合推奨されない
- Ubuntuの場合
- 関連文書リンク :
- kvmclock:記載なし
- ホスト上のNTP:記載なし
- ゲスト上のNTP:推奨されない
vger.kernel.org の KVM で 見つけた前のディスカッション:
Red Hat の DOR Laorは、Red Hatのドキュメントと同じであると言っています。
http://marc.info/?l=kvm&m=130881067913835&w=4
John Buswell と Athanasius は、他のテクニックとして、
ホストとゲストの同期を維持するために、NTPはなく、RTCを使用することについて議論しています。
しかし、彼らはそれが最善の方法ではないと言っています。
http://marc.info/?l=kvm&m=127230166532133&w=4
そこで、ホストOSとゲストOSの両方を カーネルは上流から3.5.2に置き換えられた CentOS 6.3 で 試してみました。
起動時にゲストが、約1,2秒程度の小さな遅延が見られました。
NTPを起動しないゲストでは、実行している間、一定の遅延が見受けられました。
ゲストOS上でNTPを動かしておけば、この遅延は解消されるのではないかと思います。
しかし、NTPがゲスト上で動作してはならない何らかの理由があるのではないかと心配しています。
NTPがゲスト上で実行すべき(すべきでない)理由をご存じであれば、教えてください。
よろしくお願いします。
Marcelo Tosatti :
NTPは、UTCとゲストOSの日時を同期するために、ゲストOS上で実行しておくべきです。
kvmclockは、ホストからの単調なクロックを提供します。
ホストの単調なクロックの周波数は、ホスト側で動作しているntpdによって補正されます。
これが、混乱の元でしょう。
つまり、それは、
ゲストの日時がUTCに同期することや、
ゲストでユーザアプリケーションに見せる単調なクロック周波数が、ホスト側の単調なクロック周波数と等しいということさえも
保障するものではありません。
Aritoki TAKADA :
1点を除き、理解できました。
ホスト側の単調なクロック周波数が、ホスト側で動作しているNTPDによって正確に保持されています。
そして、kvmclock は、それをゲストOS上で提供しますよね。
これは、ゲスト上のアプリケーションが、ホストによって提供する正確なクロック周波数を得ることにはならないのですか?
Marcelo Tosatti :
kvmclockドライバは、ホストのntpdの修正された周波数にアクセスできます。
しかし、
1) ゲストへ提供された時の kvmclockの時間は、ホストの単調クロックに付加するオフセット値として 周波数変動の影響を受けやすいTSCを使います。
ゲストは、独自時間管理方法を持っています。(それは、kvmclockからのすべてのタイマ割り込みを時間として積算します。)
そのアルゴリズムは、完全ではありませんし、それは、小さな変化に敏感です。
これらは、時間をかけて追加します。
2) うるう秒のようなUTCへの修正は、ホストの単調クロックに反映されません。
ゲスト上で動作するNTPアルゴリズムは、UTCとの同期するために必要なのです。
Aritoki TAKADA :
そうですか、唯一のkvmclockと同期するゲストの落とし穴がよくわかりました。
そして、ゲスト上のNTPを動かすことは、私にとって単純で合理的のようです。
詳しい説明ありがとうございました。
ゲストOS上でkvm-clockを使っているかどうかは、以下のように確認できます。
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
|
ゲストOS上でkvm-clockを使っている場合、結局は、日時合わせにNTPを使うことが望ましいようですね。
ざっくりとした日時で良ければ、ホスト側から供給される割り込みによる時刻合わせでも良いのかもしれませんが、
実質、それでは、時計は、いずれ狂ってしまうので、やっぱり、ゲスト側で合わせる必要があるんでしょうね。
日時を合わせる方法は、
サーバーの時計(日時)を合わせる方法を参照してください。
ここまで
さくらのVPS,
お名前.com KVM など、
仮想化技術にKVMも用いたVPSを使ってきましたが、それほど厳密な時間管理を行う必要性がなかったこともあって、
ntpdは起動していませんでした。適当なタイミングでコマンドによる修正でも十分だったからでもあります。
でも、時間はちゃんと合わせておくべきでしょうね。これからは、ntpdを導入しようと思っています。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :