最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一文解析Systrace 的原理、流程及定制

2023-04-25 14:45 作者:補給站Linux內(nèi)核  | 我要投稿

一、原理和基本流程

Systrace是android性能調(diào)試優(yōu)化的常用工具,它可以收集進程的活動信息,如界面布局、UI渲染、binder通信等;也可以收集內(nèi)核信息,如cpu調(diào)度、IO活動、中斷等;這些信息會統(tǒng)一時間軸,在Chrome瀏覽器中顯示出來,非常方便工程師性能調(diào)試、優(yōu)化卡頓等工作。

簡易的流程圖如下,systrace是基于ftrace實現(xiàn)的,而ftrace 是 Linux 內(nèi)核中的調(diào)試跟蹤機制。


  1. 首先systrace指定抓取trace的類別等參數(shù),然后觸發(fā)手機端的/system/bin/atrace 開啟對應(yīng)文件節(jié)點的信息記錄,接著atrace會讀取 ftrace 的緩存,生成只包含ftrace信息的atrace_raw。

  2. Systrace會進一步收集系統(tǒng)的ps、task等信息,這些信息是為了協(xié)助解析atrace_raw中的ftrace信息,比如ps信息可以得到進程的名稱,而不是難記的pid號。處理后的ftrace信息將和systrace目錄下的prefix.html、systrace_trace_viewer.html、suffix.html整合為一體,成為單個的html文件。

  3. 當瀏覽systrace信息時,Chrome瀏覽器借助systrace解析器(通過chrome://tracing訪問),解析上面生成的trace.html文件,把其中原始的ftrace信息分門別類,再按照時間軸聚合排列,繪制出不同色塊,簡潔可觀的顯示在html頁面上。


二、具體實現(xiàn)

Systrace是怎么把系統(tǒng)多種多樣的信息都整合進ftrace中的呢?請看下圖:



Systrace抓取的trace數(shù)據(jù),總體上可以分為兩類,一類是Java和Native在用戶層發(fā)生的函數(shù)調(diào)用,一類是內(nèi)核態(tài)的事件信息。

用戶層的函數(shù)調(diào)用,其實最終事件記錄都是同一個文件節(jié)點/sys/kernel/debug/tracing/trace_marker。

此節(jié)點允許用戶層寫入字符串,ftrace會記錄該寫入操作時的時間戳,當用戶在上層調(diào)用不同函數(shù)時,寫入不同的調(diào)用信息,比如函數(shù)進入和退出分別寫入,那么ftrace就可以記錄跟蹤函數(shù)的運行時間。

atrace在處理用戶層的多種trace類別時,僅僅是激活不同的TAG,如用戶選擇了Input類別,則激活A(yù)TRACE_TAG_INPUT;選中Graphics則激活A(yù)TRACE_TAG_GRAPHICS,記錄調(diào)用的流程都是一樣的,最終都是記錄到trace_marker。

內(nèi)核態(tài)的事件信息,則不是統(tǒng)一的,需要激活各自對應(yīng)的事件節(jié)點,讓ftrace記錄下不同事件的tracepoint。例如激活進程調(diào)度信息記錄,需要激活如下相關(guān)節(jié)點:

events/sched/sched_switch/enable

events/sched/sched_wakeup/enable

內(nèi)核在運行時,根據(jù)節(jié)點的使能狀態(tài),會往ftrace緩沖中打點記錄事件。

最終,上述兩類事件記錄都匯集到同一緩沖中,然后atrace工具會回讀抓取,保存下來就是原始的systrace信息。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


三、顯示定制信息

Systrace的參數(shù)設(shè)置和使用方法,網(wǎng)絡(luò)上內(nèi)容已經(jīng)不勝枚舉,就不再累述。下面講解一下較少闡述的顯示定制信息功能。

一般情況下,默認的systrace各種trace類別已經(jīng)涵蓋了系統(tǒng)的各個方面,足夠工程師分析調(diào)試了。但某些特定情況下,工程師需要增加自定義的trace類別,并同樣集成到systrace中。比如工程師需要觀察到內(nèi)核各個run queue的隊列深度,那么他應(yīng)該怎么做呢?

1.新加定制的trace類別

既然原有的systrace trace不能滿足,需要新增一項??梢匀rameworks/native/cmds/atrace/atrace.cpp中增加一類category, 如



2.內(nèi)核增加對應(yīng)的tracepoint

Systrace是基于ftrace的,那么上面的類別需要在內(nèi)核中增加對應(yīng)節(jié)點。



在新建的sched_rq_running event中實現(xiàn)輸出新增的trace類別的信息,通過上面的1、2兩個步驟,在抓取systrace時選中新建類別kernel_runqueue, 則抓取的trace.html將包含sched_rq_running的信息。

假設(shè)新的信息如下:


3.顯示出sched_rq_running的信息

如果sched_rq_running.html 在 chrome里面打開,我們并沒能發(fā)現(xiàn)自定義的任何信息顯示出來。這個是由于默認的chrome://tracing 解析器并不知道如何解析sched_rq_running的信息。

Systrace能夠解析顯示出進程調(diào)度的sched_wakeup、sched_switch等信息,那是因為chrome://tracing 解析器知道如何解析進程調(diào)度信息,如下面格式的內(nèi)容。



但是并不知道如何解析自定義的sched_rq_running信息。

這時候,我們就需要尋根溯源了,我們先找到systrace的生母,谷歌開源項目https://chromium.googlesource.com/catapult。

正是catapult生成了systrace及其解析器的工具。在catapult中,谷歌采用javascript實現(xiàn)了一個跨平臺的trace解析工具,我們可以參考tracing/tracing/extras/importer/linux_perf目錄下的各種解析器,比如sched_parser.html是用于解析進程調(diào)度信息的,power_parser是用于解析cpu頻率等信息的,學以致用生成自己定制的sched_rq_running_parser.html。

Catapult的各種解析器,可以理解為先按照trace的類型分類處理,然后加入各個時段的采樣值。

如tracing/tracing/extras/importer/linux_perf/power_parser.html

實現(xiàn)了如何解析出cpu頻率信息:

<idle>-0???? (-----) [001] d.Hb?? 948.300084: cpu_frequency: state=1344000 cpu_id=2


1)power_parser.html注冊了cpu_frequency信息由函數(shù)cpuFrequencyEvent處理



2) cpuFrequencyEvent分解cpu_frequency信息



3) 把cpu頻率采樣值加入Clock Frequency信息欄



在我們加入額外的sched_rq_running_parser.html解析器之后,需要使用tracing/tracing_build/generate_about_tracing_contents.py重新生成about_tracing.html和tracing.js(這里需要改名,使之和about_tracing.html中的script腳本名稱相同)。


然后使用about_tracing.html作為新的systrace解析器,代替默認的chrome://tracing,這時再把sched_rq_running.html放進來解析,我們就終于可以看到自定義的systrace信息了。



原文作者:內(nèi)核工匠





一文解析Systrace 的原理、流程及定制的評論 (共 條)

分享到微博請遵守國家法律
银川市| 祥云县| 全椒县| 通榆县| 宁化县| 樟树市| 德钦县| 渝中区| 南部县| 沈阳市| 镇原县| 衢州市| 宁远县| 马尔康县| 滨海县| 广丰县| 绥阳县| 宜都市| 津南区| 咸阳市| 汽车| 台山市| 家居| 上杭县| 卢湾区| 吉林省| 东乌珠穆沁旗| 乌海市| 建宁县| 北海市| 炎陵县| 夏邑县| 张家川| 新野县| 汶上县| 南汇区| 桂东县| 鄂州市| 扬州市| 磐石市| 蒙阴县|