ゲームラグ白書 › L2 クライアントのOS・端末
省電力モード・サーマルスロットリング Power saving, thermal throttling
原因ID co-power · 主担当 外部・外部 · 副担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
ノートPCのバッテリーモード、スマホの省電力モード、端末の発熱によって、CPU・GPUの速度が落ちます。発熱の場合は、最初は問題なく、しばらくしてから重くなるのが特徴です。
なぜ バッテリー・省電力モードか、端末が熱くなっている → すると CPU・GPUのクロックを、端末によって30〜50%下げる → 画面では 省電力モードは起動直後から、発熱は数分〜20分ほどプレイした後から、FPSが下がってカクつく
- 症状
- カクつき, 入力遅延
- 要因
- ストール
- 誰に起きるか
- 自分だけ
- いつ
- 長時間稼働するほど, 常に
- 担当
- 主担当 外部・外部 · 副担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- グラフィックオプションの自動調整、フレームレート上限による発熱管理、OSが通知する発熱段階(iOSのthermalState、Androidの発熱状態API)を見て先にオプションを下げる、GPUを2つ搭載したノートPCでディスクリートGPUを使うよう実行ファイルで指定(NvOptimusEnablement・AmdPowerXpressRequestHighPerformanceのエクスポート)。
- 外部の対応
- ユーザーに、省電力モードを解除すること、ノートPCは電源につなぐことを案内。「いいノートPCなのにFPSが低い」という報告なら、ゲームがどちらのGPUで動いているかを確認し、Windowsのグラフィックの設定でゲームを高パフォーマンスのGPUに指定するよう案内。
- グラフでは
- 徐々に上昇 · FPS、CPU・GPUのクロック
- 確認箇所
- PresentMonのCPUFrequency・GPUFrequency・CPUTemperature・GPUTemperatureをフレームタイムとあわせて20〜30分記録し、タスクマネージャーのプロセスタブのGPUエンジン列で、ゲームがどちらのGPUで動いているかを確認。モバイルは、Androidの発熱API(getThermalHeadroom、発熱状態)とiOSのthermalStateをFPSとあわせて記録
- 該当する場合
- 温度が上がってクロックが下がった時点からFPSが落ちるか、バッテリー・省電力モードのときだけクロックが低い。または、ゲームが内蔵GPUで動いている
- 該当しない場合
- クロック・温度が変わらないのにFPSが落ちるなら「バックグラウンドプロセスによるCPU占有」か「クライアントのメモリリーク」
- 確認手段
- ユーザー側の環境で確認
- もっと詳しく
- GPUを2つ搭載したノートPCは、電力を節約するためにゲームを遅い内蔵GPUで動かすことがあります。「いいノートPCなのにFPSが低い」という報告なら、まずゲームがどちらのGPUで動いているかを確認します。
出典
- Thermal API Android (Google)
端末は高い性能を限られた時間しか維持できず、その後は発熱でスロットリングされる。発熱状態を見て、先に負荷を下げることを推奨 - thermalState Apple
iOSが通知する現在の発熱段階。段階が上がったら、アプリはリソースの使用を減らす必要がある - Selecting the Best Graphics Device to Run a 3D Intensive Application AMD
GPUを2つ搭載したノートPCで内蔵GPUで動くと、60FPSのゲームが30FPSになることもある。AmdPowerXpressRequestHighPerformanceのエクスポートでディスクリートGPUを選択 - PresentMon Capture Application (README-CaptureApplication.md) Intel
CPUFrequency・GPUFrequency(クロック)、CPUTemperature・GPUTemperature(温度)をフレームごとに記録 - GPUs in the task manager Microsoft
タスクマネージャーには、プロセスごとのGPU使用率と、その値がどのGPU・エンジンのものかを示す列がある
あわせて読みたい原因
同じ層:L2 クライアントのOS・端末
同じ症状(カクつき)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る