热点函数分析
命令功能
支持分析C/C++程序代码识别性能瓶颈,给出对应的Top热点函数和调用栈详情。通过火焰图展示函数的调用关系,发现优化路径。
命令格式
devkit tuner hotspot [-h] [-c {n | n,m | n-m}] [-d <sec>] [-D <sec>] [-f n] [-l {0, 1, 2, 3}] [-i <sec>] [-r {user, kernel, all}] [-o] [-s] [-p {PID1 | PID1,PID2 | ALL}] [-g] [--package] [--long-name] [--dwarf] [workload workload...]
参数说明
参数 |
参数选项 |
说明 |
---|---|---|
-h/--help |
- |
获取帮助信息。 |
-c/--cpu |
- |
指定采集的CPU核数,如“0”、“0,1,2”、“0-2”。 |
-d/--duration |
- |
设置采集时长,单位为秒,默认为一直采集,可使用Ctrl+\取消任务或Ctrl+C停止采集并进入分析。 |
-D/--delay |
- |
设置延迟采样时长,默认为0秒。 |
-i/--interval |
- |
设置采集间隔(以秒为单位)。最小值为1秒,最大值不能超过采集时长。默认为采集时长。如果不指定间隔,不生成子报告。每个子报告中收集数据的时间取决于间隔参数。 |
-l/--log-level |
0/1/2/3 |
配置日志等级。默认值为1(info)。
|
-f/--frequency |
- |
设置采样频率,最小值为1次/秒,默认为200次/秒。 |
-o/--output |
- |
设置报告数据生成文件名,默认为当前所在目录。 |
-r/--clloection-range |
user/kernel/all |
设置采集模式,默认为all。
|
-s/--src-dir |
- |
指定源码工作目录,用于查找并关联源码,可将任务导入Web端查看。 |
-g |
- |
显示调用堆栈信息。如果启用-g选项,将生成火焰图html文件,默认生成在用户所在目录。 |
-p/--pid |
PID/PID1,PID2/ALL |
指定采集的进程PID,多个进程PID可用“,”分隔。默认采集全部进程(ALL)。若同时使用-p和-c参数则优先采集指定PID的进程。 |
--long-name |
- |
设置是否显示详细函数和模块信息。不使用此参数默认简洁显示模块或功能信息。 |
--dwarf |
- |
设置是否生成C/C++的源代码或汇编代码文件。 |
-t/--top |
- |
设置报告中显示数据数量,最小值为1个。 |
--package |
- |
设置是否将数据导入数据库,并在指定输出路径中生成压缩包。 |
使用示例
devkit tuner hotspot -c 0-127 -d 3 -i 1 -o /home/hotspot_cpu -g --package --long-name
返回信息如下:
Hotspot Summary Report-1 Time:2024/05/22 17:10:22 ================================================================================ ──────────────────────────────────────────────────────────────────────── Function Cycles Module Cycles(%) ──────────────────────────────────────────────────────────────────────── arch_cpu_idle 109,478,705 [kernel] 14.22 __do_softirq 81,866,664 [kernel] 10.63 UNKNOWN 30,688,513 libc.so.6 3.99 rcu_report_qs_rdp 28,416,897 [kernel] 3.69 UNKNOWN 27,848,831 libnss_sss.so.2 3.62 finish_task_switch 27,210,492 [kernel] 3.53 ... ... Hotspot Summary Report-2 Time:2024/05/22 17:10:23 ================================================================================ ──────────────────────────────────────────────────────────────────────── Function Cycles Module Cycles(%) ──────────────────────────────────────────────────────────────────────── arch_cpu_idle 93,959,194 [kernel] 12.94 std::pair<std::_Rb_tree_itera***long const, elf::sym> const&) 85,861,067 libsym.so 11.82 malloc 46,479,307 libc.so.6 6.40 std::_Sp_counted_base<(__gnu_***_Lock_policy)2>::_M_release() 38,285,738 libtuner.so 5.27 copy_page 33,935,533 [kernel] 4.67 std::_Rb_tree<unsigned long, ***ned long const, elf::sym> >*) 25,090,288 libsym.so 3.45 std::_Rb_tree<unsigned long, ***ned long const, elf::sym> >*) 24,942,214 libsym.so 3.43 finish_task_switch 23,804,264 [kernel] 3.28 arch_cpu_idle 109,478,705 [kernel] ... ... Hotspot Summary Report-ALL Time:2024/05/22 17:10:22 ================================================================================ ──────────────────────────────────────────────────────────────────────── Function Cycles Module Cycles(%) ──────────────────────────────────────────────────────────────────────── arch_cpu_idle 203,437,899 [kernel] 13.60 std::pair<std::_Rb_tree_itera***long const, elf::sym> const&) 85,861,067 libsym.so 5.74 __do_softirq 82,521,516 [kernel] 5.51 malloc 56,735,095 libc.so.6 3.79 finish_task_switch 51,014,756 [kernel] 3.41 UNKNOWN 47,753,528 libc.so.6 3.19 UNKNOWN 38,325,780 libnss_sss.so.2 2.56 std::_Sp_counted_base<(__gnu_***_Lock_policy)2>::_M_release() 38,285,738 libtuner.so 2.56 filemap_map_pages 34,252,979 [kernel] 2.29 copy_page 33,935,533 [kernel] 2.27 ... ... copyout 455,387 [kernel] 0.03 el0_da 455,387 [kernel] 0.03 rcu_gp_init 381,264 [kernel] 0.03 ──────────────────────────────────────────────────────────────────────── 2402 milliseconds time elapsed The callstack log /home/callstack-20240606-160259.log is generated successfully. The flamegraph html /home/Flamegraph-20240606-160259.html is generated successfully. The report /home/hotspot_cpu1.tar is generated successfully. To view summary report. you can run: devkit report -i /home/hotspot_cpu.tar To view detail report. you can import the report to the WebUI or IDE to view details.
生成的火焰图html文件默认生成在用户所在目录,火焰图html文件可使用浏览器查看。