eBPF学习计划
“Super powers have finally come to Linux” — Brendan Gregg
目录
学习计划
自从知道了eBPF这项技术后,一直对它十分感兴趣,这几天静下心来作了一个学习计划,准备逐步深入学习,最后希望能有输出,能够给大家讲讲这项“黑科技”。
实验环境和相关代码
https://github.com/nevermosby/linux-bpf-learning
博文目录
- 3篇经典文章翻译,介绍了BPF技术的发明背景、发展历程、和网络层面的BPF技术讲解:
- 多篇原创技术分享,主要覆盖了网络相关的BPF技术——XDP、TC网络钩子的代码级别讲解和动手实验教程,同时,在自己动手实验中通过发现问题、分析问题、解决问题总结成了更为实战的troubleshooting系列:「如何调试BPF程序」和「编译运行内核源码中的BPF示例程序」。最新的系列文章给大家介绍了BPF Map的工作机制:
第一阶段学习总结
从写下第一篇BPF技术博文开始,至今已经历时两个多月了,一共写下了7篇文章。通过撰写这些文章,算是完成了第一阶段的学习目标,虽然跟计划中的第一阶段学习内容差异较大,实际学习结果覆盖了第二阶段的动手实验部分,说明了学习技术往往是需要通过理论学习加上动手实验,才能看懂理解相关的知识。另外,写文章的同时,可以锻炼很多其他软技能,比如画图,录视频,做视频等等,写技术博客就是这么一件痛并快乐着的事情。
有头绪了,目前处于学了,不知道该怎么用到实际中
这个系列就很棒,网上别的地方的资料都看不懂,还是这里清晰明了
感谢回复,如果对你有帮助,希望多多分享
5.4.0-42-generic #46~18.04.1-Ubuntu SMP Fri Jul 10 07:21:24 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
有碰到过运行linux-sample的例子,提示错误
libbpf: BTF is required, but is missing or corrupted.
求解
可以试试
apt install libelf-dev
试了,还是不行
能否贴下你使用的clang版本和执行clang的编译参数是否有改动?可能是clang和libbpf版本不兼容。建议尽量使用最新版本clang及其对应llvm。
btf是用来增加调试信息的,如果出现相关错误不影响编译过程的话,可以忽略。
我发现我用5.0的内核版本的例子,就是不行,但是我使用4.15的,是可以的。有使用过5.0版本的内核吗
内核代码使用的是linux-source-5.3.0
clang -v
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.5.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
直接在内核源码目录下编译,啥也没有改
make M=samples/bpf/
编译完成后执行
./xdp1 -S lo
libbpf: BTF is required, but is missing or corrupted.
最后排查下来后,确认原因是,clang版本问题,linux版本是5以上的话,最好将clang更新到最新,clang-9
请问有没有兴趣小组的群呀。
由于个人精力有限,目前还没有专属兴趣小组。但已经有很多朋友对有个学习群感兴趣,正在考虑建立一个知识星球小组
求加入知识星球小组
作者有没有遇到以xdpdrv模式加载BPF应用(仅做转发),bpf_redirect并没有起作用,但以xdpgeneric模式加载,可以正常转发。网卡驱动是ixgbe,内核版本5.4.0。 感谢感谢!!!!