BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について
-
Upload
takaaki-fukai -
Category
Technology
-
view
68 -
download
4
Transcript of BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について
BitVisor と KVM の性能比較時の落とし穴
深井貴明(筑波大学)
2016年11月30日
&BitVisor Advent Calendar
について
BitVisor と KVM の性能比較時の落とし穴
深井貴明(筑波大学)
2016年11月30日
発表趣旨
• BitVisor, KVM の性能比較時に陥った問題の紹介• なぜか KVM が異様に遅い
• なぜか KVM の方が速い• 時には物理マシンよりもKVMが速いことも…
• etc…
•同じ悲劇繰り返さないために情報を共有
3
Table of Contents• 背景
• 事例紹介
• Case 1: kvm-clock
• Case 2: 64bit ホストOS と 32bit ゲストOS 混在
• Case 3: CPU クロック
• Case 4: KVM ゲストへのメモリ割り当て
• Case 5: 割り込みの分散
• Case 6: BitVisor の EPT 用バッファ
• Case7: YCSB と NoSQL
• まとめ
4
BitVisor と KVM の設計比較
Hardware
BitVisor KVM
OS
Hardware
OS
パススルーアクセス
KVMBitVisor
5
KVM がアクセスに介入
共通点: VT-x で CPUと メモリを仮想化
想定される性能評価の結果
CPU, Memory インテンシブなワークロード
• KVM ≒ BitVisor <物理マシン
I/O インテンシブなワークロード
• KVM << KVM (PCI-passthrough) ≲ BitVisor
<物理マシン
6
事例紹介
• Case 1: kvm-clock
• Case 2: KVM ゲストへのメモリ割り当て
• Case 3: 64bit ホストOS と 32bit ゲストOS 混在
• Case 4: CPU クロック
• Case 5: BitVisor の EPT 用バッファ
• Case 6: YCSB と NoSQL
• Case 7: 割り込みの分散 (Rare)
7
BitVisor 遅い
KVM 速い
事例紹介
• Case 1: kvm-clock
• Case 2: KVM ゲストへのメモリ割り当て
• Case 3: 64bit ホストOS と 32bit ゲストOS 混在
• Case 4: CPU クロック
• Case 5: BitVisor の EPT 用バッファ
• Case 6: YCSB と NoSQL
• Case 7: 割り込みの分散 (Rare)
8
KVM 遅い
その他
Case1: kvm-clock現象: SysbenchのメモリテストでKVMが異様に遅い
9http://www.slideshare.net/DeepTokikane/kernel-vmkvmclock
原因究明作業
•方針:小さいブロックサイズで頻発するイベントを探す
• perf コマンドで,VMExit の回数を調べる→VMExit の回数はブロックサイズに依存しない
• straceで呼び出すシステムコールの回数を調べる→タイマの読み出しが頻発
10
原因と対策
•原因: kvm-clock の読み出しが遅い
•対策: clocksourceを tscに変更• /sys/devices/system/clocksouce/clocksouce0/current_clocksourceを変更
11
どの程度差があるのか?
12http://www.slideshare.net/DeepTokikane/kernel-vmkvmclock
どの程度差があるのか?
13http://www.slideshare.net/DeepTokikane/kernel-vmkvmclock
Case 2: KVM ゲストへのメモリ割り当
現象: 全体的にKVM が遅い
• コンソールは異様に重い
• NoSQL サーバのベンチマークスコアが悪い
原因: KVM の VM にメモリを割り当てすぎて,KVMホストがswapping
14
原因究明作業
•ふと思い立って KVM ホストのメモリ使用量を見る• free コマンドで
• swap が結構使われていた…
15
原因と対策
原因: KVM の VM にメモリを割り当てすぎ
対策: ホストでswapoff & メモリ割り当て量を調整
•適切な最大メモリ量を割り出す方法が見つからない
• Try and Error で少しづつ増やしたり減らしたりする
• swapoff時に割り当てメモリが多すぎる→ VM が起動しない
16
Case3: 64bit ホストOS と 32bit ゲストOS 混在評価環境
17
32bit Linux
Hardware
物理マシン
BitVisor
32bit Linux
Hardware
64bit Linux (KVM)
32bit Linux
Hardware
BitVisor KVM
Case3: 64bit ホストOS と 32bit ゲストOS 混在評価環境
18
32bit Linux
Hardware
物理マシン
BitVisor
32bit Linux
Hardware
64bit Linux (KVM)
32bit Linux
Hardware
BitVisor KVM
現象: ベンチマークの結果
(memcachedだったと思う)
これが一番速い
原因究明作業
ググる
• 「32bit linux slower」 とか
19
原因と対策
原因: 64bit OS の方がドライバが高速(らしい)
•物理マシンでは,32bit OS がMMIO を発行
• KVM では,64bit ホスト OS がMMIO を肩代わり
対策: 64 bit KVM ホストと32bit ゲストを混在させない
20
Case 4: CPUクロックの動的変化
現象:ベンチマークのスコア物理マシン, BitVisor < KVM
• YCSB の NoSQL のベンチマーク
• Sysbenchのmemory テスト
21
原因究明
• perf コマンドでベンチマークを解析
• CPU cycles は物理マシンの方が少ない
•実行時間はKVM の方が速い
• turbostatコマンドで CPU クロックを確認
22
原因と対策
原因: SpeedStep & C ステート関係の設定• Linux のブートオプションでCステートを制限
• processor.max_cstate=0
• これだと acpiの idle が走りクロックが上がらない• 一方 KVM はクロックが下がってなかった
対策: SpeedStepを無効化 & idle を polling に変更• ブートオプション idle=poll• 性能最大化の手段の一つらしい
• http://itpeernetwork.intel.com/how-to-maximise-cpu-performance-for-the-oracle-database-on-linux/
23
Case 5: BitVisor の EPT 用バッファ
現象: Redis + YCSB で BitVisor が遅い
原因究明:
• VMExit の回数を調べる→ EPT Violation が多い
• BitVisor のコードを読む
24
原因
原因: EPT 用のバッファが小さい & 枯渇時の処理が雑
•元々は4MB…4KB paging で 2GB マップできない• (4MB / 8 B) * 4KB = 2GB
•バッファ枯渇時にすべてのマッピングをクリアしている• 2013年ごろのBitVisorベースの話
25
対策
•バッファサイズを増やす• core/vt_ept.hの #define NUM_OF_EPTBL マクロを変更
• Huge Page を使う
•バッファ枯渇時の処理を改善する• パッチを加工 by 榮樂さん
26
Case 6: 割り込み分散の有無
現象: KVM だけ速い
原因: 割り込みがKVM だけ分散している
とあるA社マザーボード
•割り込みをラウンドロビンで分散できない
KVM
•割り込みを仮想化する段階で分散する
27
Case 7: NoSQL
現象: YCSB のスコアをグラフにすると不思議な形に
• クライアントのスレッド数に比例せずにギザギザになる
原因究明: NoSQL の処理について調査
原因: NoSQL の永続化処理が非同期に走るため
対策: 永続化処理を無効にする,etc…
28
因果関係まとめ原因 結果
kvm-clock 遅い 頻繁にタイマを読むとKVMが遅い
KVMホストのswapping KVMが遅い
32bit/64bit OS 混在 64bit ホストのKVM> 32bit ゲストの物理マシン
speedstep + Cステート無効でCPUクロックが落ちる
物理マシンが遅い
EPTクリアが頻発 BitVisorが遅い
割り込み分散の有無 分散しないと遅い
NoSQLが非同期に永続化処理 スコアが不安定に29
対策まとめ原因 対策
kvm-clock 遅い clocksourceを tscに変更
KVMホストのswapping ホストでswapoff
32bit/64bit OS 混在 32bit/64bitを混在させない
speedstep + Cステート無効でCPUクロックが落ちる
BIOSで speedstep無効化 +poll=idle
EPT クリアが頻発 EPT用のバッファを増やす,パッチを書く,etc
割り込み分散の有無 分散の有無を揃える
NoSQLが非同期に永続化処理
永続化を無効化
30
便利なツール
• perf コマンド
• *trace コマンド• strace, ftrace, dtrace
• turbostatコマンド
31
その他工夫
• ベンチマークなどは徹底的にスクリプト化• 測定からグラフ化まで
•不可思議なことはたくさん起きる→ 測定の再現,繰り返しが重要
• iPXE, sshなどを駆使すれば,物理マシン/BitVisor/KVMの切り替えも自動化できる
32
まとめ
•性能測定時に陥った問題について紹介• 現象,原因究明の過程,原因,対策
•皆さんの研究,開発のお役に立てば幸いです
33
Q&A
34
BitVisor Advent Calendarについて深井貴明(筑波大学)
2016年11月30日
端的に言うと
皆さん
BitVisor Advent Calendar の記事を書いてください
36
What is “Advent Calendar”?
アドベントカレンダー - Wikipediaより
• 「アドベントカレンダー(Advent calendar)は、クリスマスまでの期間に日数を数えるために使用されるカレンダーである。」
37
What is “Advent Calendar”?
アドベントカレンダー - Wikipediaより
• 「アドベントカレンダー(Advent calendar)は、クリスマスまでの期間に日数を数えるために使用されるカレンダーである。」
• 「インターネット上などで、アドベントカレンダーに見立てて12月に一人、または複数人で毎日記事を投稿していくという企画がある。特にプログラミングに関連するアドベントカレンダーの企画が近年多数行われている。」
38
昨年のAdvent Calendarの例(システムソフトウェア)• Linux
• Gentoo
• Arch Linux
• FreeBSD
• NetBSD
• etc…
39
40
そして
http://qiita.com/advent-calendar/2015/bitvisor
を僕が作りました
41http://qiita.com/advent-calendar/2015/bitvisor
BitVisor Advent Calendar をやる意義
BitVisor コミュニティの問題に対する起爆剤
• コミュニティの盛り上がりに欠ける
•深刻なドキュメント不足
みんなでAdvent Calendar の記事を書けば
• お祭りっぽく盛り上がる
• BitVisor に関するブログ記事が増える
42
今の BitVisor Advent Calendar 2016
43http://qiita.com/advent-calendar/2016/bitvisor
何を書けばいいのか?
BitVisor に絡んでいればなんでもOK
• BitVisor の xx 機能を試してみた (VPN, 暗号化など)
• BitVisor で xx やってみた
• BitVisor 思い出話
• BitVisor 苦労話
• BitVisor に絡んだ研究紹介
• BitVisor で困っていること
• BitVisor でこんなことできたらおもしろそう
• etc…
44
まとめ
皆さん
BitVisor Advent Calendar の記事を書いてください
45
BitVisorコミュニティの発展のために
Q&A
46