障害内容
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などによる時刻補正を行う。