OpenHarmony性能分析工具Bytrace
原創??https://harmonyos.51cto.com??
一、Bytrace簡介
bytrace是開發人員用于追蹤進程軌跡、查看性能的一種工具,主要對內核ftrace進行了封裝和擴展,來支持用戶態的打點。該工具主要分為兩部分,API和命令行:
1.bytrace向應用開發人員暴露了打點的API,開發應用過程中可以在關鍵代碼處調用對應API進行打點;
2.命令行部分通過使能對應的label,來獲取打點信息。通過該工具可以打開想要查看的用戶態和內核label(通過命令行“bytrace -l”,查看支持的所有label),然后通過命令行進行抓取trace信息到指定文件中,下文有具體使用指導。
二、架構圖
三、Bytrace工具使用說明
命令行列表
Option Description
-h,--help 查看option幫助
-b n,--buffer_size n 指定n(KB)內存大小用于存取trace日志,默認2048KB
-t n,--time n 用來指定trace運行的時間(單位:s),取決于需要分析過程的時間
--trace_clock clock trace輸出的時鐘類型,一般設備支持boot、global、mono、uptime、perf等,默認為boot
--trace_begin 啟動抓trace
--trace_dump 將數據輸出到指定位置(默認控制臺)
--trace_finish 停止抓trace,并將數據輸出到指定位置(默認控制臺)
-l,--list_categories 輸出手機能支持的trace模塊
--overwrite 當緩沖區滿的時候,將丟棄最新的信息。(默認丟棄最老的日志)
-o filename,--output filename 指定輸出的目標文件名稱
-z 抓取trace后進行壓縮
四、工具使用示例
@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能連接上,執行上述命令,完成在當前目錄獲取到mynewtrace.ftrace文件
echo > /sys/kernel/debug/tracing/trace 清空系統trace數據,便于抓取產生的新數據
echo 4096 > /sys/kernel/debug/tracing/saved_cmdlines_size
保存trace數據數目,4096條
-t 10 -b 4096 為抓取10s的數據,指定4096(KB)內存大小用于存取trace日志
ohos zimage zmedia zcamera zaudio ability distributeddatamgr graphic freq
irq mdfs workq mmc idle notification sync pagecache ace app 為抓取數據的模塊
sed -i '1,2d' /data/mynewtrace.ftrace 刪除前面兩行不需要數據內容
hdc file recv /data/mynewtrace.ftrace %cd% hdc下載ftrace文件內容到本地當前目錄
五、ftrace數據的調度軌跡數據
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為任務進程ID, TGID為線程ID, CPU#為CPU核ID, TIMESTAMP為運行的時間戳,FUNCTION為程序運行的函數
??https://harmonyos.51cto.com??