OpenHarmony性能分析工具Bytrace
原創(chuàng)??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??
一、Bytrace簡(jiǎn)介
bytrace是開(kāi)發(fā)人員用于追蹤進(jìn)程軌跡、查看性能的一種工具,主要對(duì)內(nèi)核ftrace進(jìn)行了封裝和擴(kuò)展,來(lái)支持用戶態(tài)的打點(diǎn)。該工具主要分為兩部分,API和命令行:
1.bytrace向應(yīng)用開(kāi)發(fā)人員暴露了打點(diǎn)的API,開(kāi)發(fā)應(yīng)用過(guò)程中可以在關(guān)鍵代碼處調(diào)用對(duì)應(yīng)API進(jìn)行打點(diǎn);
2.命令行部分通過(guò)使能對(duì)應(yīng)的label,來(lái)獲取打點(diǎn)信息。通過(guò)該工具可以打開(kāi)想要查看的用戶態(tài)和內(nèi)核label(通過(guò)命令行“bytrace -l”,查看支持的所有l(wèi)abel),然后通過(guò)命令行進(jìn)行抓取trace信息到指定文件中,下文有具體使用指導(dǎo)。
二、架構(gòu)圖
三、Bytrace工具使用說(shuō)明
命令行列表
Option Description
-h,--help 查看option幫助
-b n,--buffer_size n 指定n(KB)內(nèi)存大小用于存取trace日志,默認(rèn)2048KB
-t n,--time n 用來(lái)指定trace運(yùn)行的時(shí)間(單位:s),取決于需要分析過(guò)程的時(shí)間
--trace_clock clock trace輸出的時(shí)鐘類型,一般設(shè)備支持boot、global、mono、uptime、perf等,默認(rèn)為boot
--trace_begin 啟動(dòng)抓trace
--trace_dump 將數(shù)據(jù)輸出到指定位置(默認(rèn)控制臺(tái))
--trace_finish 停止抓trace,并將數(shù)據(jù)輸出到指定位置(默認(rèn)控制臺(tái))
-l,--list_categories 輸出手機(jī)能支持的trace模塊
--overwrite 當(dāng)緩沖區(qū)滿的時(shí)候,將丟棄最新的信息。(默認(rèn)丟棄最老的日志)
-o filename,--output filename 指定輸出的目標(biāo)文件名稱
-z 抓取trace后進(jìn)行壓縮
四、工具使用示例
@echo off
hdc shell "echo > /sys/kernel/debug/tracing/trace"
hdc shell "echo 4096 > /sys/kernel/debug/tracing/saved_cmdlines_size"
hdc shell "bytrace -t 10 -b 4096 --overwrite ohos zimage zmedia zcamera zaudio ability distributeddatamgr graphic freq irq mdfs workq mmc idle notification sync pagecache ace app > /data/mynewtrace.ftrace"
hdc shell "echo > /sys/kernel/debug/tracing/trace"
hdc shell "sed -i '1,2d' /data/mynewtrace.ftrace"
hdc file recv /data/mynewtrace.ftrace %cd%
pause
hdc為hdc.exe文件,hdc能連接上,執(zhí)行上述命令,完成在當(dāng)前目錄獲取到mynewtrace.ftrace文件
echo > /sys/kernel/debug/tracing/trace 清空系統(tǒng)trace數(shù)據(jù),便于抓取產(chǎn)生的新數(shù)據(jù)
echo 4096 > /sys/kernel/debug/tracing/saved_cmdlines_size
保存trace數(shù)據(jù)數(shù)目,4096條
-t 10 -b 4096 為抓取10s的數(shù)據(jù),指定4096(KB)內(nèi)存大小用于存取trace日志
ohos zimage zmedia zcamera zaudio ability distributeddatamgr graphic freq
irq mdfs workq mmc idle notification sync pagecache ace app 為抓取數(shù)據(jù)的模塊
sed -i '1,2d' /data/mynewtrace.ftrace 刪除前面兩行不需要數(shù)據(jù)內(nèi)容
hdc file recv /data/mynewtrace.ftrace %cd% hdc下載ftrace文件內(nèi)容到本地當(dāng)前目錄
五、ftrace數(shù)據(jù)的調(diào)度軌跡數(shù)據(jù)
entries-in-buffer/entries-written: 42335/42335 #P:2
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID TGID CPU# |||| TIMESTAMP FUNCTION
# | | | | |||| | |
bytrace-542 ( 542) [001] .... 4811.090453: mm_filemap_add_to_page_cache: dev 179:7 ino e1 page=05202a4a pfn=587751 ofs=0
<idle>-0 (-------) [001] d... 4811.090585: cpu_idle: state=1 cpu_id=1
<idle>-0 (-------) [001] d.h. 4811.100006: irq_handler_entry: irq=24 name=arch_timer
<idle>-0 (-------) [000] d.h. 4811.100007: irq_handler_entry: irq=24 name=arch_timer
<idle>-0 (-------) [001] dnh. 4811.100053: softirq_raise: vec=9 [action=RCU]
<idle>-0 (-------) [001] dns. 4811.100097: ipi_raise: target_mask=00000001 (Function call interrupts)
<idle>-0 (-------) [001] .ns. 4811.100101: softirq_exit: vec=9 [action=RCU]
<idle>-0 (-------) [001] .n.. 4811.100104: cpu_idle: state=4294967295 cpu_id=1
softbus_server-272 ( 178) [000] d.h. 4811.100105: irq_handler_entry: irq=19 name=IPI
softbus_server-272 ( 178) [000] d.h. 4811.100109: ipi_entry: (Function call interrupts)
softbus_server-272 ( 178) [000] d.h. 4811.100124: ipi_exit: (Function call interrupts)
softbus_server-272 ( 178) [000] d.h. 4811.100126: irq_handler_exit: irq=19 ret=handled
TASK-PID為任務(wù)進(jìn)程ID, TGID為線程ID, CPU#為CPU核ID, TIMESTAMP為運(yùn)行的時(shí)間戳,F(xiàn)UNCTION為程序運(yùn)行的函數(shù)
??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??