9.10. libvirt による仮想マシンのタイマー管理

ゲスト仮想マシン上で時間を正確に管理することは、仮想化プラットフォームにおける主要な課題となります。複数のハイパーバイザーが様々な方法で時間管理の問題を処理しようとします。libvirt では、ドメインの XML 内で <clock> と <timer> の要素を使い、ハイパーバイザーからは独立した時間管理の構成を提供します。ドメイン XML の編集は virsh edit コマンドを使って行います。詳細は、「ゲスト仮想マシンの設定ファイルの編集」を参照してください。
<clock> 要素は、ゲスト仮想マシンのクロックとホスト物理マシンのクロックとの同期方法を決定するために使用されます。clock 要素には次のような属性があります。
  • offset: ゲスト仮想マシンのクロックをどのようにホスト物理マシンのクロックでオフセットするかを判別します。offset 属性の値は以下の値になります。

    表9.1 Offset 属性の値

    詳細
    utcゲスト仮想マシンのクロックは、起動時に UTC に同期されます。
    localtimeゲスト仮想マシンのクロックは、起動時にホスト物理マシンの設定タイムゾーンに同期されます (該当する場合)。
    timezoneゲスト仮想マシンのクロックは、timezone 属性で指定したタイムゾーンに同期されます。
    variableゲスト仮想マシンのクロックは UTC の任意のオフセットに同期されます。UTC に対する差分を adjustment 属性を使って秒数単位で指定します。ゲスト仮想マシンは RTC (リアルタイムクロック) を自由に調整することができ、行われた調整は再起動後も維持されます。これは RTC の調整が再起動するたびすべて失われる utc モードとは対照的です。

    注記

    デフォルトでは、utc の値が仮想マシンのクロックオフセットとして設定されます。ただし、ゲスト仮想マシンのクロックが localtime の値を使って実行される場合、ゲスト仮想マシンのクロックをホスト物理マシンのクロックと同期させるために、クロックオフセットを別の値に変更する必要があります。
  • timezone 属性は、ゲスト仮想マシンのクロックに使用されるタイムゾーンを決定します。
  • adjustment 属性は、ゲスト仮想マシンのクロック同期の差分を指定します。UTC に対して増減する秒数を指定します。

例9.1 常に UTC に同期する

<clock offset="utc" />

例9.2 常にホスト物理マシンのタイムゾーンに同期する

<clock offset="localtime" />

例9.3 任意のタイムゾーンに同期する

<clock offset="timezone" timezone="Europe/Paris" />

例9.4 UTC に同期させてから任意の秒数を増減させる

<clock offset="variable" adjustment="123456" />

9.10.1. timer は clock の子要素です。

clock 要素には子要素として、ゼロまたはそれ以上の timer 要素を持たせることができます。timer 要素には以下の属性を含めます。name のみが必須の属性となり、これ以外の属性はすべてオプションです。
name 属性は、使用するタイムソースを決定するもので、以下のいずれかになります。

表9.2 name 属性の値

詳細
pitProgrammable Interval Timer - 定期的な割り込みが付いたタイマーです。
rtcReal Time Clock - 継続的に実行するタイマーで、定期的な割り込みが付いています。
tscTime Stamp Counter - リセット後のティック数をカウントします。割り込みなしです。
kvmclockKVM クロック - KVM ゲスト仮想マシン用に推奨しているクロックソースです。KVM の pvclock または kvm-clock によりゲスト仮想マシンがホスト物理マシンのウォールクロックタイムを読み込みます。