1# trace_streamer工具说明 2trace_streamer工具可以2种方式使用 31. 可以将系统离线trace文件解析并转为db,此工具支持基于文本的trace和基于proto的trace。 42. trace_streamer工具还可以WebAssembly的方式在浏览器中运行,需暴露相关接口给js文件。 5 6## 关于trace解析工具的使用说明: 7### 导出db模式 8在导出db模式下,trace_streamer.exe trace文件路径名 -e 导出db路径名.db 9此命令可以将trace文件转为db 10本应用支持在ohos, linux, windows, mac使用。 11关于db文件的说明: 12使用db查看工具查看stat表,可以浏览当前数据一共有多少类数据,各类数据都收到多少条,数据是否正常等情况。在meta表会记录数据库导出时的一些系统信息,比如导入和导出的文件全路径,解析时间等信息。 13meta表可以选择不导出(有些情况下会暴露系统敏感信息),在导出时添加 -nm选项即可。 14在数据导出之后,会在本地目录下生成一个trace_streamer.log文件,在导出db的目录下生成一个数据库文件同名,.db.ohos.ts后缀的文件 15文件内容如下: 16时间戳:执行结果(数字) 17应用运行时间 18 19执行结果解释如下:0 代表执行成功 1 表示输入文件不匹配, 2 表示解析错误, 3其他错误 20### 内置浏览器方式 21trace_streamer可以WebAssembly方式在浏览器中运行,暴露如下接口给js 22``` 23extern "C" { 24/* 上传trace数据 25 * 26 * @data: 数据的缓冲区 27 * @dataLen: 数据长度 28 * 29 * return: 0:成功; -1:失败 30*/ 31EMSCRIPTEN_KEEPALIVE int TraceStreamerParseData(const uint8_t* data, int dataLen); 32 33/* 通知TS上传trace数据结束 34 * 35 * return: 0:成功; -1:失败 36*/ 37EMSCRIPTEN_KEEPALIVE int TraceStreamerParseDataOver(); 38 39/* 通过sql语句操作数据库 40 * 41 * @sql: sql语句 42 * @sqlLen: sql语句长度 43 * 44 * return: 0:成功; -1:失败 45*/ 46EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlOperate(const uint8_t* sql, int sqlLen); 47 48/* 通过sql语句查询数据库 49 * 50 * @sql: sql语句 51 * @sqlLen: sql语句长度 52 * @out: 查询结果的缓冲区,查询结果为json 53 * @outLen: 缓冲区长度 54 * 55 * return: >0:查询成功,返回查询结果数据长度; -1:失败 56*/ 57EMSCRIPTEN_KEEPALIVE int TraceStreamerSqlQuery(const uint8_t* sql, int sqlLen, uint8_t* out, int outLen); 58 59} // extern "C" 60``` 61 62### 你也可以执行如下命令查看应用帮助 63./trace_streamer --help 64-i 选项可查看应用支持的事件源和具体的事件名列表 65 66#### trace_streamer支持的事件解析 67本工具支持基于文本的trace(# TRACE)和基于proto的二进制日志文件的解析,支持的事件列表如下: 68##### ftrace事件 69``` 70binder_transaction 71binder_transaction_received 72binder_transaction_alloc_buf 73binder_transaction_lock 74binder_transaction_locked 75binder_transaction_unlock 76sched_switch 77task_rename 78task_newtask 79tracing_mark_write 80print 81sched_wakeup 82sched_waking 83cpu_idle 84cpu_frequency 85suspend_resume 86workqueue_execute_start 87workqueue_execute_end 88clock_set_rate 89clock_enable 90clock_disable 91clk_set_rate 92clk_enable 93clk_disable 94sys_enter 95sys_exit 96regulator_set_voltage 97regulator_set_voltage_complete 98regulator_disable 99regulator_disable_complete 100ipi_entry 101ipi_exit 102irq_handler_entry 103irq_handler_exit 104softirq_raise 105softirq_entry 106softirq_exit 107sched_wakeup_new 108sched_process_exit 109trace_event_clock_sync 110``` 111##### 内存事件 112``` 113mem.vm.size 114mem.rss 115mem.rss.anon 116mem.rss.file 117mem.rss.schem 118mem.swap 119mem.locked 120mem.hwm 121mem.oom_score_adj 122``` 123##### 系统内存事件 124``` 125sys.mem.unspecified 126sys.mem.total 127sys.mem.free 128sys.mem.avaiable 129sys.mem.buffers 130sys.mem.cached 131sys.mem.swap.chard 132sys.mem.active 133sys.mem.inactive 134sys.mem.active.anon 135sys.mem.inactive.anon 136sys.mem.active_file 137sys.mem.inactive_file 138sys.mem.unevictable 139sys.mem.mlocked 140sys.mem.swap.total 141sys.mem.swap.free 142sys.mem.dirty 143sys.mem.writeback 144sys.mem.anon.pages 145sys.mem.mapped 146sys.mem.shmem 147sys.mem.slab 148sys.mem.slab.reclaimable 149sys.mem.slab.unreclaimable 150sys.mem.kernel.stack 151sys.mem.page.tables 152sys.mem.commit.limit 153sys.mem.commited.as 154sys.mem.vmalloc.total 155sys.mem.vmalloc.used 156sys.mem.vmalloc.chunk 157sys.mem.cma.total 158sys.mem.cma.free 159``` 160##### 系统虚拟内存事件 161``` 162sys.virtual.mem.unspecified 163sys.virtual.mem.nr.free.pages 164sys.virtual.mem.nr.alloc.batch 165sys.virtual.mem.nr.inactive.anon 166sys.virtual.mem.nr.active_anon 167sys.virtual.mem.nr.inactive.file 168sys.virtual.mem.nr.active_file 169sys.virtual.mem.nr.unevictable 170sys.virtual.mem.nr.mlock 171sys.virtual.mem.anon.pages 172sys.virtual.mem.nr.mapped 173sys.virtual.mem.nr.file.pages 174sys.virtual.mem.nr.dirty 175sys.virtual.mem.nr.writeback 176sys.virtual.mem.nr.slab.reclaimable 177sys.virtual.mem.nr.slab.unreclaimable 178sys.virtual.mem.nr.page_table.pages 179sys.virtual.mem.nr_kernel.stack 180sys.virtual.mem.nr.overhead 181sys.virtual.mem.nr.unstable 182sys.virtual.mem.nr.bounce 183sys.virtual.mem.nr.vmscan.write 184sys.virtual.mem.nr.vmscan.immediate.reclaim 185sys.virtual.mem.nr.writeback_temp 186sys.virtual.mem.nr.isolated_anon 187sys.virtual.mem.nr.isolated_file 188sys.virtual.mem.nr.shmem 189sys.virtual.mem.nr.dirtied 190sys.virtual.mem.nr.written 191sys.virtual.mem.nr.pages.scanned 192sys.virtual.mem.workingset.refault 193sys.virtual.mem.workingset.activate 194sys.virtual.mem.workingset_nodereclaim 195sys.virtual.mem.nr_anon.transparent.hugepages 196sys.virtual.mem.nr.free_cma 197sys.virtual.mem.nr.swapcache 198sys.virtual.mem.nr.dirty.threshold 199sys.virtual.mem.nr.dirty.background.threshold 200sys.virtual.mem.vmeminfo.pgpgin 201sys.virtual.mem.pgpgout 202sys.virtual.mem.pgpgoutclean 203sys.virtual.mem.pswpin 204sys.virtual.mem.pswpout 205sys.virtual.mem.pgalloc.dma 206sys.virtual.mem.pgalloc.normal 207sys.virtual.mem.pgalloc.movable 208sys.virtual.mem.pgfree 209sys.virtual.mem.pgactivate 210sys.virtual.mem.pgdeactivate 211sys.virtual.mem.pgfault 212sys.virtual.mem.pgmajfault 213sys.virtual.mem.pgrefill.dma 214sys.virtual.mem.pgrefill.normal 215sys.virtual.mem.pgrefill.movable 216sys.virtual.mem.pgsteal.kswapd.dma 217sys.virtual.mem.pgsteal.kswapd.normal 218sys.virtual.mem.pgsteal.kswapd.movable 219sys.virtual.mem.pgsteal.direct.dma 220sys.virtual.mem.pgsteal.direct.normal 221sys.virtual.mem.pgsteal_direct.movable 222sys.virtual.mem.pgscan.kswapd.dma 223sys.virtual.mem.pgscan_kswapd.normal 224sys.virtual.mem.pgscan.kswapd.movable 225sys.virtual.mem.pgscan.direct.dma 226sys.virtual.mem.pgscan.direct.normal 227sys.virtual.mem.pgscan.direct.movable 228sys.virtual.mem.pgscan.direct.throttle 229sys.virtual.mem.pginodesteal 230sys.virtual.mem.slabs_scanned 231sys.virtual.mem.kswapd.inodesteal 232sys.virtual.mem.kswapd.low.wmark.hit.quickly 233sys.virtual.mem.high.wmark.hit.quickly 234sys.virtual.mem.pageoutrun 235sys.virtual.mem.allocstall 236sys.virtual.mem.pgrotated 237sys.virtual.mem.drop.pagecache 238sys.virtual.mem.drop.slab 239sys.virtual.mem.pgmigrate.success 240sys.virtual.mem.pgmigrate.fail 241sys.virtual.mem.compact.migrate.scanned 242sys.virtual.mem.compact.free.scanned 243sys.virtual.mem.compact.isolated 244sys.virtual.mem.compact.stall 245sys.virtual.mem.compact.fail 246sys.virtual.mem.compact.success 247sys.virtual.mem.compact.daemon.wake 248sys.virtual.mem.unevictable.pgs.culled 249sys.virtual.mem.unevictable.pgs.scanned 250sys.virtual.mem.unevictable.pgs.rescued 251sys.virtual.mem.unevictable.pgs.mlocked 252sys.virtual.mem.unevictable.pgs.munlocked 253sys.virtual.mem.unevictable.pgs.cleared 254sys.virtual.mem.unevictable.pgs.stranded 255sys.virtual.mem.nr.zspages 256sys.virtual.mem.nr.ion.heap 257sys.virtual.mem.nr.gpu.heap 258sys.virtual.mem.allocstall.dma 259sys.virtual.mem.allocstall.movable 260sys.virtual.mem.allocstall.normal 261sys.virtual.mem.compact_daemon.free.scanned 262sys.virtual.mem.compact.daemon.migrate.scanned 263sys.virtual.mem.nr.fastrpc 264sys.virtual.mem.nr.indirectly.reclaimable 265sys.virtual.mem.nr_ion_heap_pool 266sys.virtual.mem.nr.kernel_misc.reclaimable 267sys.virtual.mem.nr.shadow_call.stack_bytes 268sys.virtual.mem.nr.shmem.hugepages 269sys.virtual.mem.nr.shmem.pmdmapped 270sys.virtual.mem.nr.unreclaimable.pages 271sys.virtual.mem.nr.zone.active.anon 272sys.virtual.mem.nr.zone.active.file 273ys.virtual.mem.nr.zone.inactive_anon 274sys.virtual.mem.nr.zone.inactive_file 275sys.virtual.mem.nr.zone.unevictable 276sys.virtual.mem.nr.zone.write_pending 277sys.virtual.mem.oom.kill 278sys.virtual.mem.pglazyfree 279sys.virtual.mem.pglazyfreed 280sys.virtual.mem.pgrefill 281sys.virtual.mem.pgscan.direct 282sys.virtual.mem.pgscan.kswapd 283sys.virtual.mem.pgskip.dma 284sys.virtual.mem.pgskip.movable 285sys.virtual.mem.pgskip.normal 286sys.virtual.mem.pgsteal.direct 287sys.virtual.mem.pgsteal.kswapd 288sys.virtual.mem.swap.ra 289sys.virtual.mem.swap.ra.hit 290``` 291 292## trace_streamer开发环境搭建和编译运行指引 293 294本应用使用gn作为构建工具,支持在linux环境同时编译linux,windows和mac使用QtCreator作为开发IDE 295### 1、开发环境 296ubuntu使用vscode,windows和mac使用QtCreator 297# 对外部的依赖 298本应用依赖与sqlite,protobuf(htrace解析部分依赖) 299 300本应用同时依赖于src/protos目录下文件来生成相关pb.h,pb.cc文件 301 302### 2.1、 编译linux版应用 303在根目录下执行相关命令进行编译 304 305### 2.2、编译Windows版和Mac应用 306在项目目录下有pro文件,为QtCreator的工程文件,但部分内容赖在于上面所添加的外部依赖,如果要编译相关平台应用,开发者需自行补充相关工程文件,或者在论坛留言 307 308### 2.3、开始编译 309具体方法可参考《compile_trace_streamer.md》