46
BitVisor KVM 性能比較時の落とし穴 深井 貴明(筑波大学) 20161130& BitVisor Advent Calendar について

BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Embed Size (px)

Citation preview

Page 1: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

BitVisor と KVM の性能比較時の落とし穴

深井貴明(筑波大学)

2016年11月30日

&BitVisor Advent Calendar

について

Page 2: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

BitVisor と KVM の性能比較時の落とし穴

深井貴明(筑波大学)

2016年11月30日

Page 3: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

発表趣旨

• BitVisor, KVM の性能比較時に陥った問題の紹介• なぜか KVM が異様に遅い

• なぜか KVM の方が速い• 時には物理マシンよりもKVMが速いことも…

• etc…

•同じ悲劇繰り返さないために情報を共有

3

Page 4: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

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

Page 5: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

BitVisor と KVM の設計比較

Hardware

BitVisor KVM

OS

Hardware

OS

パススルーアクセス

KVMBitVisor

5

KVM がアクセスに介入

共通点: VT-x で CPUと メモリを仮想化

Page 6: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

想定される性能評価の結果

CPU, Memory インテンシブなワークロード

• KVM ≒ BitVisor <物理マシン

I/O インテンシブなワークロード

• KVM << KVM (PCI-passthrough) ≲ BitVisor

<物理マシン

6

Page 7: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

事例紹介

• 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

Page 8: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

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 遅い

その他

Page 9: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case1: kvm-clock現象: SysbenchのメモリテストでKVMが異様に遅い

9http://www.slideshare.net/DeepTokikane/kernel-vmkvmclock

Page 10: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因究明作業

•方針:小さいブロックサイズで頻発するイベントを探す

• perf コマンドで,VMExit の回数を調べる→VMExit の回数はブロックサイズに依存しない

• straceで呼び出すシステムコールの回数を調べる→タイマの読み出しが頻発

10

Page 11: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因と対策

•原因: kvm-clock の読み出しが遅い

•対策: clocksourceを tscに変更• /sys/devices/system/clocksouce/clocksouce0/current_clocksourceを変更

11

Page 12: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

どの程度差があるのか?

12http://www.slideshare.net/DeepTokikane/kernel-vmkvmclock

Page 13: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

どの程度差があるのか?

13http://www.slideshare.net/DeepTokikane/kernel-vmkvmclock

Page 14: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case 2: KVM ゲストへのメモリ割り当

現象: 全体的にKVM が遅い

• コンソールは異様に重い

• NoSQL サーバのベンチマークスコアが悪い

原因: KVM の VM にメモリを割り当てすぎて,KVMホストがswapping

14

Page 15: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因究明作業

•ふと思い立って KVM ホストのメモリ使用量を見る• free コマンドで

• swap が結構使われていた…

15

Page 16: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因と対策

原因: KVM の VM にメモリを割り当てすぎ

対策: ホストでswapoff & メモリ割り当て量を調整

•適切な最大メモリ量を割り出す方法が見つからない

• Try and Error で少しづつ増やしたり減らしたりする

• swapoff時に割り当てメモリが多すぎる→ VM が起動しない

16

Page 17: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case3: 64bit ホストOS と 32bit ゲストOS 混在評価環境

17

32bit Linux

Hardware

物理マシン

BitVisor

32bit Linux

Hardware

64bit Linux (KVM)

32bit Linux

Hardware

BitVisor KVM

Page 18: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case3: 64bit ホストOS と 32bit ゲストOS 混在評価環境

18

32bit Linux

Hardware

物理マシン

BitVisor

32bit Linux

Hardware

64bit Linux (KVM)

32bit Linux

Hardware

BitVisor KVM

現象: ベンチマークの結果

(memcachedだったと思う)

これが一番速い

Page 19: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因究明作業

ググる

• 「32bit linux slower」 とか

19

Page 20: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因と対策

原因: 64bit OS の方がドライバが高速(らしい)

•物理マシンでは,32bit OS がMMIO を発行

• KVM では,64bit ホスト OS がMMIO を肩代わり

対策: 64 bit KVM ホストと32bit ゲストを混在させない

20

Page 21: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case 4: CPUクロックの動的変化

現象:ベンチマークのスコア物理マシン, BitVisor < KVM

• YCSB の NoSQL のベンチマーク

• Sysbenchのmemory テスト

21

Page 22: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因究明

• perf コマンドでベンチマークを解析

• CPU cycles は物理マシンの方が少ない

•実行時間はKVM の方が速い

• turbostatコマンドで CPU クロックを確認

22

Page 23: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因と対策

原因: 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

Page 24: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case 5: BitVisor の EPT 用バッファ

現象: Redis + YCSB で BitVisor が遅い

原因究明:

• VMExit の回数を調べる→ EPT Violation が多い

• BitVisor のコードを読む

24

Page 25: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

原因

原因: EPT 用のバッファが小さい & 枯渇時の処理が雑

•元々は4MB…4KB paging で 2GB マップできない• (4MB / 8 B) * 4KB = 2GB

•バッファ枯渇時にすべてのマッピングをクリアしている• 2013年ごろのBitVisorベースの話

25

Page 26: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

対策

•バッファサイズを増やす• core/vt_ept.hの #define NUM_OF_EPTBL マクロを変更

• Huge Page を使う

•バッファ枯渇時の処理を改善する• パッチを加工 by 榮樂さん

26

Page 27: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case 6: 割り込み分散の有無

現象: KVM だけ速い

原因: 割り込みがKVM だけ分散している

とあるA社マザーボード

•割り込みをラウンドロビンで分散できない

KVM

•割り込みを仮想化する段階で分散する

27

Page 28: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Case 7: NoSQL

現象: YCSB のスコアをグラフにすると不思議な形に

• クライアントのスレッド数に比例せずにギザギザになる

原因究明: NoSQL の処理について調査

原因: NoSQL の永続化処理が非同期に走るため

対策: 永続化処理を無効にする,etc…

28

Page 29: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

因果関係まとめ原因 結果

kvm-clock 遅い 頻繁にタイマを読むとKVMが遅い

KVMホストのswapping KVMが遅い

32bit/64bit OS 混在 64bit ホストのKVM> 32bit ゲストの物理マシン

speedstep + Cステート無効でCPUクロックが落ちる

物理マシンが遅い

EPTクリアが頻発 BitVisorが遅い

割り込み分散の有無 分散しないと遅い

NoSQLが非同期に永続化処理 スコアが不安定に29

Page 30: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

対策まとめ原因 対策

kvm-clock 遅い clocksourceを tscに変更

KVMホストのswapping ホストでswapoff

32bit/64bit OS 混在 32bit/64bitを混在させない

speedstep + Cステート無効でCPUクロックが落ちる

BIOSで speedstep無効化 +poll=idle

EPT クリアが頻発 EPT用のバッファを増やす,パッチを書く,etc

割り込み分散の有無 分散の有無を揃える

NoSQLが非同期に永続化処理

永続化を無効化

30

Page 31: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

便利なツール

• perf コマンド

• *trace コマンド• strace, ftrace, dtrace

• turbostatコマンド

31

Page 32: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

その他工夫

• ベンチマークなどは徹底的にスクリプト化• 測定からグラフ化まで

•不可思議なことはたくさん起きる→ 測定の再現,繰り返しが重要

• iPXE, sshなどを駆使すれば,物理マシン/BitVisor/KVMの切り替えも自動化できる

32

Page 33: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

まとめ

•性能測定時に陥った問題について紹介• 現象,原因究明の過程,原因,対策

•皆さんの研究,開発のお役に立てば幸いです

33

Page 34: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Q&A

34

Page 35: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

BitVisor Advent Calendarについて深井貴明(筑波大学)

2016年11月30日

Page 36: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

端的に言うと

皆さん

BitVisor Advent Calendar の記事を書いてください

36

Page 37: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

What is “Advent Calendar”?

アドベントカレンダー - Wikipediaより

• 「アドベントカレンダー(Advent calendar)は、クリスマスまでの期間に日数を数えるために使用されるカレンダーである。」

37

Page 38: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

What is “Advent Calendar”?

アドベントカレンダー - Wikipediaより

• 「アドベントカレンダー(Advent calendar)は、クリスマスまでの期間に日数を数えるために使用されるカレンダーである。」

• 「インターネット上などで、アドベントカレンダーに見立てて12月に一人、または複数人で毎日記事を投稿していくという企画がある。特にプログラミングに関連するアドベントカレンダーの企画が近年多数行われている。」

38

Page 39: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

昨年のAdvent Calendarの例(システムソフトウェア)• Linux

• Gentoo

• Arch Linux

• FreeBSD

• NetBSD

• etc…

39

Page 40: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

40

そして

http://qiita.com/advent-calendar/2015/bitvisor

を僕が作りました

Page 41: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

41http://qiita.com/advent-calendar/2015/bitvisor

Page 42: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

BitVisor Advent Calendar をやる意義

BitVisor コミュニティの問題に対する起爆剤

• コミュニティの盛り上がりに欠ける

•深刻なドキュメント不足

みんなでAdvent Calendar の記事を書けば

• お祭りっぽく盛り上がる

• BitVisor に関するブログ記事が増える

42

Page 43: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

今の BitVisor Advent Calendar 2016

43http://qiita.com/advent-calendar/2016/bitvisor

Page 44: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

何を書けばいいのか?

BitVisor に絡んでいればなんでもOK

• BitVisor の xx 機能を試してみた (VPN, 暗号化など)

• BitVisor で xx やってみた

• BitVisor 思い出話

• BitVisor 苦労話

• BitVisor に絡んだ研究紹介

• BitVisor で困っていること

• BitVisor でこんなことできたらおもしろそう

• etc…

44

Page 45: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

まとめ

皆さん

BitVisor Advent Calendar の記事を書いてください

45

BitVisorコミュニティの発展のために

Page 46: BitVisor と KVM の性能比較時の落とし穴 & BitVisor Advent Calendar について

Q&A

46