您的位置:

使用simpleperf进行性能分析

一、简介

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,那么就赶快试试吧。