https://source.android.com/docs/core/tests/debug/eval_perf?hl=zh-cn
容量和抖動
在考慮設備性能時,容量和抖動是兩項重要指標。
容量
容量是設備在一段時間內擁有的某種資源的總量。這種資源可以是 CPU 資源、GPU 資源、I/O 資源、網絡資源、存儲設備帶寬或其他類似指標。在檢查整個系統(tǒng)的性能時,抽取各個組件并假設單項指標決定著性能會很有用;尤其是調優(yōu)新設備時,因為在新設備上運行的工作負載很可能是固定的。
系統(tǒng)的容量因在線計算資源而異。更改 CPU/GPU 頻率是改變容量的主要方式,但也有其他方式,如更改在線 CPU 核心數(shù)。相應地,系統(tǒng)的容量與耗電量相對應,更改容量一定會導致耗電量出現(xiàn)類似的變化。
特定時間內所需的容量在絕大多數(shù)情況下取決于正在運行的應用。因此,平臺幾乎不能調整特定工作負載所需的容量,調整所用的方式也僅限于運行時改進(Android 框架、ART、Bionic、GPU 編譯器/驅動程序、內核)。
抖動
雖然工作負載所需的容量很容易看出來,但是抖動卻是一個比較模糊的概念。有關抖動會妨礙系統(tǒng)快速運行的詳細介紹,請參閱?THE CASE OF THE MISSING SUPERCOMPUTER PERFORMANCE: ACHIEVING OPTIMAL PERFORMANCE ON THE 8,192 PROCESSORS OF ASCl Q。(這是一項針對 ASCI Q 超級計算機為何達不到預期性能的調查,同時詳細介紹了如何優(yōu)化大型系統(tǒng)。)
本頁使用“抖動”一詞來描述 ASCI Q 論文中提到的噪點。抖動是一種隨機的系統(tǒng)行為,會阻止可察覺任務的運行。通常是必須運行的任務,但可能對在任一特定時間運行沒有嚴格的定時要求。因為抖動具有隨機性,所以很難證明某一特定工作負載不存在抖動,也很難證明某已知抖動源是導致某個特定性能問題的原因。診斷抖動原因最常用的工具(如跟蹤或日志記錄)可能會引入它們自己的抖動。
在實際的 Android 實現(xiàn)中遇到的抖動源包括:
調度程序延遲
中斷處理程序
驅動程序代碼在搶占或中斷被停用的情況下運行時間過長
運行時間較長的軟中斷
鎖爭用(應用、框架、內核驅動程序、Binder 鎖、mmap 鎖)
文件描述符爭用,低優(yōu)先級的線程持有某個文件的鎖,以防止高優(yōu)先級線程運行
在可能會延遲的工作隊列中運行界面關鍵型代碼
CPU 空閑轉換
記錄
I/O 延遲
創(chuàng)建不必要的進程(如 CONNECTIVITY_CHANGE 廣播)
可用內存不足所導致的頁面緩存抖動
內存消耗
一直以來,人們都將性能不佳歸因于內存消耗。雖然消耗本身不是性能問題,但是它可能會通過 lowmemorykiller 開銷、服務重啟和頁面緩存顛簸引起抖動。減少內存消耗可以避免導致性能不佳的直接原因,但是還有其他可避免這些原因的具有針對性的改進(如固定框架以防止在不久之后進行的分頁過程中將其分出)。