23.16. 時間管理

ゲスト仮想マシンのクロックは、通常ホスト物理マシンのクロックから初期化されます。大半のオペレーティングシステムは、ハードウェアのクロックをデフォルトの設定である UTC のままであることを予期します。
ゲスト仮想マシン上で時間を正確に管理することは、仮想化プラットフォームにおける主要な課題となります。複数のハイパーバイザーが様々な方法で時間管理の問題を処理しようとします。libvirt では、ドメインの XML 内で <clock> および <timer> 要素を使い、ハイパーバイザーとは独立した時間管理の構成を提供します。ドメイン XML は virsh edit コマンドを使って編集できます。さらに詳しくは 「ゲスト仮想マシンの XML 設定の編集」 を参照してください。

  ...
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup' track='guest'>
      <catchup threshold='123' slew='120' limit='10000'/>
    </timer>
    <timer name='pit' tickpolicy='delay'/>
  </clock>
  ...

図23.26 時間管理

ドメイン XML のこのセクションを構成するコンポーネントは以下の通りです。

表23.11 時間管理の要素

状態説明
<clock><clock> 要素は、ゲスト仮想マシンのクロックをホスト物理マシンのクロックに同期する方法を判別するために使用されます。offset 属性は 4 つの使用できる値を取り、ゲスト仮想マシンクロックをホスト物理マシンに同期する方法に対する詳細な制御を可能にします。ハイパーバイザーは、すべてのタイムソースに対するすべてのポリシーに対応する必要がないことに注意してください。
  • utc: クロックの起動時に UTC に同期します。utcモードは variable モードに変換でき、これは adjustment 属性を使用して制御できます。値が reset の場合、変換は実行されません。数値は、初期 adjustment としてその値を使用することで、variable モードへの変換を強制します。デフォルトの adjustment はハイパーバイザーに固有のものになります。
  • localtime: ゲスト仮想マシンクロックを、起動時にホスト物理マシンの設定タイムゾーンに同期します。adjustment 属性は utc モードと同様に機能します。
  • timezone: ゲスト仮想マシンクロックを、要求されるタイムゾーンに同期します。
  • variable: basis 属性に応じて、UTC または localtime に相対的に任意のオフセットをゲスト仮想マシンクロックに適用します。UTC (または localtime) に相対的な差分は、adjustment 属性を使用して秒単位で指定されます。ゲスト仮想マシンは時間とともに自由に RTC を調整でき、次回の再起動時にその調整が保持されることを想定します。これは、再起動のたびに RTC の調整が失われる utc および localtime モード (任意の属性 adjustment='reset' を指定) とは対照的です。さらに、basis 属性には utc (デフォルト) または localtime を指定できます。clock 要素には 0 個以上の <timer> 要素があることがあります。
<timer>注記を参照してください。
<present>ゲスト仮想マシンが特定のタイマーを使用できるかどうかを指定します。yes または no を設定できます。

注記

<clock> 要素は子要素として、0 個以上の <timer> 要素を持つことができます。<timer> 要素は、ゲスト仮想マシンのクロックを同期するために使用されるタイムソースを指定します。
<timer> 要素では name のみが必要で、他の属性はすべて任意です。
  • name: 変更される timer を選択します。許可される値は kvmclockpit、または rtc です。
  • track: タイマー追跡を指定します。許可される値は bootguest、または wall です。trackname="rtc" のみに有効です。
  • tickpolicy: ゲスト仮想マシンにティックを挿入するための期限に間に合わなかった場合にどうなるかを決定します。以下の値を割り当てることができます。
    • delay: 通常レートでのティックの配信を継続します。ゲスト仮想マシンの時間は、ティックの遅延により遅れます。
    • catchup: ティックの遅れを取り戻すために、高めのレートでティックを配信します。ゲスト仮想マシンの時間は、遅れが取り戻されると表示されなくなります。さらに、threshold、slew、および limit の 3 つのオプション属性があり、それぞれは正の整数になります。
    • merge: 遅れたティックを単一のティックにマージし、それらを挿入します。ゲスト仮想マシンの時間は、マージの実行方法により、遅れる可能性があります。
    • discard: 遅れたティックを破棄し、デフォルトの間隔設定で挿入を続行します。ゲスト仮想マシンの時間は、遅れたティックの処理についての明示的なステートメントがない場合に遅れる可能性があります。

注記

デフォルトでは、utc の値が仮想マシンのクロックオフセットとして設定されます。ただし、ゲスト仮想マシンのクロックが localtime の値を使って実行される場合、ゲスト仮想マシンのクロックをホスト物理マシンのクロックと同期させるために、クロックオフセットを別の値に変更しなければなりません。

例23.1 常に UTC に同期する

<clock offset="utc" />

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

<clock offset="localtime" />

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

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

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

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