24.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>
  ...

図24.26 時間管理

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

表24.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 調整が再起動のたびに失われる utclocaltime モード (オプション属性 adjustment='reset' を指定) とは対照的です。さらに、basis 属性には、utc (デフォルト) または localtime のいずれかを使用することができます。clock 要素には、ゼロまたは 1 以上の <timer> 要素を含めることができます。
<timer>注記を参照してください。
<present>特定のタイマーがゲスト仮想マシンで利用できるかどうかを指定します。yes または no に設定することができます。

注記

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

注記

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

例24.1 常に UTC に同期する

<clock offset="utc" />

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

<clock offset="localtime" />

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

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

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

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