GPUの仮想化とは?
この技術の根幹となっているのは、NVIDIAの最新GPUコアであるKepler世代のコアから実装されたGPUの仮想化技術だ。これは実体としてのGPUは1つでも、見かけ上、複数に見せて、グラフィックスタスクを行わせることができる技術になる。
ところで、GPUに限らずハードウェアの仮想化の際に、とても重要になるのが、そのハードウェアの使い手側からは「自分専用のものである」という風に見せて使えることだ。これを効率よく行えないとパフォーマンスが上がらない。
NVIDIA Kepler世代のコアでは、ハードウェアメモリ管理ユニット(GPU MMU)が搭載されているため、その仮想マシンで行うグラフィックスタスクで使用する仮想GPUのメモリを、実体GPU側のローカルメモリを直接割り当てることができる。
さらに、仮想マシンからのグラフィックスタスクの発注があると、実体GPU側でレンダリングタスクを立ち上げて、その仮想マシンと仮想GPUとで情報のやりとりするための専用回線を確立することができるようになっている。この専用回線確立後は、仮想マシンはまるで自分専用のGPUのように仮想GPUに直接コンタクトを取ってレンダリングタスクを発注できるようになる。
仮想GPUのレンダリング結果はフレームバイフレームで仮想マシンが受け取るのではなく、H.264でエンコードされたビデオストリームとして受け取ることになり、これをネットワークの向こうにいるクライアント側の端末に伝送する。
H.264のエンコード処理というのはかなり重いタスクだが、Kepler世代のGPUには「NVENC」と呼ばれるリアルタイムの4~8倍速相当の早さでH.264エンコードができるプロセッサが統合されているので、エンコードプロセスまでもがハードウェアで実現される。
こうした一連の機能のコンビネーションにより、グラフィックスパフォーマンスに優れた仮想マシンが提供できるというワケなのだ。