pref安装使用
说明
pref是调试工具
安装
正常的发行版的ubuntu系统
sudo apt update
sudo apt install -y linux-tools-common linux-tools-generic
嵌入式系统&自己编译
cd [sdk]/kernel/tools/perf
# 先装编译依赖(Ubuntu)
sudo apt install -y flex bison libdw-dev libunwind-dev libslang2-dev \
libnuma-dev libssl-dev libelf-dev zlib1g-dev libbfd-dev \
libtracefs-dev libtraceevent-dev
# 编译
make -j$(nproc)
编译
cd [SDK]
export RK_TOOLCHAIN=$PWD/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin
export PATH=$RK_TOOLCHAIN:$PATH
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
mkdir -p /tmp/perf-arm64
编译命令
make -C kernel-6.1/tools/perf O=/tmp/perf-arm64 -j$(nproc) \
WERROR=0 \
NO_LIBELF=1 NO_DWARF=1 NO_LIBUNWIND=1 NO_LIBNUMA=1 \
NO_LIBAUDIT=1 NO_SLANG=1 NO_LZMA=1 NO_LIBBFD=1 \
NO_LIBPYTHON=1 NO_LIBPERL=1 NO_JVMTI=1 NO_GETTEXT=1 \
NO_ZLIB=1
使用
perf list | grep spi
#抓取spi相关的
perf trace -a \
-e 'spi:spi_transfer_start' \
-e 'spi:spi_transfer_stop' \
sleep 60
额外
用内核自带 ftrace
例子:读取spi相关
# 挂载 tracefs
mount -t tracefs tracefs /sys/kernel/tracing
# 打开 spi 相关 tracepoint
sh -c 'echo 1 > /sys/kernel/tracing/events/spi/spi_transfer_start/enable'
sh -c 'echo 1 > /sys/kernel/tracing/events/spi/spi_transfer_stop/enable'
# 观察 30 秒
sleep 30
# 停止并查看
sh -c 'echo 0 > /sys/kernel/tracing/events/spi/spi_transfer_start/enable'
sh -c 'echo 0 > /sys/kernel/tracing/events/spi/spi_transfer_stop/enable'
cat /sys/kernel/tracing/trace
日志:
root@ubuntu:~# cat /sys/kernel/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 12/12 #P:8
#
# _-----=> irqs-off/BH-disabled
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / _-=> migrate-disable
# |||| / delay
# TASK-PID CPU# ||||| TIMESTAMP FUNCTION
# | | | ||||| | |
kworker/0:1-9845 [000] ..... 14802.005293: spi_transfer_start: spi4.0 00000000d20a0a4d len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[7f-ff-ff-0f-69-30-94-0a-bd]
kworker/1:2-9162 [001] ..... 14802.005293: spi_transfer_start: spi0.0 000000005792a6d2 len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[00-00-00-8c-14-3b-94-0a-a5]
kworker/1:2-9162 [001] ..... 14802.005344: spi_transfer_stop: spi0.0 000000005792a6d2 len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[00-00-00-dd-90-a7-ff-9d-9e]
kworker/0:1-9845 [000] ..... 14802.005346: spi_transfer_stop: spi4.0 00000000d20a0a4d len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[7f-ff-ff-8e-a6-9c-ff-78-3e]
kworker/0:1-9845 [000] ..... 14847.061386: spi_transfer_start: spi4.0 00000000d20a0a4d len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[7f-ff-ff-8e-a6-9c-ff-78-3e]
kworker/1:2-9162 [001] ..... 14847.061386: spi_transfer_start: spi0.0 000000005792a6d2 len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[00-00-00-dd-90-a7-ff-9d-9e]
kworker/1:2-9162 [001] ..... 14847.061439: spi_transfer_stop: spi0.0 000000005792a6d2 len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[00-00-00-e8-0a-14-6b-bb-2e]
kworker/0:1-9845 [000] ..... 14847.061439: spi_transfer_stop: spi4.0 00000000d20a0a4d len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[7f-ff-ff-b8-e2-08-6b-be-16]
kworker/0:1-9845 [000] ..... 14892.117460: spi_transfer_start: spi4.0 00000000d20a0a4d len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[7f-ff-ff-b8-e2-08-6b-be-16]
kworker/1:2-9162 [001] ..... 14892.117460: spi_transfer_start: spi0.0 000000005792a6d2 len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[00-00-00-e8-0a-14-6b-bb-2e]
kworker/0:1-9845 [000] ..... 14892.117512: spi_transfer_stop: spi4.0 00000000d20a0a4d len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[7f-ff-ff-f5-1c-75-d6-5b-98]
kworker/1:2-9162 [001] ..... 14892.117513: spi_transfer_stop: spi0.0 000000005792a6d2 len=9 tx=[b0-10-04-00-00-00-00-00-00] rx=[00-00-00-f0-81-80-d6-2a-30]
strip减少体积
aarch64-none-linux-gnu-strip /tmp/perf-arm64/perf
strip = 删掉“符号表 + 调试信息”,体积变小,程序照常跑,只是不好调试了
perf
perf list 本身会把 perf 支持的事件全部列出来,包括:
- hardware 事件(CPU cycles 等)
- software 事件(context switches 等)
- tracepoint 事件(内核各个子系统埋的点)
- 等等
本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/22907452,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号