eBPF 核心技术与实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
10452 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 26 讲/共 37 讲
eBPF 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

技术解析|如何使用Go开发eBPF程序?

你好,我是倪朋飞。
在上一讲中,我带你学习了 eBPF for Windows 的主要原理以及如何在 Windows 系统上开发 eBPF 程序。eBPF for Windows 把开源社区的 eBPF 工具链带到了 Linux,让 Windows 开发者也可以利用 eBPF 技术来解决网络、观测、性能优化等各类问题。由于复用了相同的工具链,Windows eBPF 程序的开发流程同 Linux 非常相似,主要也是利用 libbpf 开发 eBPF 内核程序、利用 LLVM 编译 eBPF 程序为字节码、最后再到用户态程序中加载和挂载 eBPF 字节码,并通过 BPF 映射同内核态 eBPF 程序进行交互。
今天这一讲我将带你换一种编程语言,也就是通过在容器和云原生应用中最流行的 Go 语言来开发 eBPF 程序。

eBPF Go 语言开发库

阶段总结|实用 eBPF 工具及最新开源项目总结中我曾经讲到,BCC、libbpf 以及内核源码,都主要使用 C 语言开发 eBPF 程序,而实际的应用程序可能会以多种多样的编程语言进行开发。所以,开源社区开发和维护了很多不同语言的接口,方便这些高级语言跟 eBPF 系统进行交互。比如,我们课程多次使用的 BCC 就提供了 Python、C++ 等多种语言的接口,而使用 BCC 的 Python 接口去加载 eBPF 程序,要比 libbpf 和内核源码的方法简单得多。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

eBPF技术在Windows系统上的应用是本文的重点。文章介绍了如何使用Go语言开发eBPF程序,并详细讲解了eBPF for Windows的工具链。通过cilium/ebpf库,读者可以了解eBPF Go语言开发库的主要组件和开发步骤。文章还展示了使用Go语言开发eBPF程序的具体例子,并指出了在Linux机器中安装Go语言进行实践的方法。此外,文章还介绍了eBPF程序的分发方式,包括在本地运行和通过Go的交叉编译生成对应体系结构的二进制文件。通过讲解cmd/bpf2go生成的脚手架文件,文章解答了eBPF程序跨平台编译和分发的秘密。最后,文章提出了思考题,邀请读者讨论使用Go语言开发eBPF程序的优势和劣势,以及其他可用于开发eBPF程序的语言及其特点。整体而言,本文深入浅出地介绍了eBPF技术在Windows系统上的应用,以及使用Go语言开发eBPF程序的方法和技巧。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《eBPF 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 疯狂的小企鹅
    > 也可以通过 BTF 来解决不同内核版本中数据结构不同的问题,从而实现一次编译到处执行。 请教一下哦,要想通过BTF来解决不同内核版本数据结构不同的问题,应该还需要用户态程序能够通过类似libbpf的方式来完成eBPF程序的重定位工作吧?请问cilium/ebpf库是怎么解决这个问题的?我看官方文档写着也比较浅https://ebpf-go.dev/guides/portable-ebpf/#compile-once-run-everywhere 。目前我们采用的办法是根据不同kernel版本生成多份.o文件,然后用户态程序再判断下kernel版本来决定加载哪一份.o。但我感觉这不是最佳实践,求老师赐教。
    2024-03-21归属地:浙江
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部