simpleperf 的使用
stat命令获取一段时间内已分析进程中发生的事件数摘要。 最常使用的选项为:
./simpleperf stat -p 进程号 --duration 检测进程的持续时间(秒)
Performance counter statistics:
1,741,676,073 cpu-cycles # 0.029027 GHz (100%)
598,139,456 instructions # 2.911823 cycles per instruction (100%)
65,680,148 branch-instructions # 1.095 M/sec (100%)
17,426,914 branch-misses # 26.533001% miss rate (100%)
1253.144963(ms) task-clock # 0.020885 cpus used (100%)
1,952 context-switches # 32.532 /sec (100%)
2,870 page-faults # 47.831 /sec (100%)
Total test time: 60.002509 seconds.
record命令记录一段时间内已分析进程的样本,这是simpleperf的主命令。最常使用的选项为:
./simpleperf record -p 进程号 -o 输出文件(默认perf.data) --duration 监测进程的持续时间(秒)
simpleperf record -p 5536 -o /sdcard/perf.data --duration 40
simpleperf W 08-20 19:06:27 5960 5960 dso.cpp:264] failed to read min virtual address of /dev/ashmem/dalvik-jit-code-cache (deleted): File not found
simpleperf W 08-20 19:06:27 5960 5960 dso.cpp:360] failed to read symbols from /dev/ashmem/dalvik-jit-code-cache (deleted): File not found
simpleperf I 08-20 19:06:28 5960 5960 cmd_record.cpp:390] Samples recorded: 6691. Samples lost: 0
cat /proc/sys/kernel/kptr_restrict
echo 0 > /proc/sys/kernel/kptr_restrict
report命令读取perf.data文件(由simpleperf record创建),并显示报告,表明花费时间的地方。最常使用的选项为:
./simpleperf report --dsos 选定动态共享对象(so库) -f 记录文件(默认perf.data) --sort 用于排序和打印报告的键 -n
simpleperf report -i /sdcard/perf2.data -n --sort dso
Cmdline: /system/xbin/simpleperf record -p 3424 -o perf2.data
Samples: 106422 of event 'cpu-cycles'
Event count: 16018784570
Overhead Sample Shared Object
82.61% 87508 /data/app/com.test.myplayer-2/lib/arm/libavcodec.so-58.so
7.95% 8998 [wlan]
4.98% 5408 /system/lib/libc.so
0.69% 765 /system/lib/libcutils.so
0.67% 702 /data/app/com.test.myplayer-2/lib/arm/libavutil.so-56.so
0.44% 529 /system/lib/libmedia.so
0.43% 330 /system/vendor/lib/egl/libGLESv2_adreno.so
0.33% 298 /system/lib/libhwui.so
0.32% 315 /data/app/com.test.myplayer-2/lib/arm/libswresample.so-3.so
0.32% 316 /data/app/com.test.myplayer-2/lib/arm/libavformat.so-58.so
0.23% 247 /system/lib/libutils.so
0.19% 230 /system/lib/libwilhelm.so
0.17% 165 /system/lib/libart.so
0.17% 181 /data/app/com.test.myplayer-2/lib/arm/libnative-lib.so
0.07% 65 /system/framework/arm/boot-framework.oat
0.06% 50 /system/vendor/lib/libgsl.so
0.06% 48 /system/lib/libbinder.so
0.06% 59 /system/lib/liblog.so
0.04% 40 /system/lib/libandroid_runtime.so
0.03% 26 /system/lib/libskia.so
0.02% 19 /system/vendor/lib/egl/libEGL_adreno.so
0.02% 22 [vectors]
0.02% 18 /system/lib/libc++.so
0.02% 16 /system/framework/arm/boot.oat
0.02% 12 /system/vendor/lib/egl/eglsubAndroid.so
0.01% 13 /system/lib/libm.so
0.01% 9 /system/lib/libgui.so
0.01% 8 /system/lib/libEGL.so
0.01% 7 /system/lib/libmemalloc.so
0.01% 6 /system/lib/libui.so
0.00% 4 /system/vendor/lib/libadreno_utils.so
0.00% 2 /system/lib/hw/gralloc.msm8909.so
0.00% 2 /system/lib/libGLESv1_CM.so
0.00% 1 /system/lib/libnativeloader.so
0.00% 1 /system/lib/libminikin.so
0.00% 1 /system/lib/libandroidfw.so
0.00% 1 /system/lib/libicuuc.so
可以看到大部分是在 执行 libavcodec.so-58.so
将perf.data从设备上拷贝下来,传输到Linux开发机上,执行命令:
./bin/linux/x86_64/simpleperf report --dsos *.so --sort comm,pid,tid,symbol
- 这里主要目的是 拿到symbol解析查看哪个函数耗时,然后进行优化