遊戲 Lag 白皮書 › L2 用戶端 OS 與裝置
省電模式、過熱降頻 Power saving, thermal throttling
原因 ID co-power · 主要負責 外部(外部) · 協同 遊戲開發團隊(用戶端開發)
在含圖解與實驗的完整版中開啟卡片 →
筆電的電池模式、手機的省電模式、裝置過熱,都會讓 CPU、GPU 速度下降。過熱的特徵是一開始正常,過了一段時間才變慢。
為什麼 處於電池或省電模式,或裝置發燙 → 於是 依裝置不同,CPU、GPU 時脈降低 30~50% → 畫面上 省電模式一開就發生,過熱則在玩了幾分鐘~20 分鐘左右後,FPS 下降並出現卡頓
- 症狀
- 卡頓, 輸入延遲
- 因素
- 停滯
- 誰會遇到
- 只有我
- 何時
- 開越久越嚴重, 一直都有
- 負責單位
- 主要負責 外部(外部) · 協同 遊戲開發團隊(用戶端開發)
- 遊戲開發團隊要做的事
- 自動調整畫質選項、以畫格上限控制發熱、依 OS 回報的熱狀態等級(iOS 的 thermalState、Android 的熱狀態 API)提前調低選項、在有兩顆顯示晶片的筆電上於執行檔中標示使用獨立顯示卡(匯出 NvOptimusEnablement、AmdPowerXpressRequestHighPerformance)。
- 外部要做的事
- 引導玩家關閉省電模式、筆電建議接上電源;遇到「筆電規格很好 FPS 卻很低」的回報時,確認遊戲在哪一顆顯示晶片上執行,並引導玩家在 Windows 的圖形設定中把遊戲指定為高效能 GPU。
- 圖表上
- 緩慢爬升 · FPS、CPU 與 GPU 時脈
- 查看位置
- 用 PresentMon 把 CPUFrequency、GPUFrequency、CPUTemperature、GPUTemperature 與畫格時間一起記錄 20~30 分鐘,並用工作管理員「處理程序」索引標籤的「GPU 引擎」欄確認遊戲在哪一顆顯示晶片上執行。行動裝置則把 Android 的熱狀態 API(getThermalHeadroom、熱狀態)與 iOS thermalState 和 FPS 一起記錄
- 符合的跡象
- 溫度上升、時脈開始下降的時間點起 FPS 跟著下降,或只有在電池、省電模式下時脈偏低。也可能是遊戲正在內建顯示晶片上執行
- 不符合的跡象
- 時脈與溫度不變、FPS 卻下降時,是「背景處理程序占用 CPU」或「用戶端記憶體洩漏」
- 確認方式
- 在玩家端環境確認
- 深入了解
- 有兩顆顯示晶片的筆電,有時會為了省電讓遊戲在較慢的內建顯示晶片上執行。遇到「筆電規格很好 FPS 卻很低」的回報,先確認遊戲在哪一顆顯示晶片上執行。
出處
- Thermal API Android (Google)
裝置只能在有限時間內維持高效能,之後會因發熱而降頻;建議依熱狀態提前降低負載 - thermalState Apple
iOS 回報的目前熱狀態等級,等級升高時 App 應減少資源使用 - Selecting the Best Graphics Device to Run a 3D Intensive Application AMD
在有兩顆顯示晶片的筆電上以內建顯示晶片執行時,60FPS 的遊戲可能掉到 30FPS;匯出 AmdPowerXpressRequestHighPerformance 可選用獨立顯示卡 - PresentMon Capture Application (README-CaptureApplication.md) Intel
逐畫格記錄 CPUFrequency、GPUFrequency(時脈)與 CPUTemperature、GPUTemperature(溫度) - GPUs in the task manager Microsoft
工作管理員有欄位顯示各處理程序的 GPU 使用率,以及該數值屬於哪個 GPU 與引擎
相關原因
同一層:L2 用戶端 OS 與裝置
同一症狀(卡頓)在其他層的原因
查看含圖解與實驗的完整版卡片