WSL2 中安装 perf
https://juanjose.garciaripoll.com/blog/installing-perf-on-WSL2/index.html
参考这个教程,直接下载 perf 并编译,编译报错。
https://gist.github.com/abel0b/b1881e41b9e1c4b16d84e5e083c38a13
从 WSL2 的仓库附属代码编译 perf。注意找到和自己内核版本对应的源码,可以用 uname -a
来查看自己的内核版本。
git clone https://github.com/microsoft/WSL2-Linux-Kernel.git \
--branch linux-msft-wsl-5.15.y --depth 1
把评论区的这些包也安装一下:
sudo apt install libdwarf-dev libelf-dev libnuma-dev libunwind-dev \
libnewt-dev libdwarf++0 libelf++0 libdw-dev libbfb0-dev \
systemtap-sdt-dev libssl-dev libperl-dev python-dev-is-python3 \
binutils-dev libiberty-dev libzstd-dev libcap-dev libbabeltrace-dev
还是会编译报错。
重新下载主分支并编译。主分支的内核版本会新一点,虽然很多内核的头文件对不上(对 ABI 有影响),但是没有编译错误了。也许是微软还没有处理 5.15 内核版本在 GCC 更新之后的带来的新的警告吧(-Werror
将警告转换成错误)。
现在运行找不到动态链接库:
$ ./perf --help
./perf: error while loading shared libraries: libcrypt.so.2: cannot open shared object file: No such file or directory
试了几个都是 conda 里面的,于是我退出 conda 环境重新编译就好了。
目前还没发现 ABI 变化导致的错误,运行 perf record
和 perf report
都是正常的。常用命令:
$ perf record ./executable
... # 这里会运行可执行文件,并且生成一个名为 perf.data 的文件
$ perf report --demangle
... # 这里会在终端中显示不同函数运行占用的 CPU 时间
2025 年 2 月 28 日:版本更新之后又编译不了了。可以试试这个 https://stackoverflow.com/a/65276025/ ,从 linux-tools-generic 的路径中去找 perf
,比如 /usr/lib/linux-tools/<linux-version>-generic/perf
。