Virtualizing I/O Devices on VMware Workstation’s

Presented by
M.Miwa M.Suekane N.Tei
2002/1/21
© 2002 All rights reserved.
Chapter 1
イントロダクション
用語解説1




VMM
Virtual Machine Monitor(従来のバーチャルマシ
ンで物理マシンとバーチャルマシンをつなげるアプリ
ケーション層)
VMware
VMApp、VMM、VMDriverによって構成されるソフト
ウェア
VMApp
a user-level application(いろいろなドライバが入っ
ていて、I/Oデバイスを仮想化するアプリケーション)
VM Driver
Driver to switch between VMM and VMApp(ホス
トワールドとVMワールドの切り替えドライバ)
バーチャルマシンの歴史


バーチャルマシンは1960年代にIBMによって、
メインフレームコンピュータへの対話型の同
時アクセスを提供するために最初に開発され
たもの
現在のVMware Workstationはメインフレー
ムクラスのバーチャルマシン技術をPCディス
クトップやワークステーションコンピュータに応
用させたもの
従来のバーチャルマシンの概念



非常に高価なメーンフレームハードウェアをタイム
シェアリングする手段として使われる
バーチャルマシンは完全に保護された独立の物理
マシンのハードウェアのコピーであって、ユーザはあ
たかも自分専用のの物理マシンを持っているような
感覚が得られる
ソフトウェア開発者達はプログラムを書くときや試す
ときに、物理マシンをフリーズさせたり、ほかのユー
ザに影響を与えたりすることを心配する必要がない
バーチャルマシンを理解するため
の予備知識

CPUの特権モードとユーザモードにつて




CPUのプログラム実行モードに特権モードと非特権モード
特権モード(カーネルモード、スーパバイザモード):あら
ゆるハードウェア資源にアクセス可能、オペレーティング
システムの実行モード
非特権モード(ユーザモード):ハードウェア資源へのアク
セスを制限、監視下でプログラムを実行、通常のプログラ
ムの実行モード
スケジューリングはむずかしい


ある特権命令をするとVMMでトラップがおきる
たとえば、二つの仮想マシンが同じ物理番地にアクセス
するときなど
従来のバーチャルマシンの構造



I/Oデバイスにアクセス
する時は特権モードに
なる
VMMが物理マシンの
ハードウェアをコント
ロールし、バーチャルマ
シンを生成する
各バーチャルマシンが
完全な物理マシンのよ
うにふるまって、独自の
OSを走らせる
Virtual Machine Monitorの動作


VMができるだけ直接ハードウェア上で動作
するようにすることが必要。
→パフォーマンス向上のため。
VMMは、 VMが他のVMやハードウェアでの
操作に支障をきたすような場合にのみ操作
(VMMが一旦制御を奪い、その操作を安全
な方法でエミュレートした後、VMに制御を戻
す。)を行う。
→個々のVMの保護、独立性の保証のため。
VMMの利点


一つの物理マシンの上でいくつかの異なる
OSとアプリケーションを走らせる
バーチャルマシンを異なる物理マシンの間
に移動させることができる


バーチャルマシンのデスクはホストマシンのファ
イルシステムになっている
バーチャルマシンが一つの物理マシンの上
でいろいろなサービスを提供することできる
⇒しかし、従来のVMMが普通のPCに応用する事できない
Chapter 1.1
PCプラットフォームの仮想化
普通のPCに応用できない従来の
VMMが理由

バーチャル化できないプロセッサ


多様なハードウェアデバイス



Intel IA-32 processor
多様なデバイスごとにドライバを作る時の労力は大変
従来のVMMは高価なメーンフレームコンピュータのハード
ウェアのためにそれぞれのドライバを作ったが
プリインストールされたソフトウェア(OS)

Windows NT ,Windows 2000 and Linuxなど
Chapter 2
ホスト化によるVMの仕組み
用語解説2

ゲストOS
仮想マシンの上で稼動するOS

ホストOS
ホストマシンの上で稼動するOS

ホストマシン
VMwareをインストールする実際の物理的マシン

バーチャルマシン
ゲストOSが稼動するVMwareが作る仮想的なマシン
VMware Workstationとは?
特徴
 既存のOSとの共存が可能で、そのOS(Host
OS)にデバイスサポートを任せる、ホスト化さ
れた機構。
(=Hosted Virtual Machine Architecture)
 CPUに集中的な負荷がかかってもNativeに
近い性能を実現。
 OSに通常のアプリケーションと同様にインス
トールされる。
VMwareの機構


VM AppがHost OSに
ロードされたVM Driver
を使ってVMMを確立。
VMMがCPUを仮想化、
VM AppがHost OSを
使ってデバイスをサ
ポート、VM Driverが両
者の制御の移行をサ
ポート。
従来のVMMとVMwareの違い
従来のVMMとVMwareの違い

プロセッサに対する要求の低下
John Scott Robin&Cynthia E.Irvine
「Analysis of the Intel Pentium’s Ability to Support a Secure Virtual Machine
Monitor」→250個の命令のうち17個が仮想化に向かない。

さまざまのハードウェアへの対応




ドライバの作成のかわりにホストOSのファイルシステムを
つかって仮想デバイスにする
IDEとSCSI CD-ROM両方に対応できる
ホストOSのほうから抽象のCD-ROMを提供してくれる
プリインストールされたソフトウェアとの共存

VMwareはプリインストールされたOSに上にインストール
される
VMwareの従来のVMの問題点への対応
仮想化できないプロセッサ
→ハードウェアへのアクセス(I/O操作)は全てHostへ
移行。
 PCハードウェアの多様性
→デバイスのサポートをHostOSに任せることにより回
避。
例. CD-ROM(次ページ)
 プリインストールされたソフトウェア(OS)
→アプリケーションとしてインストールされるため、もと
のHostOSに影響は出ない。

PCハードウェアの多様性への対応の例
CD-ROMにはIDEとSCSIが存在。
 VMでは
それぞれのデバイスドライバ、プログラム
が必要。
 VMwareでは
HostOSから仮想化されたCD-ROMが提供
され、VMMはそれをCD-ROMとして認識。
→仮想化CD-ROMへのドライバ、プログラム
を一つ持てば全ての規格に対応。
VMwareのホスト化の問題点
I/Oパフォーマンスの低下
→I/Oへの集中的な負荷に対し、VMMとホストのworld
switchが頻繁に起こり余分なCPU負荷を引き起こす。
 HostOSの完全なマシンリソースの支配による影響
→ HostOSは、少量を除いて、VMMに割り当てられた
メモリを使用可能であり、VMMへのリソース割当て
に失敗すると性能が犠牲になる。
⇒以下、特に最も影響の大きいI/Oパフォーマンスの
低下に焦点を当てる。

Chapter 2.1
I/Oデバイスの仮想化
VMwareのVMのデバイス構成





PS/2キーボード、マウス
フロッピーディスクドライブ
ATAディスクやATAPI CD-ROMのIDEコントローラ
Sound Blaster 16 サウンドカード
シリアル/パラレルポート
他に仮想BusLogic SCSIコントローラやAMD PCNet
Ethernetアダプタ、VMware仮想ディスプレイカード
対応SVGAビデオコントローラを仮想PCIスロットに取
り付け可能。(SVGA以外はOSにドライバ付属)
I/Oデバイスのバーチャル化



VMMがゲストOSのI/O操作をすべて受け取る
PCの中で、プロセスは特権モードのIA-32 IN/OUT
命令で行われている
物理デバイスにアクセスするとき、必ずVMAppがコ
ントロールをする、アクセスしないときはVMMで処理
できる場合もある。


ステータスポートやあとで使用するデータの保持はVMM
で処理することができる
仮想化するデバイスを減らせば、処理すべきI/O
ポートもしくは把握すべき状況を減らすことができる
I/Oデバイスのバーチャル化による
問題(オーバヘッド)

I/Oデバイスのバーチャル化のとき、ホストとVMMの
スイッチングのためにオーバヘッドが起こりうる


高い転送率と短い呼び出し時間の場合のみ
逆にキーボードはこの仕組みにとても適している
ハードウェアとコミュニケーションするときの特権
モードをコントロールするためのコスト
→上記のデバイスの条件を満たすものとして、
Network interface card (NIC) があり、以下で
はこれを例として取り上げる

Chapter 2.2
NICの仮想化
Network Interface Card
NIC=Ethernetカード

Ethernetとは?
安易かつ低コストでLANの構築が可能なため、
LANの代名詞的存在
 語源はエーテル(Ether):伝達を媒介するもの



EthernetとPCを接続するハードウェアがNIC
スループットが大きく遅延の小さいデバイス
の代表例(i.e.オーバーヘッド改善の余地の
大きいデバイス)
NIC
Ethernet

仮想NIC


NICをエミュレートしたものが仮想NIC
NICのエミュレーションは二種類ある
1.
2.
hOSの物理NICと同じ物理ネットワークと接続
hOS上の仮想ネットワークと接続(今回は扱わない)
⇒いずれもVMNet Driverにより実現
仮想NICの動作

パケット送信


仮想NICは自分固有のMACアドレス付のパケット
を送信する
パケット受信


VMNet Driverが仮想ネットワークHUBとブリッジ
した物理NICを無差別モードで動作させ、LANを
監視する
自分のMACアドレス宛パケットがあったら受信
表面上の動作は完全に「仮想NIC=物理NIC」
スピードはどうか?次項で動作を細かく追ってみる
Chapter 2.3
仮想NICによるパケット送受信
NICの動作:パケット送信
パケット送信はLanceポートへのアクセス
をエミュレートするためにVMMだけでは処
理できず、VMApp(Host World)への切替
が必要
点線部はポートアクセスを仮想化することによるオーバーロード部分
NICの動作:パケット受信
hOSのNICはパケットをVMNetに
送信するので、VMAppは定期的に
select()をVMNetドライバに発行し
てgOSに送るべきパケットの有無を
確認する
gOSに送るべきパケットがあった
らIRQを発行して受信処理
最後にACKをhOS側(物理ネット
ワーク)に発行する
点線部はポートアクセスを仮想化することによるオーバーロード部分
仮想NICによる送受信のまとめ

ポートアクセスの仮想化において
VMMの内部で処理できずにホスト
領域のVMAppに切り替えて処理す
る、余分なオーバーヘッドが生じる
⇒
これらのオーバーヘッドはI/O性
能とCPU負荷にどれくらいの影響
を与えているのだろうか?
⇒
ネットワーク処理におけるVMMとVMAppの時間配
分について次章で検討する
Chapter 3
仮想マシンにおける
ネットワーク性能の検証
概要
余分なオーバーヘッドのため送受信の遅延や
CPUの独占が起きている!!
OVERHEADS
1.
2.
3.
VMがハードに直接アクセスするときに必ず発生する
VMMとhOS間のworld switch
I/O割込処理にVMM/gOS/hOS 3つのI/O割込が必要
gOSのパケット転送は・・・


gOSのドライバとhOSのドライバ双方を伴う
gOSの物理メモリからhOSのカーネルバッファに余計なコピー
が必要
⇒ World Switchの回数を少なくする最適化をすると・・・
低速マシンはTCP転送を倍速にできた
⇒ 高速マシンはCPU使用率を下げることができた


Chapter 3.1
パケット転送に関する実験
3.1 実験環境
2台のPCの性能
PC-350



PentiumⅡ350MHz
128MB RAM
Linux2.2.13kernel
For VM(VMware2.0)

64MB RAM
PC-733



PentiumⅢ733MHz
256MB RAM
Linux2.2.17kernel
For VM (VMware2.0)

128MB RAM
ゲストOSはRedHatLinux6.2(2.2.17-14kernel)
VMのNICはvirtual AMD Lance NIC
(Lance=Local Area Network Controller for Ethernet)
ドライバはPCNet32ドライバ
Experiment 1


前述の2台のPCを100MbpsのNICとクロス
ケーブルを用いて接続。
100MBのデータを4096BytesごとにPC-733か
らPC-350に転送したが・・・
⇒
64Mbpsしかスピードが出ない・・・
(i.e. CPUの速さに性能が縛られている)
⇒ どこでCPU時間を消費しているのか
を次の実験で調べる
Experiment 2
目的
パケット転送におけるCPU時間の消費部分の
判定
方法
PentiumのTime Stamp Counterレジスタを用
いて時間を計測する。TSCレジスタを用いると
無駄な関数呼び出し時間を使わずに各部分
の時間を測定可能。
Experiment 2
Experiment 2: behavior of sustained VM TCP transmits
VMNet Driverがパケット転送を行っている17.55μsのところと
開始処理と終了処理のところは転送に必須の部分であり、そ
れ以外(13.10μs)が短縮可能なオーバーヘッドである。
Experiment 2
考察
この仮想化によるオーバーヘッドだけでは全体のオーバー
ヘッドがCPU制限になる理由を説明することはできない(ヘッ
ダを除いた1520Bytesの転送が31.63μsとすると100Mbitを
たった0.26秒で送信できてしまって現実とあわない)。
31.63
100000000
[bit]
[sec]
 0.26[sec]
1000000
1520 8[bit]
ではいったい何が原因なのであろうか?それを
調べるためにさらに実験を行った。
Experiment 3
目的
割り込み処理・仮想化によるオーバーヘッド
以外の、ゲストEthernetドライバによるI/O命
令によるオーバーヘッドの詳細を調べる。
方法
VMとVMAppで使用された、ゲストEthernetド
ライバによる(12個の)I/O命令の使用する時
間比率を時ベースのサンプリングにより計測。
Experiment 3
Experiment 3: distribution of time spent in the VMM &VMapp
考察
•VMAppを呼び出す時間
(world switch発生)は
VMM時間の25%以上
•送受信ごとに呼び出す
IRQの占める時間が大き
い(IRQ呼び出しでは必ず
world switchが起こり、処
理も複雑)
(VMM-ホスト間)world switchとIRQ処理を減らせばよい!
Chapter 3.2
ネットワーク性能の最適化
ネットワーク仮想化における
オーバーヘッド削減の手段

ホストマシンのI/Oシステムから離れずにい
かに”World Switch”の回数を減らすか?
→以下の3つの方法がある。
1.VMMによるI/Oポートの処理
2.パケットの結合
3.IRQの通知
VMMによるI/Oポートの処理


world switchはホストの物理的(⇔仮想的)I/Oデバ
イスにアクセスするときのみ必要
Lanceポートへの物理アクセスのうちパケット転送は
1/3、残りはLanceポートの状態修正で、VMM内で処
理できる(わざわざswitchする必要なし)
→今まではLanceポートへのアクセス時は常に
switchしていたが、パケット転送時のみswitch
を行えばよい
また、Lanceポートへの送信はLanceアドレスレジスタへのMOVEと同等という性質がある
→送信命令の変わりに簡単なMOV命令を使えばよい
→仮想化の減少、命令数の減少につながる
→Lanceアクセスの場合も高速化
パケットの結合

LanceポートがVMMで一部処理されることか
ら、次の割込みによるworld switchまで転送
延期可能して一緒に転送する。

ただし、I/O割込があまり起こっておらず、world
switchが十分に高いレートで起こっていないと逆
に遅くなってしまう。
パケット送信によるswitchとIRQ処理によ
るswitchをまとめることでswitchの回数が
減少
IRQの通知
パケットの送受信の通知を受け取るためのhOSのシ
ステムコールを減らせないか?
→VMAppが初期化時にVMNetドライバとの共有メモリ
を確立することを利用する。
すなわち、
VMAppがselect()を呼び出さず、共有メモリを
利用する(switchがなくなる)ようにVMNetを
拡張する。
注) select()はI/Oネットワーキングにおいて大きな負荷となる。
VMM最適化後の結果
Lanceアドレスレジスタへのアクセスが
8.1%から0.5%に減少している。
(Lance I/OをVMMで処理した成果)
VMNetを通したパケット送信の時間は
変わっていない。→それ以外の時間が
短縮されている。
PercentTimeが減っているのに
AverageTimeが長くなってる部分があ
るのはなぜか?→一度にまとめて転送し
ているため。
ほとんどのI/O関連のオーバーヘッドがなくなって、
Guest Idleの時間になっている
処理速度とパケットサイズの関係

nettestプログラムを用い
て、 パケットサイズをさま
ざまに変えたとき
VMwareにおいて最適化
する前とした後で、native
speedとの処理速度の比
較をする。
考察
733,350共に最適化により約2倍のスピード改善
•PC-350を最適化したものはPC-733のスピードにほぼ一致する。
(CPU制限されているから100Mbは出ていないが・・・)
•PC-733を最適化したものはnative speedまでスピードが上昇する
CPUの利用状況
それぞれの環境でCPUはどれくらいアイドルになっているのか?
TSCレジスタを使ってgOSがHLT命令を出したときから次のハード
ウェア割り込みが起きるまでの時間(i.e. gOSがほかの演算を実
行できるまでのCPUサイクル。hOSが演算可能になるサイクルで
はない)を計測した。(packet size=4KB ,CPU bound=64MB/s)
結果
←71.5×30.4=21.7
考察
最適化により、明らかにCPU占有率は低下した。しかし、
まだnativeなマシンのアイドル時間には程遠い。
Chapter 4
I/O以外における最適化
イントロダクション
前章において、仮想化においてI/O操作自体が原因となった
オーバーヘッドについては削減することができた。
⇒I/Oパフォーマンスを上げCPU使用率を減らすには?
⇒5つの方法に注目する。
1.
2.
3.
4.
5.
CPU(と割込みコントローラ)の仮想化によるオーバーヘッ
ドの削減。
GuestOSの修正。
Guestのドライバの修正。
HostOSの修正。
HostOSの回避(VMMから直接ハードにアクセス)。
ここで4と5はVMの範疇ではないので避けるべき。
4.1 CPUの仮想化による
オーバーヘッドの削減
前章の結果によれば、CPU
の仮想化によるオーバー
ヘッドはかなりの割合を占め
ている。(右図矢印)
(これを個別に詳しく論議す
るにはVMwareの内部につ
いて知っている必要がある
ので議論できない。)
例えば、GuestOSのPICへのアクセス(interrupt controller)はVMM Time
の2.5%を占めているが、この操作はIRQによるworld switchが原因であ
り、 物理的なPICから独立した仮想PICを作ることにより回避できる。
⇒オーバーヘッドを減らすことができる。
4.2 Guest OSの修正
以下の2つの方法が挙げられる。
 仮想化すると効率の悪くなる(オーバーヘッド
の原因となる)命令の使用を避ける。
 既成のOS(Guest OS)の情報をVMMに提供
し、操作を代替となるより効率的な操作に置
換。
例.Linux kernelにおいて、アイドル移行時の
ページテーブルスイッチを回避(→次ページ)。
4.2 Guest OSの修正
例.Linux kernelにおいて、アイドル移行時のページ
テーブルスイッチを回避。
 ページテーブルスイッチ ー CPUオーバヘッドの
8.5%(PC-733)。
 Linux kernelにおいてアイドルタスクは、kernelの
ページテーブルを伴ったkernel threadであり、その
ページテーブルはユーザアプリケーションのページ
テーブルのサブセット(一部)である。
→アイドルに移るときページテーブルを変える必要は
ない。(具体的には最後のプロセスのページテーブ
ルをそのまま使えばよい。)
4.3 Guestのドライバの最適化
NICを例として考える。
 GuestのNICはホストの物理的NICに関係のない抽
象的なもの。
→仮想化に適した理想的なNICを実現することができ
る。
例.vmxnetネットワークアダプタ(→次ページ)。
問題点:理想的なNICについて全てのGuest OSに合
うドライバの実現が必要。
→理想化による利益が大きい環境(サーバ環境な
ど)には適している。
4.3 Guestのドライバの最適化
以下のような理想化が考えられる。
例1.Linux pcnet32 ドライバ
パケット転送に12のI/O命令と1つのIRQが必要。
→転送時のOUT命令もしくは転送可能を知らせる
IRQのいずれか1つのみで実現。
例2.Lanceコントローラのバッファ
柔軟だが複雑なバッファ。
→メモリ上の単純な送受信バッファとして実現。
以上の理想化を実現したものとしてVMwareの
vmxnetネットワークアダプタがある。
4.4 Host OSの修正

Hostを修正することでオーバヘッドを減らすこ
とができる場合がある。
例.ネットワークにおいて、 Linuxがソケット
カーネルバッファ(sk_buff)を割り当てて扱う
方法を拡張(→次ページ) 。
問題点:OS venderの協力が必要。
4.4 Host OSの修正
例.ネットワークにおいて、 Linuxがソケットカーネル
バッファ(sk_buff)を割り当てて扱う方法を拡張。

VMAppがVMNet driverを用いてパケットを送信す
る時、VMNet driverはsk_buffをkmalloc()を用い
て割り当て、VMAppからsk_buffにコピーして送信
する。
→ このコピーがホストでの時間浪費の原因。

送信元(VMApp)のデータはVMの物理メモリ領域
に存在。
⇒ 送信元のデータをVMNet driverがsk_buffのデー
タとして割り当てれば、コピーを回避できる。
4.5 Host OSの回避
根本的なI/O制限はworld switchの存在。
→直接VMMがI/Oデバイスを制御すればよい。
問題点
1. I/Oデバイスの変更に対するドライバ変更な
どのサポートの必要性。
2. 個々のVMとそのVMM 、多重送信を制御す
るための新しいkernelの必要性。
→ I/O performanceが重要な要求となる場合
に適している。(例.VMware ESX Server)

Chapter 5
総論
VMwareのホスト化技術によって・・・
1.
2.
3.
ハード毎のドライバ作成の必要性の排除。
ポータビリティ性のある安定した仮想ハー
ドウェアの実現(VMからの利点)。
ユーザ・ディベロッパ双方の労力の削減。
ここで、ホスト化により、
大量のI/Oに対するオーバヘッド
という新たな問題が生じる。
⇒この問題を解消するには?(次ページ)

大量のI/Oに対するホスト化によるオーバ
ヘッドを減らすには?
NICの仮想化を例にとると・・・
⇒World Switchの回数を減らせばよい!!
以下のような方法を使った。
1.
VMMによるI/Oポートの処理
2.
パケットの結合
3.
IRQの通知
その結果・・・

低速マシンはTCP転送が倍速になった

高速マシンはCPU使用率が下がった
ここで、(条件つきで)I/Oの修正以外の改善策もある。
→次ページ

大量のI/Oに対するホスト化によるオーバ
ヘッドを減らすには? (続き)
様々な条件が整えば以下のような改善策もある。
1.
VMwareの内部について知ることにより
→CPU仮想化によるオーバヘッドの削減。
2.
(Guest) OSについて知ることにより
→Guest OSの修正。
3.
仮想NICについて知ることにより
→Guest ドライバの修正。
4.
(Host) OSを改変することにより
→Host OSの修正。
5.
I/Oのみのホスト化からの独立により
→Host OSの迂回。
結論


以上の最適化により、(現在のCPU速度、ネッ
トワーク性能では)VMwareは従来のVirtual
Machine技術の代替、あるいはそれ以上とし
て十分に機能するものである事がわかる。
互換性とI/O性能はトレードオフの関係にあり、
これからはCPU速度とネットワーク性能に合
わせて、バランスをとる必要があるかもしれな
い。
参考文献

AMD Lance Manual
http://www.amd.pl/products/npd/techdocs/techdocs.html

Intel Architecture Manual
http://www.intel.co.jp/jp/developer/design/pentium/manuals/

VMware日本語ホームページ(体験版DL可)
http://www.networld.co.jp/products/vmware/index.htm

Linux全般
http://www.linux.or.jp/
VMwareの画面