障害内容

Xenの完全仮想化ドメイン (HVMドメイン) において、高いディスク負荷をかけると、当該ドメインに関し、

  • I/Oの終了時に長時間にわたって応答がなくなる
  • 時計が遅れ、かつその遅れが仮想CPUによって異なる

システム

  • ホスト側: Red Hat Enterprise Linux 5 update 2、Xen-3.1.2-92.el5
  • ゲスト側: Red Hat Enterprise Linux 5 update 2

解析内容

再現試験を行うとともに、Xenハイパバイザ、Xen完全仮想化のI/Oエミュレーションを担うqemu-dm、ゲストLinuxカーネルの各ソースコードを分析の上、発生している事象を解明し、回避策を提示した。

解析結果

1. I/O高負荷時の応答

  • Xen HVM仮想化においてI/Oエミュレーションを行うqemu-dmは、時間のかかるwrite処理を別スレッドで行うなどの工夫が行われていたが、flush処理はなぜかメインループの中で行っていた。
  • したがって、高負荷のかかった後flush処理が行われると、長時間にわたってqemu-dmがflush処理にかかりきりになり、キーボードやNICのエミュレーションも行われない状態となった。

2.I/O高負荷時の時計のずれ

  • 上記のqemu-dmによるflush処理の間、当該完全仮想化ドメインの仮想CPUのうち、I/Oを発行した仮想CPUは、割り込みを禁止したまま完了を待つ。
  • Linuxにおいては、時計はタイマ割り込みごとに更新される値に、CPUのタイムスタンプカウンタ (TSC) の値による補正をかけているが、Xenは割り込みを禁止している仮想CPUの仮想TSCの値を更新しないため、補正地の誤差が累積してしまう。

3.対処方法

  • qemu-dmのキャッシュを無効にすることにより、flush処理を細切れに行うことにより、長期間にわたる無応答を回避し、また、CPUごとの誤差を極力小さくする。さらに、NTPなどによる時刻補正を行う。