仮想マシンの V-RAM に関する考察

投稿者名: 
Aqualight
ホストOS: 
N/A
ゲストOS: 
N/A
本文: 

 読者の皆様、こんにちは、こんばんは。 Aqualight です。

 今回の投稿は長文ですよ。 (笑)
タイトルには「考察」なんて小難しい言葉が入っていますが、要は V-RAM に関するあれこれです。
そして、この情報には信憑性が無い事も確かですので過信は禁物です。

 なぜ?

それは仮想マシン自体のメモリーマップが投稿者自身には不明だからです。
ただ、ここに掲載したキャプチャ画像自体は全く加工していない事から、そこに表示された数値だけは事実です。

 まず、ホストマシンの V-RAM に関してです。
私のホスト・マシンは Windows 7 Ult 64 bit です。
メイン・メモリーは 24 GB 搭載しています。
そして NVIDIA 製 GTX760 というグラフィック・ボードを搭載しています。
このボードには 2048 MB (2 GB)の V-RAM が搭載されています。
OS は 64 bit なので全メモリーは 24 + 2 = 26 GB になります。

Windows 7 64 bit Host のビデオアダプターのプロパティ

 これをご覧頂くと気付くと思いますが…
ここで重要なのは 利用可能な全グラフィックス メモリ:4096 MB ( 4 GB)という部分です。
しかし GTX760 は 2048 MB (2 GB)しかメモリーを搭載していません。
なのに、「なぜ 4096 MB なのか?」という疑問が生じませんか?
種明かしすると、追加された 2048 MB は共有システム メモリ としてメイン・メモリーから確保されているのです。

 ちょっと脱線しますが…
4k モニターに必要な最低限のメモリー量は如何程なのでしょうか?
ディスプレイでは「赤・緑・青」の光の輝度で1ピクセルの色を表現します。
これは加色混合なので、各色の輝度の段階は 8 bit 即ち 0 ~ 255 の 256 段階あれば十分です。
なぜなら、それ以上に段階分割しても人間には判別不能だからです。
つまり、1ピクセルの色を表現するには 24 bit あれば十分です。 そして これを一般的に「フルカラー」と呼びます。
巷(ちまた)で 32 bit カラーと呼ばれるものは、この 24 bit に透過度 8 bit を加えた表現で、
画像を重ね合わせ、背景に影を落としたり、半透明にするために 8 bit 付加されたものです。
このために1ピクセルを 32 bit つまり 4 バイトとして表現します。
 次に 4k モニターの画面ピクセル数です。
4k モニターの横縦ピクセル数は…  4,096 x 2,160 = 8,847,360 pix です。
これに 4 を掛ければ最低限の V-RAM 量が計算できます。
  4,096 x 2,160 x 4 = 35,389,440 バイト ⇒ 33.75 MB
実際には、画面全体で動画を扱ったり、部分的な画像書き換えを行うため、最低限この数値の倍以上が必要な訳で
3倍程度の 101.25 MB は必要になる筈です。

 これが「業務用途なら V-RAM は 128 MB あれば十分」の根拠です。
しかし、マルチモニター機能を利用したり、3Dゲームを扱うとなると話は別です。
そして最近では 3D かつ立体視ですから とんでもない事になります。
ポリゴンで表現可能な全てのオブジェクトを生成し、3点で構成される面に画像をマッピングし、その境目を
アンチエリアシングで目立たなくする。
それだけではありません。 表面の質感を再現するために凹凸データをマッピングしてから光軸と周辺光による影響を
表現した上で、表示すべきオブジェクトを表示領域に重ねて貼り付ける…
さらに立体視では、右目用と左目用の視点データを同時に生成する事も求められ、膨大なグラフィック処理能力が
必要になります。 そしてこれこそがグラフィック・カードの真の目的です。
この状況では、最低限の V-RAM は単なる表示バッファとなり、むしろオブジェクト構成用ワークの方が大きくなってしまいます。

 グラフィックカードの V-RAM は全てを表示用に利用可能なものの、その大きさと目的は 3D レンダリングです。
このため、表示用に使う部分よりワークの方が大きくなって当たり前です。
そして この機能を活かしたデスクトップが Windows vista と 7 の Aero デスクトップです。
ウインドウを透過し、その影を描くにはハードウェア機能を利用した方が早くキレイでです。
しかし業務用途では美麗さよりも鮮明さを求めらるため、 Win 8 以降では Aero は採用されなくなりました。

 もうお気付きだと思いますが、Vista と 7 の Aero では 共有システム メモリに各ウィンドウの描画データを置き、
生成されたウインドウ画像をグラフィック・カード側の V-RAM ワークに展開し、表示領域に合成している訳です。
だから Aero はグラフィック・カード必須で V-RAM 構成がメインメモリーに共有部を含むものになったと思われます。
これは表示方式だけに注目すると、3Dゲームとしてデスクトップを描いた状態と言えるかもしれません。

 

 さて、こんなホストマシンに Windows 10 pro 64 bit の仮想マシンを起動させてみると…

VirtualBox での Windows 10 ゲストのビデオアダプターのプロパティ VMware player 7 での Windows 10 のビデオアダプターのプロパティ

 左は VirtualBox 5 で 右側は VMware player 7 で、それぞれのグラフィック・アダプターのプロパティです。
VirtualBox 側でまず目につくのがアダプター名称です。
” VirtualBox Graphics Adapter for Windows 8 ”と書かれていて、Windows 10 には対応していない事が
如実に分かります。
続いて”利用可能なグラフィックス メモリ”には 384 MB と書かれている事です。
この仮想マシン、実は V-RAM は 256 MB が上限で、その上限に設定したのですが、実際には 384 MB と
書かれている訳です。
 256 MB に対して 128 MB だけ追加された形ですが、この 128 MB の部分が画面データ・バッファになっている
ような気がします。
そして V-RAM で加工されたウィンドウやアイコンが これに合成されるのではないかと推測されます。

 一方、Player 7 ですが、”VMware SVGA 3D”として、ソフトウェア・エミュレーションでありながら完全?に対応
している事がうかがえます。(その証拠に描画パフォーマンスは最低ですが)
そして「利用可能な全グラフィック メモリ」をご覧ください。
2048 MB 可能です。
 但し「専用ビデオメモリ」が 128 MB になっている事も見逃せません。
これは恐らく「表示用メモリー」が 128 MB であって、 2048 MB がそのまま 3D描画ワークとして利用されているものと
想像できます。
そして「共有システム メモリ」の 2048 MB が画像ワークその物なのでしょう。
だから3Dゲームをプレイする場合、レンダリング・バッファが十分に確保可能なのでしょう。

 

 

 ここで改て問いますが、ホスト(実機)のグラフィック周りはどうなっているのでしょう?
まず2タイプに分ける必要があります。 それは…

  1. 拡張スロットにグラフィック・ボードを取り付けている場合
  2. GPU 内臓型 CPU を搭載している場合

この2種類に分類可能です。
つまり、メイン・メモリーを V-RAM として利用するか否かです。
以下に「メインメモリー ⇔ CPU ⇔ GPU の概念図」を2種用意しましたのでご覧ください。

 まずメモリーを主体に比較してみます。
以下はグラフィックボード搭載タイプです。(マイ・マシン)

マイ ホストマシンの RAM と V-RAM の関係概念図

 続いて GPU 内蔵 CPU モデルの場合です。

 実際、この違いは如実に描画速度の差として現れる事があります。
なぜなら、メイン・メモリーを V-RAM として使う場合は GPU本来の性能が発揮出来ない場合があるからです。

 まず拡張スロットにグラフィック・ボードを取り付けた場合です。

グラフィックボード搭載機のビデオ周り

 本来、グラフィック・ボードは 3D描画高速化を目的に利用します。
つまり GPU の性能がフルに発揮できる設計になっているという事です。
具体的に言えば GPU と V-RAM 間のバス幅がメインメモリーより大きく高速大量転送が可能なのです。
またグラフィック・ボードには当然のように専用映像回路も含まれ、まさに「描画特化」という訳です。
但し最近では GPU 内蔵型 CPU の台頭によって GPU は 3D描画だけでなく動画エンコードやデコードなどの
画像処理関係にも使われるようになり、地味に実機の処理高速化に寄与しています。
 この構成のマシン概略は私のマシンの構成を参考にして頂ければ分かります。
グラフィック・ボードの V-RAM はメインメモリーとはバス幅も違い独立しています。
映像回路はグラフィック・ボード側なので、 V-RAM はそのまま画面データを保持し、同時に描画データの
ワークとして存在します。
一方、描画オブジェクトデータや描画コマンドは共有メモリーを介して扱われるものと推測されます。
 CPU から V-RAM には PCI-E バスによってアクセス可能ですが、V-RAM 自体が GPU 専用設計なので
バス幅や速度も異なり、必ずGPU経由のアドレスデコーダーを介する結果になるのかもしれません。
またGPUと遣り取りするために「共有システムメモリー」を用意しているとすれば、これはまさしく
外部接続型のコプロセッサーその物なのでしょう。

 次に GPU 内蔵型 CPU の場合です。
このタイプの V-RAM 構成は以下の概念図が参考になると思います。

GPU 内蔵 CPU モデルのグラフィック周り

 この構成はノートやタブレットに多く、高級機種の場合は 基板上にGPUと専用 V-RAM を搭載している物もあります。
高級機種の場合は形状がタブレットやノートであっても前述の「拡張スロットにグラフィック・ボード」と
同じ扱いになります。
ですが普及機や廉価版では GPU を CPU に内蔵させ、メインメモリーを V-RAM として利用します。
要するに GPU 専用 V-RAM ではなく、既存のメインメモリーをそのまま V-RAM として使う訳です。
小型化を目的とした場合、このような手法は一般的で、何よりコストダウンになります。
最近では内蔵GPUの性能が高まったので、一般用途なら廉価なグラフィック・ボードは必要無くなりました。
それでも立体視や3Dゲームなどでは3Dゲーム特化仕様でないと物足りないのが実情です。
この事から拡張スロットのグラフィック・ボードはゲーム専用仕様が一般化しています。
と同時に、GPU は通常業務でも利用可能な工夫が成され画像処理に利用されます。

 目的はコンパクト化とコストダウンです。
確かにコンパクト化は可能ですが、この構成ではGPUの更なる高速化は出来ません。
デスクトップ機なら内蔵GPUを停止して拡張スロット側のグラフィック・ボードを利用可能なのですが
元々の目的がコンパクト化なので、この手のCPUをデスクトップで利用する意味は薄いでしょう。

 

 仮想マシンに話を戻します。
VirtualBox も VMware 製品も基本的にはメインメモリーを V-RAM として利用します。
その証拠はホスト側のメモリー利用状況から確認可能です。
例えば Windows がホストなら「タスクマネージャー」や「リソースモニター」から確認可能です。

 仮想マシンのグラフィック・アダプターは当然仮想ハードウェアです。
例え 3D機能を含んでいてもいなくても、そのインターフェイスは仮想ハードウェアとして組み込まれます。
これは実機のグラフィック・アダプター構成と何ら変わりません。
しかし一般的にはソフトウェア・エミュレーションなのでゲームに適しているとは言えません。
実機では生成された画面データはモニターに出力されますが、仮想マシンではウインドウに出力します。
そのウィンドウはホストOSが生成し、それをスクリーンとして仮想マシンの表示内容が描画される訳です。

 VirtualBox は 少なくとも VMware より軽快に動作します。
確かに早いのですが、そうなると困った面が目立ちます。 3D処理が異様に遅く感じるのです。
だからという理由ではないと思いますが
VirtualBox は 3D描画に関して「ハードウェア・アクセラレーション」が可能です。
ですが現在でも「試験的に」という但し書きが取れていません。
その理由は、実はこの辺りに在りそうです。

 グラフィック・ボードに搭載された V-RAM は前述のようにバス幅やアクセス速度もメインメモリーとは違い
3D機能特化された物です。
ところが、この機能は拡張スロット(PCI-E)による機能拡張であって、OSからは外部機器とも言える訳です。
PCIバスを介してCPUからアクセス可能なもののメインメモリーとは分離されています。
また GPU 内蔵 CPU の場合は V-RAM をメインメモリー上に持ち、グラフィック・ボードの場合とは異なり
CPU はメインメモリー同様にアクセス可能です。
しかしどちらの場合でもOSからは拡張機能としてデバイスドライバ経由で利用します。
このため、これを仮想化すると、3D機能は追加仮想ハードウェアとなってしまいます。

 ゲストOSから見ると3D機能は拡張機能、しかも仮想拡張機能です。
このため Guest Additions や VM Tools などで仮想ハードウェアを追加(拡張)する訳です。
CAD などでは必須ですが、仮想マシンでは 3D機能をフル活用する事はありません。
(将来的には必要な機能ですが。)
VMware では、そういう理由でハードウェア・アクセラレーションを使わず、ソフトウェア・エミュレーションに
甘んじているのでしょう。

 では なぜ VirtualBox では仮想マシンから 3Dハードウェア・アクセラレーションが可能なのでしょう?
本来は専用デバイスドライバが必要な拡張ハードウェアですが、Direct X や OpenGL などで
インターフェイスが共通化されている部分があり、これをドライバとして利用する事が可能だからです。
但し実態は拡張ハードウェアなので、仮想マシンでは共通化された部分しか利用出来ません。
なぜなら、GPU 毎に微妙に仕様が異なり、それを吸収し共通化しているのがホスト側ドライバだからです。
このため、非対応部分についてはエミュレーションで代用しかなく、専用ドライバーが必要になってしまうからです。
実際には XP ゲスト以降で 3Dアクセラレーションは可能にはなっていますが、vista や 7 の Aero を再現可能な
レベルに留まり、3Dゲームを軽快にプレイ可能なレベルではありません。
仮想マシン側に ホスト搭載 GPU 専用ドライバが無いからです。

 なぜ完全再現出来ないのでしょう?
それは仮想マシンからリアル拡張ボードにアクセス出来ないからです。
もっと根本的な原因は、CPU 構造に起因し、x86 アーキテクチャは I/O 仮想化が困難だからです。
この問題が解決されれば、ゲストOSに拡張ハードウェア専用デバイスドライバがそのまま利用可能になり、
ホスト、ゲストの区別なく外部ハードウェアが利用可能になる筈です。
現在のところ、それを目指して新たなアーキテクチャのCPUが開発されているようですが、
まだまだ時間は掛かりそうです。
そうこうしている内にゲストOSはどんどん陳腐化し使われなくなってしまい、その必要性は将来的利用法以外に
無くなってしまい、これが開発を押し留める原因にもなっていると思われます。

 V-RAM の話題に戻れば、仮想環境では V-RAM は仮想マシンにっとってアクセスし易い場所にある方が都合が良いのです。
つまり仮想マシンの V-RAM はメインメモリーにある方が都合が良い筈という事です。
しかし、それでは描画性能に特化した GPU の性能をフルに引き出せず、オマケにメインメモリーの速度自体が
描画高速性の足かせになってしまう訳です。
本来であれば、仮想マシンでハードウェア・アクセラレーションを行うには、仮想マシンから直接ハードウェア・アクセスが
可能でなければならないのです。 もちろん グラフィック・ボード上の高速な V-RAM にもです。
それが現時点では不可能だからこそ、ハードウェア・アクセラレーションと言っても中途半端で問題が多いと…

 

 大幅に脱線しましたが、GPU 内蔵 CPU が高性能化したため、メインメモリーに V-RAM を設けるハードウェアも増えてきました。
この視点から、仮想マシンであってもメインメモリーに V-RAM を割り振っても現時点では何ら問題は発生しないと思えます。
但し、本来のグラフィック・カードは 立体視を含めた 3D描画特化のゲーム仕様です。
これに敵う筈もなく、仮想マシンの 3D 再現性は 現状では絶対に良くなりません。
せいぜい vista や 7 の Aero を再現するに留まり、新たなアーキテクチャを持つCPUの登場を待たなければならない状況です。

 このような状況では、とても「仮想マシンでゲームを!」などと言えたものではありませんが、セキュリティだけは確保可能です。
私など、仮想マシンの発展は民生用途だと思っていますので、ゲームに利用可能な仮想マシンは必須だと思います、
そのため、グラフィック機能の貧弱な仮想マシンでは発展にマイナスだとも思います。
だからと言って現状では これ以上は望めません。
V-RAM 容量は最低でも 2 GB は欲しいところですが、それは 64 bit OS の話で、 32 bit 仮想マシンなら 256 MB でも十分でしょう。
この文章の投稿時点では VirtualBox は まだ 64 bit ゲストOSには不十分なグラフィック・アダプターです。
「何とかならないか…」とは思いますが Guest Additions での追加仮想ハードウェアですしね…
やはり一般ユーザーはグラボ・メーカーによる仮想マシン専用ドライバの公開待つしかないようです。

 

 

 

 最後に…
今回も信憑性に欠ける内容です。 何度も言いますが、過信なさらないで下さい。
私の妄想も多分に含まれている…と。

 それはともかく、仮想化に対する VirtualBox と VMware の違いは微妙に感じる事は出来ました… でしょうか?
VirtualBox には新しい仮想ビデオ・アダプターが欲しいですね。 しかも 3D機能正式対応版で V-RAM 2 GB 可能な。
VMware ではハードウェア・アクセラレーションが欲しいです。
もっとも、それが実現可能なハードウェアが現れる事を望みます。
なぜなら、拡張(追加)リアルハードウェアが簡単に扱えない仮想環境の存在が事実を指し示すからです。
V-RAM 周辺の探求から始まった雑談もどきでしたが、今回はこれで筆を置きます。
なお、次回は「メモリー不足」に関する内容を書きたいと思います。

 

 

コメントを追加

Filtered HTML

  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br />
  • 行と段落は自動的に折り返されます。

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
スパム投稿防止の為以下のテキストを入力してください
Image CAPTCHA
Enter the characters shown in the image.