仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ 光来健一 千葉滋 東京工業大学
VM を用いたサーバ統合 サーバ統合が行われてきている 仮想計算機(VM)の利用が現実的に VM を用いる利点 仮想化のハードウェアサポートによる性能向上 Intel VT, AMD Pacifia 4 GB 超の物理メモリサポートによるメモリ不足の解消 PAE, AMD64, EM64T, IA-64 VM を用いる利点 サーバを安全に分離できる 従来の OS が利用できる 管理が容易になる サーバ サーバ VM 統合サーバ
リブートリカバリの重要性 VMM や VM(OS)の再起動は避けられない リブートリカバリを速くすべき アップデート 予防保守(Rejuvenation) クラッシュ リブートリカバリを速くすべき 再起動後になるべく速く元の サービス品質に戻す 再起動の影響を最小化する VM VM VM 仮想計算機モニタ (VMM) ハードウェア
VMM の従来のリブートリカバリ 全ての VM を起動し直すのに時間がかかる VM のサスペンド・レジューム? OS の起動、サービスの起動 ディスクを読み書きする必要 VM のメモリサイズが増大 VM VMM
VM の従来のリブートリカバリ 十分にファイルキャッシュに載るまで ファイルシステムの性能が低下 OS 起動時にファイル先読み? キャッシュミスによりディスク アクセスが増加 OS 起動時にファイル先読み? 起動時のディスクアクセスと競合 キャッシュに使えるメモリが増大 VM OS キャッシュ VMM
提案:高速なリブートリカバリ 高速化手法 提供する機構 再起動前のメモリの内容を再起動後に再利用 できるようにする VMM のための Warm-VM Reboot “Suspend To RAM” を VM に対して実現 ノート PC のサスペンド・レジューム VM のための Warm-cache Reboot ファイルキャッシュを残す OS の部分再起動
Warm-VM Reboot VMM の再起動後に VM を高速に再開 VM を高速にサスペンド メモリイメージをそのまま凍結 ディスクに保存しない VMM の再起動中に VM の メモリイメージを保持 BIOS のクイックブート機能を利用 計算機の再起動中にメモリの内容を 保持できる VM を高速にレジューム メモリイメージの凍結を解除 VM VMM VM メモリ イメージ
Warm-cache Reboot VM の再起動後に OS のキャッシュミスを 軽減 ファイルキャッシュに使われて いるメモリを予約する ファイルアクセス時に再起動前の キャッシュが見つかれば再利用 VM OS キャッシュ VMM VM メモリ
実装 Xen 3.0.0、Linux 2.6.12.6 に実装 キャッシュマッピング テーブル ファイル情報→ キャッシュページ キャッシュページ ドメイン 0 ドメイン U 疑似物理メモリ 仮想的に連続した メモリに見せる カーネル イベント 1 5 ... 4 2 3 P2M マッピング テーブル 疑似物理メモリ→ マシンメモリ ハイパーコール Xen 1 2 3 4 5 マシンメモリ ...
Warm-VM Reboot の実装(1/2) ドメインをサスペンド Xen からサスペンド イベントを送信 ドメインの状態をメモリに保存 ドメイン U ドメインをサスペンド Xen からサスペンド イベントを送信 ドメインの状態をメモリに保存 レジスタ イベントチャンネル ドメインのメモリを予約 サスペンド 処理 カーネル ... 4 2 3 サスペンド ハイパーコール サスペンド イベント Xen ドメインの 状態を保存 予約 ... 1 2 3 4 5 マシンメモリ
Warm-VM Reboot の実装(2/2) Xen を再起動 ドメインをレジューム CPU キャッシュを フラッシュ メモリに書き戻す クイックブートにより メモリの内容を保持 ドメインをレジューム ドメインに同じメモリを再割り当て ドメイン U レジューム 処理 カーネル 再割り当て 4 2 3 ... ハイパーコール からの復帰 Xen ドメインの 状態を復元 ... 1 2 3 4 5 マシンメモリ
Warm-cache Reboot の実装 キャッシュマッピングテーブル キャッシュに読み込まれた時にエントリを追加 ドメイン U キャッシュマッピングテーブル キャッシュに読み込まれた時にエントリを追加 キャッシュが破棄された時に エントリを削除 カーネル 仮想 ディスク ... 4 2 3 Xen ... 1 2 3 4 5 マシンメモリ
Warm-cache Reboot の実装 キャッシュマッピングテーブル ドメインの再起動時 ドメイン U キャッシュマッピングテーブル ファイルキャッシュに読み込まれた時にエントリを追加 ファイルキャッシュが破棄された時にエントリを削除 ドメインの再起動時 ドメインに同じメモリを 再割り当て キャッシュマッピングテーブル を復元 ファイルキャッシュを再利用 カーネル 仮想 ディスク 4 2 3 ... Xen ... 1 2 3 4 5 再割り当て マシンメモリ
実験:Warm-VM Reboot 測定内容 比較対象 VM のサスペンド / レジュームにかかる時間 VM のメモリサイズと VM の数の影響を測定 VMM の再起動時のサーバ処理性能の推移 httperf で Apache にリクエストを送り続けた 比較対象 Xen サスペンド / レジューム シャットダウン / 起動 サーバ Pentium 4 3.0 GHz PC3200 DDR SDRAM 2 GB SATA HDD 160 GB GbE NIC クライアント メモリ 1 GB, GbE NIC
VM のメモリサイズの影響 Warm-VM Reboot サスペンド / レジューム Xen サスペンド / レジューム メモリサイズ非依存 0.6 秒 / 0.6 秒 Xen サスペンド / レジューム メモリサイズに比例 28 秒 / 20 秒 (1 GB 時) シャットダウン / 起動 12 秒 / 11 秒 起動するサービスに依存 サスペンド レジューム
VM 数の影響 Warm-VM Reboot サスペンド / レジューム Xen サスペンド / レジューム シャットダウン / 起動 2.3 秒 / 2.0 秒 (6 VMs) Xen サスペンド / レジューム 45 秒 / 37 秒 (6 VMs) シャットダウン / 起動 25 秒 / 56 秒 (6 VMs) 起動するサービスに依存 サスペンド レジューム VM メモリサイズ:256 MB
サービスのダウンタイム Warm-VM Reboot Xen サスペンド / レジューム シャットダウン / 起動 40 秒 104 秒 ドメイン 0 のシャットダウン中に ドメイン U が動作できる Warm-VM Reboot 40 秒 Xen サスペンド / レジューム 104 秒 シャットダウン / 起動 78 秒 Warm-VM Reboot ドメイン U の終了・開始処理に 時間がかかる Xen サスペンド / レジューム シャットダウン / 起動 VM メモリサイズ:1 GB
実験:Warm-cache Reboot 測定内容 VM 再起動の前後のファイル読み込み性能 VM 再起動の前後のウェブサーバの処理性能 再起動前に2回、再起動後に2回測定 VM 再起動の前後のウェブサーバの処理性能 httperf で Apache にリクエストを送信 VM 再起動時のサーバ処理性能の推移 httperf で Apache にリクエストを送り続けた VM メモリサイズ:1 GB
VM 再起動前後の性能 Warm-cache Reboot 再起動後1回目の性能が向上 再起動後1回目の性能は2回目より低い ファイル読み込み 15 倍 ウェブサーバ 3 倍 再起動後1回目の性能は2回目より低い ファイル読み込み 64 % ウェブサーバ 92 % ファイルキャッシュ以外のキャッシュミスが原因 ファイル ウェブ 起動後 再起動後
VM 再起動時のサーバ性能の推移 Warm-cache Reboot 従来の再起動 先読み 再起動後 20 秒は 6 % 性能低下 再起動後 33 秒は 44 % 性能低下 先読み 先読み処理がウェブサーバの処理を阻害 Warm-cache Reboot 従来 先読み
関連研究 Recovery Box [Baker et al.’92] Rio ファイルキャッシュ [Chen et al.’96] アプリケーションの状態を再起動後に復元 アプリケーションに依存 Rio ファイルキャッシュ [Chen et al.’96] 再起動時にダーティキャッシュを書き戻す キャッシュは再起動によって失われる Live Migration [Clark et al.’05] VM をほとんど停止させずに他のホストに移動 移動に時間がかかる
まとめ 高速なリブートリカバリを提案 Warm-VM Reboot Warm-cache Reboot VMM の再起動後に VM を高速にレジューム 再起動によるダウンタイムを約半分に Warm-cache Reboot VM の再起動後にファイルキャッシュを再利用 再起動直後のサーバ性能の低下を 6 % に
今後の課題 再起動後に再利用するメモリの保護 x86_64 アーキテクチャへの実装 より現実的なワークロードでの実験 クラッシュ時に破壊されないようにする 実装はほぼ完了 x86_64 アーキテクチャへの実装 より多くのメモリが搭載できる 実装は途中まで完了 より現実的なワークロードでの実験 今回は最も効果的な実験を行った