ゲームラグ白書 › L2 クライアントのOS・端末
ビデオメモリ(VRAM)不足 VRAM over-commit
原因ID co-vram · 主担当 ゲーム開発チーム・クライアント開発 · 副担当 外部・外部
図と実験のあるメインページでこのカードを開く →
グラフィックオプションが必要とするメモリがグラフィックボードのメモリより大きいと、OSがテクスチャをPCのメモリへ追い出してはまた戻すため、カクつきます。
なぜ 高いテクスチャ設定や、人が多い場所のさまざまな装備・エフェクトで、グラフィックボードのメモリがいっぱいになる → すると OSが今すぐには使わないテクスチャをPCのメモリに移し、必要になると遅いPCIeバスで再び戻す → 画面では 新しい場面や新しいキャラクターが見えるたびに一瞬止まり、テクスチャがしばらくぼやける
- 症状
- カクつき, フリーズ
- 要因
- ストール
- 誰に起きるか
- 自分だけ
- いつ
- 人が集中したとき, 移動中・マップ切り替え時
- 担当
- 主担当 ゲーム開発チーム・クライアント開発 · 副担当 外部・外部
- ゲーム開発チームの対応
- グラフィックボードのメモリ容量に合わせたオプションのデフォルト値、メモリ予算を超えたらテクスチャ品質を自動で下げる、人が多い場所ではキャラクターのテクスチャを簡略化。
- 外部の対応
- ユーザーにテクスチャ設定を下げるよう案内。クライアントを2つ起動する場合は、さらに設定を下げるよう案内。
- 数値の目安
- グラフィックボードのメモリは1秒に数百GBを読み込めますが、PCのメモリとやり取りするPCIeバスは世代によって1秒に16〜64GB前後で、10倍以上遅くなります。
- グラフでは
- 上限で頭打ち · 専用GPUメモリ、共有GPUメモリ
- 確認箇所
- タスクマネージャーのパフォーマンスタブにあるGPU項目の、専用GPUメモリ・共有GPUメモリのグラフ(詳細タブにプロセスごとの列も追加可能)を、PresentMonのフレームタイムとあわせて確認
- 該当する場合
- 専用GPUメモリが上限に張り付いて頭打ちになり、共有GPUメモリが増えている間に一瞬止まることが多い。テクスチャ設定を下げると消える
- 該当しない場合
- 専用メモリに余裕があれば「ストレージが遅くアセットストリーミングが間に合わない」か「メインスレッドでの同期ロード・シェーダーコンパイル」
- 確認手段
- ユーザー側の環境で確認
- もっと詳しく
- Windowsのタスクマネージャーで、GPU項目の「専用GPUメモリ」がいっぱいになり「共有GPUメモリ」が増えていれば、この状態です。同じPCでクライアントを2つ起動すると、さらに早くいっぱいになります(「メモリ・VRAM不足によるストリーミングの失敗」の項目)。
出典
- Residency Microsoft
プロセスが使えるビデオメモリには予算があり、超えるとカーネルがディスクリートGPUのヒープの一部をPCのメモリに移す(最後の手段なので、予算の管理を推奨) - GPUs in the task manager Microsoft
タスクマネージャーの専用GPUメモリはグラフィックボードのVRAM、共有GPUメモリはGPUとCPUが共有して使うPCのメモリ - CUDA C++ Best Practices Guide NVIDIA
ビデオメモリの帯域幅(V100で898GB/s)はPCIe Gen3 x16(16GB/s)よりはるかに大きいため、PCのメモリとの転送を減らすよう推奨 - PresentMon Capture Application (README-CaptureApplication.md) Intel
FrameTime(フレーム間のCPU時間)でフレームごとの時間を記録
あわせて読みたい原因
同じ層:L2 クライアントのOS・端末
同じ症状(カクつき)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る