【 PERF 】PLY 环境搭建

• 4 分钟阅读 •

0# 关于ply

A light-weight dynamic tracer for Linux that leverages the kernel’s BPF VM in concert with kprobes and tracepoints to attach probes to arbitrary points in the kernel. Most tracers that generate BPF bytecode are based on the LLVM based BCC toolchain. ply on the other hand has no required external dependencies except for libc. In addition to x86_64, ply also runs on aarch64, arm, and powerpc.

简单的说,就是ply是一个轻量级的bpf前端工具,可以用来代替bpftrace、bcc来在嵌入式设备上使用。

1# 源码下载

git clone https://github.com/iovisor/ply.git

2# 源码编译

ply需要信赖一些三方的库和工具,所以在编译前我们需要系统环境中具备这些依赖,在ubuntu的环境中可以按照下面命令补充

sudo apt-get install make automake m4 libtool
sudo apt-get install bison flex

好的,编译环境目前补充完毕,可以按照官方提供的编译步骤进行编译,

./autogen.sh   # to generate the configure script
./configure
make
make install   # you probably need to be root for this

根据这个步骤,链接出来的成果物是动态的,笔者一般在编译一些嵌入式工具时更偏向于静态链接,这样方便平时调试,不用担心依赖库的缺失,那这时再给出一个静态链接的编译步骤

1) ./autogen.sh
2) ./configure --enable-static LDFLAGS=--static
3) 修改src/libply/libply.la,在library_names属性中最后添加libply.a
4) make
5) ln -s /home/zackary/github/ply/src/ply/.libs/ply /usr/bin/ply

由于是静态链接,最后只要创建个软链接后,在系统中就可以随便调用了,所以就无需执行make install,后来如果想拿到其它设备上用,直接拷贝过去就能用。
然后可以执行一下ply命令来验证安装是否正确

# ply -v
ply 2.2.0-1-g54d3bbf (linux-version:330518~5.11.22)

好,那到这里一切OK

3# 环境测试

ply源码中自带了环境测试脚本,我们可以利用它来测试当前的系统环境是否开启了ply信赖的功能项,比如kprobetracepoint等,我们一起来运行一下吧,

Ensuring that debugfs is mounted... OK
Verifying kprobe... OK
Verifying tracepoint... OK
Verifying special... OK
Verifying interval... OK

好的,在笔者的系统中,这些配置项是均已经开启了的,那接下来快试试ply吧。

4# 运行工具

这里笔者去验证了对do_sys_openat2这个接口捕捉的有效性,先是在后台运行ply,然后去cat一个proc接口。

# ply 'kprobe:do_sys_openat2 { printf("%v(%v): %s\n", comm, uid, str(arg1)); }' &
# cat /proc/cmdline  
cat            (   0): /etc/ld.so.cache
cat            (   0): /lib/aarch64-linux-gnu/libc.so.6
cat            (   0): /usr/lib/locale/locale-archive
cat            (   0): /usr/share/locale/locale.alias
cat            (   0): /usr/lib/locale/C.UTF-8/LC_IDENTIFICATION
cat            (   0): /usr/lib/aarch64-linux-gnu/gconv/gconv-modules.cache
cat            (   0): /usr/lib/locale/C.UTF-8/LC_MEASUREMENT
cat            (   0): /usr/lib/locale/C.UTF-8/LC_TELEPHONE
cat            (   0): /usr/lib/locale/C.UTF-8/LC_ADDRESS
cat            (   0): /usr/lib/locale/C.UTF-8/LC_NAME
cat            (   0): /usr/lib/locale/C.UTF-8/LC_PAPER
cat            (   0): /usr/lib/locale/C.UTF-8/LC_MESSAGES
cat            (   0): /usr/lib/locale/C.UTF-8/LC_MESSAGES/SYS_LC_MESSAGES
cat            (   0): /usr/lib/locale/C.UTF-8/LC_MONETARY
cat            (   0): /usr/lib/locale/C.UTF-8/LC_COLLATE
cat            (   0): /usr/lib/locale/C.UTF-8/LC_TIME
cat            (   0): /usr/lib/locale/C.UTF-8/LC_NUMERIC
cat            (   0): /usr/lib/locale/C.UTF-8/LC_CTYPE
cat            (   0): /proc/cmdline

通过最终的结果来看,open操作能够被有效地捕捉到,
那么至此,我们对ply工具的初步环境搭建就已经完成。

文章标签:

上一篇 : Learning RISC-V - Introducing XiangShan and NutShell
下一篇 : 【 PERF 】systemtap 环境搭建与错误排查
阅读进度 0%