Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Performance tuning of VMM using KVM
Search
YushoYamaguchi
March 20, 2026
0
210
Performance tuning of VMM using KVM
YushoYamaguchi
March 20, 2026
Tweet
Share
More Decks by YushoYamaguchi
See All by YushoYamaguchi
OpenStack Tenant Network Isolation: Considerations and Practical Examples
yushoyamaguchi
0
300
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
240
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
980
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Side Projects
sachag
455
43k
A Modern Web Designer's Workflow
chriscoyier
698
190k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
220
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
180
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Transcript
KVMを使うVMMの 性能ボトルネック解析をした話 Yamaguchi Yusho 1
自己紹介 • 仮想化技術とネットワーク技術とOSSが好きな駆け出しエンジニア • 仕事は通信キャリアでプライベートクラウドの開発運用をしている oOpenStack(クラウドを作るためのOSS)を利用して構築 o 今回のテーマであるKVMには大変お世話になっている 2
前提知識 • KVM: • Linux Kernel内でVMを動かすためのフレームワーク • 各CPUの仮想化支援機構を利用してゲストコードを実行するため、シンプル な命令実行はネイティブ並みに高速 •
デバイスエミュレーション等に関しては後述のVMMに任せる • Kernel Moduleであり、ioctlシステムコールを使って操作 • KVMを使うVMM • OSなどのゲストワークロードを動かすためのKVMのセッティング→起動 • KVMが処理できないゲストの命令(デバイスI/Oなど)をエミュレーションして結 果をゲストに伝える 等の役割を果たすソフトウェア (有名なもので言うとQEMU-KVM) 3
今回やったこと • 簡易なVMM上で簡易なゲストOSを動かして、仮想化技術に対する理解 を深めたい! • 利用したソフトウェアは以下 • VMM: kvmm oDisk/Serial/割込Controller
のみをエミュレートした簡易なVMM ohttps://github.com/yushoyamaguchi/kvmm • ゲストOS: jos oMITのOS開発の授業で利用されているC言語製の簡易なOS ohttps://github.com/yushoyamaguchi/my_jos/tree/kvmm_lab3 4
VMM実行の流れ 5 • カーネル→ユーザスペース • ユーザスペース→カーネル
動かしてみた結果 • kvmm上でjosが起動はするが、ものすごーーく遅い o1コマンド実行に1分くらいかかる • QEMU上でjosを動かすと、サクサク動く • → 原因究明の旅に 6
切り分け1: VMM側にデバッグプリントを入れ てどこに時間がかかっているかを知る • KVMを呼んでからEXITするまでの時間が、kvmm側でデバイスエミュ レーションしている時間の、約80倍かかっている 7 10桁 9桁
切り分け2: Perfで解析 • VCPU へのEnter 自体にとても多くの時間がかかっている • 仮説: Exit→ 再Enterが頻発しすぎている...?
8
切り分け3: Exitの主要原因を調査 • ゲストでのI/O命令実行に伴うExitが圧倒的に多い • QEMU上で実行した時は、ここまで偏りがなかった • デバッグプリント入れたところ、0x84番ポートへのI/Oがほとんど 9
切り分け4: ゲストOSのコードから 該当PortへのI/Oをしている箇所を探す • delay() 関数 ...? • このdeley()を呼び出しているのはどこ? 10
原因判明! • シリアルポートの中のレジスタをポーリングして、Ready bit が立つま で待つコード(上限回数12800回) • kvmmではこのデバイスのエミュレーションをしていなかった o そのためReadyになることがない
• この処理が、consoleへの出力時に毎回呼ばれていた • その度に毎回大量のI/O-Exitが発生 11
総括 • この部分のコードをゲストOSからコメントアウトしたら、kvmm上でも サクサク動いた • I/O Exit → 再Enterに伴って起こるシステムコール呼び出しに莫大な オーバーヘッドが存在
12
おまけ: この知識が仕事に役立った話 • 運用しているOpenStack基盤で、CPUコアを占有してパケット処理を する(DPDK)VMが、想定通りのパフォーマンスを出せていないという 問い合わせを受けた • VMの統計情報を見ると、CPU HaltによるExitが頻発していることが 判明→コアを占有するはずなのにおかしい...
• VM 実装者に問い合わせたところ、動作想定よりvirtioキューが少な い環境であり、CPU時間を手放してしまっていることが判明 13