一、简介
Simpleperf是一个开源的性能分析工具,可以用于分析Android及Linux系统的应用程序、内核驱动程序和内核下的服务程序的性能。
Simpleperf在Android系统中以二进制文件的形式存在,可以运行于ARM、x86等CPU架构上,可以获取与当前配置的CPU相关联的硬件计数器、堆栈跟踪支持,还可以dump backtrace、tracepoint和kprobe事件等。此外,Simpleperf还支持多种输出格式,方便用户进行性能数据分析、比较。
通俗来说,Simpleperf是Android平台上的perf工具,提供的功能比perf更易用、更有针对性,如果你是Android平台的应用开发人员或系统开发人员,那么Simpleperf可能是你最佳的性能调优工具。
二、安装和配置
Simpleperf可以在Google官方提供的仓库中获取,需要确保您的设备上已经具备adb命令。以Ubuntu操作系统为例,输入以下命令行来安装:
sudo apt-get install android-tools-adb
adb root
adb shell "echo 0 > /proc/sys/kernel/kptr_restrict"
当然,Simpleperf也可以通过源代码来编译运行。Simpleperf提供了兼容ARM、x86 CPU架构的二进制文件,分别命名为simpleperf,simpleperf.x86或者simpleperf.arm。在使用Simpleperf之前,用户需要确认系统内核是否支持性能功能且该功能是否已开启。在设备启动时添加下列命令配置:
mount -o remount,rw -t rootfs rootfs
echo "0" > /proc/sys/kernel/perf_event_paranoid
mount -o remount,ro -t rootfs rootfs
三、使用方法
1.获取简单的性能数据
在一个例程(如:helloworld)中加入延迟(等待任意键)以便于采集性能数据,输入以下命令:
adb shell "echo 7 > /proc/sys/kernel/printk"
adb shell "./helloworld" &
adb shell "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable"
adb shell "sleep 5"
adb shell "simpleperf record -p `pidof helloworld` --duration 1 -o perf.data"
adb shell "simpleperf report"
simpleperf采集数据,将数据存储到perf.data文件中。
simpleperf report将显示采集到的性能数据。如下所示:
100.00% helloworld [.] main
|
--100.00%--xwrite
|
--100.00%--__write_nocancel
2.获取内核级事件
首先确认系统内核是否支持内核级事件:
adb shell "cat /proc/kallsyms | grep perf_event_open"
运行如下命令获取内核级事件:
adb shell "echo 1 > /sys/kernel/debug/tracing/events/raw_syscalls/sys_enter/enable"
adb shell "echo 1 > /sys/kernel/debug/tracing/tracing_on"
adb shell "echo 0 > /proc/sys/kernel/kptr_restrict"
adb shell "simpleperf record -e syscalls:sys_enter -o perf.data sleep 1"
adb shell "cat perf.data | simpleperf report -n"
3.通过perf.data文件获取火焰图
需要先安装flamegraph才能使用:
git clone https://github.com/brendangregg/FlameGraph.git
使用以下命令获取火焰图:
adb pull perf.data
cd $FLAMEGRAPH_HOME
$ perf script -i perf.data | ./stackcollapse-perf.pl | ./flamegraph.pl > perf.svg
四、总结
Simpleperf是一个功能强大的性能分析工具,支持多种硬件计数器、堆栈跟踪支持、跟进backtrace、tracepoint和kprobe事件等,有助于开发人员针对性地对程序进行调优优化,深入理解程序的性能瓶颈问题,并实现优化,提升程序的性能。
Simpleperf在性能分析方面有着非常广泛的应用,并且配合其他工具可以为开发人员带来很多便利,如果你还没有使用过Simpleperf,那么就赶快试试吧。