slide - KSL

大容量メモリを持つ
仮想マシンの分割マイグレーション
末竹将人 *1 木津巴都希 *1
Surote Wongpaiboon *2 光来健一 *1
*1
九州工業大学
*2
Kasetsart University
1
大容量メモリを持つVM
• IaaS型クラウドの普及
• 1 台のサーバに多くのVMを統合
• 物理マシンを減らすことでコスト削減
• 大容量メモリを持つVMも提供
• Amazon EC2では最大244GiBのVMを提供
• ビッグデータの解析、インメモリ・データベース
244GB
8GB
VM
VM
VM
VM
VM
VM
2
VMのマイグレーションが困難に
• VMマイグレーションの必要性
• ホストのメンテナンス時などにVMを別ホストに移動
• 移送先ホストに十分な空きメモリが必要
• 大容量メモリを持つ空きホストを常に確保しておくこ
とはコスト面で避けたい
• 適切な移送先がなければ...
• メンテナンス中はVM上のサービスが長時間停止
移送元ホスト
VM
16GB
移送先ホスト
マイグレーション
空きメモリ
8GB
3
仮想メモリを用いたマイグレーション
• 物理メモリに入りきらないVMのメモリをディス
ク上にスワップアウト
• VMのメモリは順番に転送
• 物理メモリがいっぱいになるとその順番でスワップアウト
• メモリ再送時に物理メモリ上にない場合
• ディスクからスワップインする必要
• 低速なディスクのために性能が大幅に低下
移送元ホスト
VM
16GB
移送先ホスト
マイグレーション
VM
入りきらな
いメモリ
ディスク
8GB
4
ネットワーク・スワップの利用
• 物理メモリに入りきらないVMのメモリをネット
ワーク上の別ホストにスワップアウト
• ディスクより高速にスワップが行える
• ネットワークが高速であれば
• ネットワーク転送量が増加する
• 移送先ホストとスワップ用ホストとの間の転送分
移送元ホスト
VM
16GB
移送先ホスト
マイグレーション
スワップ
入りきらな
いメモリ
空きメモリ
VM
8GB
スワップ用ホスト
5
ポストコピー・マイグレーション
• VMの実行に最低限必要な情報のみを転送し
すぐに移送先のVMに切り替える
• オンデマンド転送
• VMがメモリを必要とした時に移送元ホストから転送
• メモリの使用頻度に基づいてスワップできる
• バックグラウンド転送
• 使用頻度の高いメモリをスワップアウトしてしまう可能性
移送先ホスト
移送元ホスト
VM
マイグレーション
メモリ
VM
ディスク
メモリ
メモリ転送
6
提案 : S-memV
• VMを分割して複数のホストにマイグレーション
• 1対Nマイグレーション
• 1台のホスト上で動作しているVMを複数のホストへ
• N対1マイグレーション
• 複数のホストにまたがって動作しているVMを1台のホストへ
• 部分マイグレーション
• 複数のホストにまたがるVMの全体または一部を別のホスト
群へ
• 十分な空きメモリを持ったホストがなくても
性能低下を抑えたマイグレーションが可能
7
1対N マイグレーション
• VMを複数のホストにマイグレーション
• VMの核となる情報と使用頻度の高いメモリ
• メインホストに転送
• メインホストに入りきらないVMのメモリ
• サブホスト群に転送
• 全ホストの空きメモリを考慮
• 並列転送することによりマイグレーションを高速化
移送元ホスト
VM
移送先メインホスト 移送先サブホスト
マイグレーション
メモリ
VM
メモリ
メモリ転送
VMのメモリ
の一部
8
マイグレーション後の動作
• メインホスト上でVMを動作させる
• メインホストにないメモリが要求された時
• サブホストからスワップイン
• 使用頻度の低いメモリをサブホストへスワップアウト
• スワップはマイグレーション中には発生しない
• メインホストに入りきらないメモリは直接サブホストに転送
• ネットワーク・スワップと違い、メインホストを経由しない
メインホスト
サブホスト
スワップアウト
VM
VMのメモリ
の一部
メモリ
スワップイン
9
ポストコピーにも対応
• ポストコピー・マイグレーションにも適用可能
• オンデマンド転送
• メインホストがいっぱいの場合、使用頻度の低いメモリをサ
ブホストへスワップアウト
• ネットワーク・スワップと同様
• バックグラウンド転送
• 使用頻度の低いメモリは最初からサブホストに転送
移送先メインホスト 移送先サブホスト
移送元ホスト
VM
マイグレーション
メモリ
VM
メモリ
VMのメモリ
の一部
オンデマンド転送
バックグラウンド転送
10
N対1 マイグレーション
• 複数ホストにまたがるVMを1台のホストにマイ
グレーション
• 元のホストのメンテナンス終了後など
• メインホストとサブホストのメモリをそれぞれ転送
• マイグレーション中にスワップイン・スワップアウトされた
メモリは、未転送の場合と書き換えられた場合のみ転送
移送元サブホスト
移送元メインホスト
VM
VMのメモリ
の一部
メモリ
メモリ転送
マイグレーション
移送先ホスト
VM
メモリ
11
部分マイグレーション
• 複数ホストにまたがるVMの一部または全部を別
のホスト群にマイグレーション
• 一部のホストをメンテナンスしたい場合など
• メインホストをメンテナンスする場合
• VMを新しいメインホストにマイグレーション
• サブホストをメンテナンスする場合
• VMのメモリを別のサブホストへ転送
移送元メインホスト 移送元サブホスト
VM
メモリ
VMのメモ
リの一部
移送先メインホスト 移送先サブホスト
VM
メモリ
VMのメモ
リの一部
12
実装
• QEMU-KVM 2.1.2 に実装
• 1対2 マイグレーションをサポート
• システム構成
• S-memVを実装したQEMU-KVM
• 移送元ホストと移送先メインホストで動作
• メモリサーバ
• 移送先サブホストでVMのメモリの一部を管理
移送元ホスト
VM
移送先メインホスト 移送先サブホスト
VM
マイグレーション
QEMU-KVM
QEMU-KVM
メモリ
メモリ
メモリ転送
メモリサーバ
VMのメモリ
の一部
13
QEMU-KVM の拡張
• 閾値を超えるVMのメモリをサブホストに転送
• メインホストに送るメモリのアドレスに閾値を設定
• 例:0x20000000 (512MB)
• サブホストに転送する情報
• VMのメモリアドレス、そのメモリページのデータ
• メインホストに転送する情報
• サブホストのIPアドレス、送ったVMのメモリアドレス
移送元ホスト
VM
移送先メインホスト 移送先サブホスト
IPアドレス
メモリアドレス
VM
QEMU-KVM
QEMU-KVM
メモリ
メモリ
閾値以下のメモリ
メモリアドレス
ページデータ
メモリサーバ
VMのメモリ
の一部
14
メモリサーバ
• VMのメモリの一部を管理
000000
• メモリ効率のよい基数木を用いる
• キー:VMのメモリアドレス
• 値:メモリデータのアドレス
01
2B
• スワップアウト要求の受信時
• メモリデータを基数木に登録
• スワップイン要求の受信時
• 基数木を探索しメモリデータを
要求元に送信
02
...
3F
1000
...
2000
...
メモリデータ
15
VMのメモリアクセス頻度の取得
• 拡張ページテーブル(EPT)をたどってアクセス
ビットが1のページを取得
• アクセスビット
• VMがページにアクセスしたときに1にセットされる
• QEMU-KVMは定期的にVMのメモリサイズ分のビット
マップをカーネルから取得
• その際にアクセスビットを
クリア
VM
QEMU-KVM
Linux
KVM
EPT
16
実験
• S-memVの有効性を確かめる実験を行った
• 物理メモリとスワップ領域の使用量
• マイグレーション時間
• 通常時、メモリ負荷時
• 仮想メモリを用いる従来手法と比較
• 使用したVMは仮想CPU 1個,メモリ 2GB
移送元ホスト
CPU
メモリ
OS
仮想化ソフトウェア
移送先メインホスト
移送先サブホスト
Intel Xeon E31270v2 3.5GHz
Intel Xeon E5640 2.67GHz
16GB
2GB(約1GBは使用中)
Linux 3.13.0
QEMU-KVM 2.1.2
-
17
物理メモリとスワップ領域の使用量
• マイグレーション前後での移送先メインホスト
でのメモリ使用状況を測定
• 従来手法
• 物理メモリに入りきらなかった約1GBはスワップ領域へ
• S-memV
マイグレーション前
マイグレーション後
使用量(MB)
1500
従来
1000
500
2000
マイグレーション前
マイグレーション後
1600
使用量(MB)
2000
• 転送閾値の512MBだけ物理メモリの使用量が増加
• スワップ領域は使用されなかった
1200
S-memV
800
400
0
0
物理メモリ
スワップ領域
物理メモリ
スワップ領域
18
マイグレーション時間(通常時)
• マイグレーションにかかる時間を測定
• 移送先ホストに十分なメモリ(4GB)がある場合を基準
とした
• 従来手法
40
• S-memV
• 28%長くなった
• 従来手法よりは
性能低下を抑えられる
マイグレーション時間[s]
• 45%長くなった
30
十分なメモリ
S-memV
従来手法
20
10
0
19
マイグレーション時間(メモリ負荷時)
• VMがメモリを頻繁に書き換える時のマイグレー
ション時間を測定
• memaslapベンチマークを実行
• VM内でmemcachedを動作させた
• 十分なメモリがある場合
100
• 従来手法
• 十分なメモリがある場合の
2.3倍
• S-memV
• 十分なメモリがある場合と
比べて11%の増加
マイグレーション時間[s]
• 通常時の1.7倍
80
十分なメモリ
S-memV
従来手法
60
40
20
0
20
関連研究
• MemX
[Deshpande et al. ‘10]
• VMが他のホストのメモリを利用可能
• マイグレーション時に他のホストのことは考えない
• Scatter-Gather Migration
[Deshpande et al. ‘14]
• 複数の中間ホストを経由してマイグレーション
• 最終的にはすべてのメモリを移送先ホストに転送
• Virtual Multiprocessor [金田ら ’06]
vNUMA [Chapman et al. ‘09]
• 複数ホストのCPUやメモリを用いて1つのVMを動作
• S-memVではVMを動かすのは1台のホストのみ
21
まとめ
• VMを分割してマイグレーションすることを可能
とするシステムS-memVを提案
• 移送先メインホストに入りきらないメモリ
• 直接、移送先サブホストに転送
• マイグレーション後
• メインホストとサブホスト間でメモリをスワップしながら
VMを実行
• KVMに実装し1対Nマイグレーションを実現
• 従来手法よりマイグレーション時間を短縮できること
を確認
22
今後の課題
• メモリアクセス頻度を利用してメインホストに
転送するメモリを選択できるようにする
• 現状では閾値を設定して選択
• メインホストとサブホスト間でメモリをスワッ
プできるようにする
• Linux 4.3のuserfaultfdを利用
• N対1マイグレーションおよび部分マイグレー
ションを実現
• 現状では1対Nマイグレーションのみ
23