SPICEプロトコルの内側を知る:Inside Linux KVM(2)(1/2 ページ)
この連載では、オープンソースの仮想化ソフトウェア、Linux KVM(Kernel-based Virtual Machine)とそれを支える技術の最新開発動向を紹介していきます。(編集部)
前回も紹介したとおり、SPICEは非常に優れた画面転送プロトコルです。仮想化されたデスクトップの画面転送だけでなく、動画再生のアクセラレーションや双方向音声などの機能がプロトコル本体に定義されています。そして、将来の拡張性も確保されています。
SPICEプロトコルは、どんな機能を提供できるのでしょうか? 今回はSPICEプロトコルの内部構造についてディープに解説します。
SPICEを構成する6つのチャンネル
SPICEプロトコルはTCP接続でコネクションを張っていますが、仕組みの独立性と拡張性を高めるために、仮想的に回線を分割する「チャンネル」という仕組みを定義しています。これはCitrix ICAプロトコルでも利用されている仕組みです。今回は、その中身について見ていきたいと思います。
まず、SPICEを構成するチャンネルには次の6種類があります。
- Main Channel
- Display Channel
- Inputs Channel
- Cursor Channel
- Playback Channel
- Record Channel
各チャンネルには別々のデータを流すことができます。SSLによる暗号化通信および非暗号化通信が可能なほか、クライアント側からの要求に基づいて個別にQoSを設定することができます。
コネクション制御を行うMain Channel
Main Channelは、SPICEの永続的なコネクションの確立と接続、切断処理などの制御を行います。Main Channelは認証処理も行います。SPICEでは通常、チケット認証を用います。ただし、チケット認証機構を使わない場合、チケット認証を無効にして認証なしで動かすこともできます。
なお、SPICEのフローコントロールはTCPの「Window Acks」を使用して行われます。そのため、ネットワークの帯域幅に応じたデータ量で最適な通信を行うことができます。また、ライブマイグレーション時でもシームレスに接続を保つことができる仕組みも含まれています。
画面描画処理を担うDisplay Channel
Display Channelは、SPICEの画面描画処理を行います。
仮想デスクトップの解像度については、SPICEクライアント側では特に最大値を規定していません。しかし、SPICEクライアント側でダブルバッファリング処理を行う都合上、搭載メモリ量が極端に少ないiPhoneやAndroid端末では、XGAサイズ(1024×768)あたりが妥当だと思われます。もちろん、メモリ搭載量の大きなSPICEクライアントならば、フルハイビジョンの解像度1080pサイズ(1920×1080)であっても、十分転送が可能です。
SPICEクライアントはウィンドウモードでも動作します。Shift+F11を押してフルスクリーンモードにした場合、端末側でSPICEクライアントがサポートされていれば、手元のモニタの解像度を仮想デスクトップの画面の解像度と同じ解像度に調整します。なおRHEV-M for Desktopsでは、接続先の仮想デスクトップの解像度を手元の解像度に合わせる機能も提供されていますが、それはVDIport(後述)による拡張で実現されています。
SPICEの画面描画は、Canvasという抽象化レイヤを通じて行われます。バックグラウンドの描画エンジンは差し替え可能です。Windowsの場合はGDIによる描画を、Linuxの場合はCairoというオープンソースの画面描画ライブラリか、もしくはOpenGLによる描画を行います。レンダリング処理にはクライアント側のGPUを利用するため、ハイパフォーマンスな描画が可能になります。これは同時に、クライアント側のCPU使用率を抑えることにもなります。
SPICEの画面転送時の圧縮方式には、圧縮なしの「Lossless」、画像情報を圧縮する「Image-based」、ベクタ情報をLZ/GLZ圧縮、ラスタ情報をQuic圧縮にする「Auto」の3種類があります。
Lossless | 圧縮なし | |
---|---|---|
Image-based | Quic | SFALIC圧縮をベースとした圧縮形式 |
LZ | LZSSを画像に最適化させた圧縮形式 | |
Global LZ(GLZ) | LZ圧縮形式に統計ベースのグローバル辞書を適用した拡張。 頻繁に発生する画像パターンの圧縮率を高められる |
|
Auto | 図形などのベクタ情報をLZ/GLZ、写真などラスタ情報をQuicを使い圧縮する | |
表1 SPICE画像圧縮の仕組み |
SPICEは動画のアクセラレーション機能も備えています。WAN回線経由などでも快適に表示できるように、M-JPEG(Motion JPEG)エンコーディングを利用した通信を行います。この仕組みにより、Flashベースのアプリケーションや動画再生を行った際の画面描画のパフォーマンスを向上させています。
またSPICEはマルチモニタをサポートしており、ゲストOSごとに、指定した複数のモニタに対して画面描画を行えます。モニタの個数は4つまで確認済みですが、プロトコル上は、理論上無制限となっています。
最近では、「ATI Radeon HD 5870 Eyefinity 6」などのように、6画面表示が可能なコンシューマ向けビデオカードが店頭でも販売されています。これらを活用すれば、マルチモニタの可能性がさらに広がるでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.