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
490
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Performance tuning of VMM using KVM
YushoYamaguchi
March 20, 2026
More Decks by YushoYamaguchi
See All by YushoYamaguchi
Kubernetes: Utilize Secondary Network
yushoyamaguchi
0
26
OpenStack Tenant Network Isolation: Considerations and Practical Examples
yushoyamaguchi
0
410
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
450
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
410
Practical Orchestrator
shlominoach
191
11k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
55k
The browser strikes back
jonoalderson
0
1.4k
Rails Girls Zürich Keynote
gr2m
96
14k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
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