Slide 1

Slide 1 text

システム論文輪読会 2015/03/04 @garasubo 1

Slide 2

Slide 2 text

KVM/ARM: The Design and Implementation of the Linux ARM Hypervisor Christoffer Dall and Jason Nieh. 2

Slide 3

Slide 3 text

自己紹介  Twitter: @garasubo  大学院生  研究分野: 組込みOS、ハイパーバイザ 3

Slide 4

Slide 4 text

論文概要  KVMをVE付きのARMで動かすときの実装 についての議論  full virtualなARMハイパーバイザはこれが初  ARMとx86とのアーキテクチャが異なるため、 設計が変わる  オープンソースコミュニティとの関わり 方についても  著者:Christoffer Dall and Jason Nieh.  ASPLOS 2014で発表 4

Slide 5

Slide 5 text

KVMとは  Linux上で動作するハイパーバイザ  Kernel-based Virtual Machine  オープンソース  Type Ⅱの設計  x86やAMDなどには対応 5 T. Shinagawa et al. “BitVisor: A Thin Hypervisor for Enforcing I/O Device Security”より

Slide 6

Slide 6 text

論文の貢献  KVM/ARMのアーキテクチャ  x86とは異なる設計をする必要がある  Split designを採用  Linux上で容易に導入できる設計  Bare metalだとhardwareサポートが大変  実際にLinuxカーネルに組み込まれている  実験としてx86のKVMと比較  将来のハードウェアについての提言 6

Slide 7

Slide 7 text

ARMの仮想化対応について  Virtualization Extensionとして一部の ARMv7とARMv8アーキテクチャに実装  Sensitive命令へのTrapがハードウェア的に 実現可能 7 バイナリ変換やOSへの直接的変更なしでの 仮想化が実現可能に

Slide 8

Slide 8 text

ARMのCPUモードについて Secure worldには直接行けない Hyper trap Guest OS 8 P. Varanasi et al. “Hardware-supported Virtualization on ARM”より

Slide 9

Slide 9 text

ARMのMMUについて  Short-descriptorとLong-descriptorの2つの形式 のページテーブル  Longだと40bitの物理アドレスが使える  Non-SecureでのHyp mode以外では2段階のア ドレス変換(LPAE)  仮想アドレス(VA)→中間物理アドレス(IPA)→ 実物理アドレス(PA)  2段階目では絶対に  Long-descriptorを使う 9

Slide 10

Slide 10 text

ARMとx86の違い x86 ARM CPUモード ハイパーバイザ用に全く同じ モードが提供 例外発生により仮想マシンと ハイパーバイザを行き来でき る 例外発生すると特殊なモードに 移行 仮想マシンとハイパーバイザに 同じモードを提供しているわけ ではない ハイパーバイザ モードへの切り 替え すべての状態がハードウェア 的に保存される 必要な状態のみソフトウェアで 保存できる タイマー・割り 込みの仮想化 最近導入された仮想APICサ ポートを使えばできる virtual timerとvirtual GICをサ ポート 10

Slide 11

Slide 11 text

Split-mode Virtualization できればHypモードですべて行いたいが、 ホストLinuxがKernelモードで動作  x86ならばhypervisor用モードでホストLinux を動かせる HypモードKernelモードをまたがる設計 11

Slide 12

Slide 12 text

Split-mode Virtualization • Lowvisor • contextやinterruptなどの管理 • Highvisor • Linuxの機能を使う高度な機能 12

Slide 13

Slide 13 text

実装詳細  CPUの仮想化  sensitive命令をlowvisorで受け、コンテクストスイッチ  メモリの仮想化  Stage-2の変換を行う  Stage-2のテーブルはhighvisorからも管理できる  I/Oの仮想化  MMIOのみなのでページテーブルで対処  QEMUとVirtioを使ったユーザースペースでの仮想化  割り込みの仮想化  ゲストでの割り込みはHypモードで受ける  VGICを使いゲストへの割り込み通知  ゲストにはGICは直接触らせないで仮想的なものを触らせる  タイマーの仮想化  Virtual timerを使うことで読み込みにはHypモードに入らなくてよい  Virtual timerからの割り込みはHypモードで受ける 13

Slide 14

Slide 14 text

Linuxカーネルに組み込まれる際 の知見  コードのメンテナンス性は大事  開発者に信頼されるようになれ  小さなコードから始めよう  友達をつくりコミュニティに参加しよう  指揮系統を知るべき  根気強くなれ 14

Slide 15

Slide 15 text

実験結果  Cortex A-15の2コアのボードで実験  Core i7のボードで動くKVMと比較  実際のパフォーマンスより仮想化時とネイティ ブのときのパフォーマンスの差に注目  ベンチマーク  小さいゲストOS  lmbench  シングル・マルチコアのアプリケーション  エネルギー効率についても調べる 15

Slide 16

Slide 16 text

実験結果 16

Slide 17

Slide 17 text

実験結果考察  VGIC/vtimerを利用したほうが良い結果 となる  差が顕著なのはvtimerが使えないせい  マルチコアではIPIによるオーバーヘッ ド  x86はEOIでハイパーバイザをはさみ更に遅 い  アプリケーションではARMのほうがい い結果のものと悪いものと両方 17

Slide 18

Slide 18 text

エネルギー効率  基本的にARMのほうが上 18

Slide 19

Slide 19 text

コードの複雑さ x86のほうがコード量が多い理由  互換性の確保  x86の複雑な命令  pagingモードの多さ  割り込みタイマー対応 19

Slide 20

Slide 20 text

ハードウェアデザインについ て  メモリーのモデルを同じにするべき  ARMだとkernelとhypモードのモデルが異なる  VGICへのアクセスパフォーマンスは重要  VGICへのアクセスを高速化するかアクセス回数が 少なくなるような設計に  Inter-Processor Interrupt(IPI)によるtrapを なくす  IPIを送る際のtrapがどうしても生じる 20

Slide 21

Slide 21 text

関連研究  従来のARM上のHypervisor  Paravirtualなものがほとんど  あまり広く使われていない  Xen on ARM  KVMより設定が大変  Microkernel型  TCBを小さくできる  設計が全く違う 21

Slide 22

Slide 22 text

まとめ  KVMをARMに移植した  Split-modeデザインは有効だった  実行コスト・エネルギーのオーバーヘッドは10%にお さまった  x86版KVMとも遜色ないオーバヘッドに抑えられた  オープンソースコミュニティへの接し方の提言  ハードウェアデザインへの提言  ちなみにRaspberry Pi 2がCortex-A7らしいので このKVMを試せる? 22