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