bpftrace单行命令在wsl ubuntu中不起作用

wbgh16ku  于 2022-11-02  发布在  其他
关注(0)|答案(1)|浏览(190)

我是eBPF、内核跟踪等的新手。我真的只是想在学习Rust / Aya eBPF工具/ Solana区块链时简单介绍一下eBPF。
我的Windows版本:版本10.0.19043内部版本号19043
“wsl -l -v”的输出为:

NAME                   STATE           VERSION

* Ubuntu                 Stopped         2

  Ubuntu.22.04           Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2
  Ubuntu.20.04           Stopped         2
  Ubuntu.21.04           Running         2

在Ubuntu中:

EliezerC@Ubuntu2104:~
$ bpftrace --version
bpftrace v0.11.3

这是可行的:

sudo bpftrace -e 'BEGIN { printf("hello world\n"); }'

其他单行示例都不起作用。
而且,

EliezerC@Ubuntu2104:~
$ sudo ls -la /sys/kernel/debug/
total 0
dr-xr-xr-x  2 root root 0 Jul  2 16:36 .
drwxr-xr-x 12 root root 0 Jul  2 16:32 ..

是因为内核/调试没有启用吗?我必须重新编译内核吗?

r6vfmomb

r6vfmomb1#

以下是如何使用the bpftrace one liner tutorial

1)挂载调试文件系统

默认情况下,WSL没有debugfs,您需要挂载它:CONFIG_DEBUG_FS=y
来源:https://github.com/iovisor/bcc/issues/1878#issuecomment-403284169
您可能根本无法使用vanilla WSL2内核执行此挂载,因为我认为内核配置CONFIG_DEBUG_FS=y尚未设置。

2)重新编译WSL2内核

不幸的是,WSL2不能很好地与eBPF工具配合使用。hhoover有一个很好的教程,介绍如何为Cilium重新编译内核:https://harthoover.com/compiling-your-own-wsl2-kernel/ Cilium是一个eBPF工具,所以bpftrace可能可以直接在hhoover的WSL2内核上工作。(P.S.他的文章显然是他在这个问题页面上的评论的复制粘贴)
此外,在您了解重新编译内核的痛苦之前,还有一些提示:

  • 在hhover的教程中,不要使用--rm标志。一旦程序终止,这个标志将删除你的docker映像。你可能想在以后修改你的内核,编译需要花费半个小时。你可以通过保留docker映像来保存你自己的时间。
  • hhoover的apt安装程序缺少一些东西,请添加python3dwarvescpio
  • 我遇到过一些问题,WSL2上的Docker容器无法连接到互联网,如果这种情况发生在你尝试在WSL2中的/etc/resolv.conf中更改你的名称服务器上。

这是您要更改的内核文件:https://github.com/microsoft/WSL2-Linux-Kernel/blob/linux-msft-wsl-5.15.y/Microsoft/config-wsl
顺便说一句,如果你使用CONFIG_MY_CONF=y,这意味着一旦你构建了内核,内核模块MY_CONF就会被链接(静态链接?),它是“内置的”。但您也可能会遇到CONFIG_MY_CONF=m=m是“模块”的缩写,这意味着模块将被构建,但它不会自动链接,如果你不想让所有内核模块都一直运行来保存一些内存空间,这是很有用的,但是你必须执行一些modprobe命令来加载模块。更多信息在这里:https://wiki.archlinux.org/title/Kernel_module
bpftrace列出了您需要设置的内核标志(如果尚未设置):https://github.com/iovisor/bpftrace/blob/master/INSTALL.md#linux-kernel-requirements
(P.S.我还发现BCC有一小部分是关于为WSL编译内核模块的:https://github.com/iovisor/bcc/blob/master/INSTALL.md#wslwindows-subsystem-for-linux---binary我还是会使用hhoover的教程,因为hhoover的教程更充实,我知道它很有效。)

3)验证您安装的bpftrace

当第一课列举出300行潜在的跟踪点时,你就知道你做对了。

$ sudo bpftrace -l 'tracepoint:syscalls:sys_enter_*' | wc --lines
336

在这一点上,我有几个其他的mods到我的WSL2,所以我不会担心,如果你没有得到336跟踪点准确.(但如果你遵循这一点,你确实得到336准确,请修改这个wiki答案.)

相关问题