VRAM 増やしてゲームに対応

投稿者名: 
Aqualight
ホストOS: 
Windows7
ゲストOS: 
WindowsXP
本文: 

まず Video RAM (通称 VRAM)は何バイト必要なのかを考えてみましょう。

 透明度を度外視すれば、1ピクセル当り 24 bit  で 3バイトあれば表現可能です。
それ以上に色深度も定義可能ですが、人間の目には、もはや識別不能です。
現実には 24bit あれば十分なのです。

 そして重ね合わせを考慮し、8 bit の透明度を追加すると 32bit つまり4バイトになります。
なぜ1ピクセル当りの情報量を4バイトと決めたのでしょう?
それは 32bit CPUで扱う汎用レジスタの扱いやすいサイズだからです。

 これを踏まえ、モニターの総ピクセル数は幾つなのでしょう?
フルサイズHD画面だと、総ピクセル数は 1920 x 1080 で 2,073,600 pix です。
これに4を掛ければ表示画面に必要な VRAM サイズが求まります。
2,073,600 x 4 = 8294400 バイト  つまり 8,100 iK byte で、凡そ 8 MBです。

 頭が痛くなる数字の話は置いといて、フルHD画面を表示するための最低限のメモリーは8MBあれば十分と言えます。
スクロール処理などを考えても2画面分あれば成立しますし、キリの良い数字なら 32MB でしょうか。

 

 では、なぜ virtualBox の VRAM 上限は 128 MB なのでしょう?
事実、デフォルトで Windows XP 用の仮想マシンを生成すると、18MB 割り当てられます。
上限と比較すると、やたら小さく感じます。 これはなぜなのでしょう?
実画面のピクセル数から言えば、余分なメモリーは画面処理のバッファーとして使われています。
具体的なメモリー・マップは私も知りませんが、 VRAM は表示以外にも画像関係の機能に使われる訳です。

 ゲームやCADなどグラフィック機能を活用しないビジネスアプリを運用するのなら、VRAM はデフォルトでも十分です。
ですが、 3D機能を酷使するゲームでは、表示用以外にもオブジェクト・データやマッピング・データのワークとして VRAM が使われます。
つまり、このようなアプリを運用する場合 VRAM が大きければ大きい程 有利になる訳です。

 

 という事で、ゲームの検証を行うに当たっては、 VRAM を最大にして運用しています。
128 MB までなら簡単に変更可能です。

 さてここで次の疑問です。
virtualBox はゲストOSとして Windows 8.1 まで対応しています。
また Windows 7 の Aero に対応するため、Guset Addition で VRAM を 256 MB に拡張可能です。
通常は 128 MB で、それ以上は設定できないのに、なぜ?
・・・そういう事です。

 で、以上の疑問から、どうしたら VRAM が増やせるか 試してみました。
そして VRAM も簡単に 256 MB に拡張出来ました。
方法は かなり簡単ですが仮想環境の設定その物を書き換えますので、指定の場所以外は書き換えないでください。
さもないと仮想マシン自体が動作しなくなります。

 

方法

  1. VRAM 量を変更する仮想マシンがシャットダウンしている事を確認する
  2. 仮想マシンのディレクトリから [仮想マシン名].vbox というファイルを探す
  3. 2のファイルをテキスト・エディタで開く (設定事項が XML で記述されているテキストファイル)
  4. "Display" という文字列を検索する
  5. 4で検索した行の VRAMSize="xxx" の数値を指定の新たに設定したい数値に書き換える
  6. 上書き保存

 これでデフォルトの上限 128 MB 以上に変更できます。
但し、この数値の上限は 256 で、それ以上を指定しても 256 MB 以上には設定できません。
単純に 256 MB に変更するだけ・・・ とご理解ください。

 

 さて、ここからが本題です。
3D系のゲームでは、時々特定のパターンが黒く塗り潰される障害が出たりしませんか?
それは VRAM が少なく、マッピング用ワークが確保できなかった結果です。
つまり、この状態は VRAM さえ増やせれば解決出来た障害だった訳です。

 これが実機だと、 VRAM を増やしたければビデオカードを交換するしかありません。
virtualBox など仮想マシンの場合は仮想化ハードウェアの設定自体を変更する事で実現します。
方法として書いたのは、そういう部分だった訳です。

 実際、virtualBox でゲームをプレイしていると、特定のオブジェクトが真っ黒だったりしました。
この手の障害は VRAM と相場は決まっていますので VRAM を増やせば問題が解決する訳で・・・
ところがデフォルトでは 128 MB が上限で、 Win7 Aero で 256 MB が実現しているにも関わらず、
対応手段は無いものか…と、そういう訳なのです。

 virtualBox でゲームをプレイする場合、物によっては VRM が不足します。(特に 3Dゲームの場合)
この解決策として VRAM サイズを拡張する方法を公開しました。
仮想環境でゲームをプレイする人は まだ少ないのでしょうが、プレイの安定化のヒントとしてこの情報を公開します。

まずは お試しあれ。

 トピックには virtualBox で XP をゲストにした場合が書かれていますが・・・

改めて疑問なのですが

このゲストで 3D 機能をONにした場合、VRAM はどこから確保するのでしょう?
仮想マシンが確保している main Memory から?  それともホストの VRAM から?

という話なのです。

 確か virtualBox の3D機能は実験的ですが ハードウェア・アクセラレーションだった筈です。
という事は ゲストの DirectX API を virtualBox がそのままホストに渡していると思われます。
ならば 3D 機能で使う VRAM はホストのGPU依存だと思うのですが確証はありません。

 実際に VRAM サイズを 128MB から 256MB に拡張は可能で、それはゲストからでも確認可能です。
また そうすればゲームなどでより良い結果を得られる事も確認しています。
そうであれば仮想XPの VRAM はホストのVRAM からという事になるのですが実際は違います
リソースモニターで調べると、明らかにメインメモリーにワークが取られています。

 

 と、その前に。
現行の virtualBox は VT-x / AMD-V をサポートしていて、ホストCPUの仮想支援機能を利用可能です。
そして上記の結果は これを有効化してのものです。

 つまり、本来はホスト側 ビデオカードの VRAM が H/A に使われるところを、この機能によってゲストが確保した
メイン・メモリーによる 仮想 VRAM をハードウェアに直接与えていると思われます。
当然、ホストの VRAM ではありませんから描画速度は上がりません。

 それでもこれはCPU に VT-x / AMD-V 機能があってこその結果です。
これを有効化しない場合、ハードウェア・アクセラレーションであってもホスト側の VRAM が使われる事になり、
パフォーマンスが下がると考えられます。
また ホスト側のビデオ・アダプタ(ハードウェア)は機種や構成によって異なり、virtualBox からは VRAM サイズを
ハードウェアの最大サイズまで指定する事が出来ず、一般的に必要とされる最大サイズとして 128 MB が相応しい
であろうと設計されたと推測されます。

 もし、そうであれば XP ゲストの最大 VRAM サイズが 128MB なのは納得できます。
また他の仮想マシンでもゲストOS依存という形で VRAM サイズが決定されます。
例えば VMware plyer 6 では XP がゲストの場合 128MB が、vista 以降では 512 MB などです。
さらに言えば ゲストOSによってインストールされるビデオアダプタさえ違います。

 virtualBox での XP ゲストが 256MB に設定可能なのは vista 以降のOSでも 仮想ビデオアダプタが
XP の時と同じビデオアダプタだからで、稼動させるゲストOSに相応しい VRAM サイズを与える上での
対応であったのだろうと思われます。

 

 以上は実験と観察からの考察ですが、これが事実とは言い切れません。
それでも VRAM を大きくする事はゲームをプレイする上で有効な手段には違いありません。
また virtualBox は VT-x / AMD-V 機能の無いマシンでも仮想環境を実現する手段です。
VT-x / AMD-V が使えるに越した事は無いのですが、その場合のパフォーマンスは速度的には変わらず、
むしろ安定度に影響が大きいと考えられます。

 ゲームの場合、速度も安定度も求められ、本来であれば 「VRAM をどこに確保するか」まで
指定できれば最高なのですが、それこそ VT-x / AMD-V 機能あっての話です。
このため「仮想マシンはゲーム専用機とするには難がある」という部分だけは事実なようです。
だからゲームにしか興味のないゲーマーには仮想マシンは敷居が高いのかもしれません。

 

 と、追加情報的に VRAM について調べた結果と考察を投稿しました。
本来 VRAM は表示画面サイズ分だけあれば実用にはなります。
ですが、それはビジネスユースの場合だけです。
ゲームをプレイするためにはゲームに特化した構成が必要なのは実機と同様です。
これをどう解決するかで実機よりセキュアな環境が得られる筈ですが・・・

 

コメントを追加

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.