找出容量相關卡頓問題

容量是指裝置在一段時間內擁有的某些資源 (CPU、GPU 等) 總量。本頁說明如何找出並解決容量相關的卡頓問題。

控制器回應速度緩慢

為避免卡頓,CPU 頻率節流器必須能夠快速回應突發的工作負載。大部分的 UI 應用程式都遵循相同的基本模式:

  1. 使用者正在閱讀畫面。
  2. 使用者觸碰螢幕:輕觸按鈕、捲動畫面等。
  3. 螢幕會在回應輸入時捲動、變更活動或以某種方式顯示動畫。
  4. 系統會在顯示新內容時進入休眠狀態。
  5. 使用者返回閱讀畫面。

Pixel 和 Nexus 裝置會實作觸控提升功能,藉此修改觸控時的 CPU 頻率節流器 (和排程器) 行為。為避免時脈頻率緩慢升高 (可能導致裝置在觸控時掉幀),觸控加速功能通常會在 CPU 上設定頻率下限,確保在觸控時有充足的 CPU 容量。觸碰後,地板會持續一段時間 (通常約兩秒)。

Pixel 也會使用由能源感知排程 (EAS) 提供的 schedtune cgroup,做為額外的觸控提升信號:熱門應用程式會透過 schedtune 獲得額外權重,確保有足夠的 CPU 容量可快速執行。相較於搭載 Kryo CPU 的 Pixel,Nexus 5X 和 6P 在小 CPU 叢集 (分別為 A53 和 A57) 和大 CPU 叢集之間的效能差距更大。我們發現,小 CPU 叢集不一定能順利轉譯 UI,特別是考量到裝置上其他造成抖動的來源。

因此,在 Nexus 5X 和 6P 上,觸控加速功能會修改排程器行為,讓前景應用程式更有可能移至大核心 (這在概念上類似於 CPU 頻率的下限)。如果未變更排程器,讓前景應用程式更有可能移至大型 CPU 叢集,前景應用程式可能會因 CPU 容量不足而無法轉譯,直到排程器決定將執行緒負載平衡至大型 CPU 核心為止。在觸控加速期間變更排程器行為,可讓 UI 執行緒立即在大型核心上執行,並避免發生卡頓情形,但不會強制執行緒一律在大型核心上執行,這可能會嚴重影響耗電量。

熱控

當裝置必須降低整體熱輸出時,就會發生溫度調節,通常會透過降低 CPU、GPU 和 DRAM 時脈來執行。毫不意外,這通常會導致卡頓,因為系統可能無法再提供足夠的效能,無法在指定的時間片中算繪。避免熱降速的唯一方法是減少電力消耗。這類情況的解決方法不多,但根據我們過去的 SOC 經驗,我們有幾項建議提供給系統供應商。

首先,在使用異質 CPU 架構建構新的 SOC 時,請確保 CPU 叢集的效能/W 曲線重疊。整個處理器的整體效能/W 曲線應為連續線。效能/W 曲線中的不連續性會迫使調度器和頻率節流器猜測工作負載的需求;為了避免卡頓,調度器和頻率節流器會將工作負載的容量設為高於所需容量。這會導致耗電量過高,進而導致熱節流。

假設有一個 SOC 包含兩個 CPU 叢集:

  • 叢集 1 (小叢集) 的耗電量介於 100 至 300 毫瓦之間,在處理量基準測試中獲得的得分則介於 100 至 300 之間,具體取決於時脈。
  • 叢集 2 (大型叢集) 的耗電量介於 1000 和 1600 毫瓦之間,在相同的總處理量基準測試中,分數介於 800 和 1200 之間,具體取決於時脈。

在這個基準測試中,分數越高表示速度越快。雖然速度越快不如速度較慢,但耗電量也越高。

如果排程器認為 UI 工作負載需要在該吞吐量基準測試中獲得 310 分的分數,為了避免卡頓,最佳做法就是以最低頻率執行大型叢集,但這會造成大量電力浪費。(這取決於 CPU 閒置行為和競爭閒置;具有連續效能/瓦特曲線的 SOC 較容易進行最佳化)。

其次,請使用 cpuset。請確認您已在核心和 BoardConfig.mk 中啟用 cpuset。您還必須在裝置專屬的 init.rc 中設定實際的 cpuset 指派。部分供應商會在 BSP 中停用這項功能,希望能使用其他提示來影響排程器行為;我們認為這不合理。cpuset 可用於確保 CPU 之間的負載平衡方式,反映使用者在裝置上實際執行的操作。

ActivityManager 會根據應用程式的相對重要性 (頂層、前景、背景),將應用程式指派至不同的 CPU 集合,重要性較高的應用程式可獲得更多 CPU 核心存取權。這有助於確保前景和熱門應用程式的服務品質。

cpuset 可用於同質 CPU 設定,但如果裝置採用異質 CPU 設定,則不應啟用 cpuset。Nexus 6P 是使用 CPU 集合來處理不同 CPU 設定的理想模型,可做為您自身裝置設定的基礎。

cpuset 還可提供省電優勢,確保非效能關鍵的背景執行緒不會將負載平衡至大 CPU 核心,因為大 CPU 核心會耗費大量電力,但使用者不會因此獲得任何好處。這也有助於避免熱節流。雖然溫度調節是容量問題,但在溫度調節期間,抖動改善作業會對 UI 效能造成極大影響。由於系統會以更接近 60FPS 的渲染能力運作,因此需要的抖動較少,才會導致影格遺失。