如题,去年 6 月一次偶然的机会从同事口中得知了 DPDK 可以高性能处理网络数据(非常感谢这位同事,哈哈),然后进行了一番搜索发现了 ebpf 这个黑科技,从此踏入 ebpf 的不归路(又掉了不少头发)。
首先从 xdp 开始学起,了解到了 https://github.com/xdp-project/xdp-tutorial 这个项目,安装编译环境就是一个大坑,直接劝退 3 个月,直到去年 9 月份又重新捡起来,把环境搭建成功,开始专研 xdp-tutorial 中的每个实验。
后面又接触到 cilium/ebpf 这个库,然后把 xdp-tutorial 中的实验用这个库抄袭实现了一遍,顺便还把其它几个库的实验也抄了一遍,感兴趣的可以看看 https://github.com/Zhouchaowen/ebpf_labs 。
在后面接着断断续续的了解 xdp 的一些知识,有一次想通过 xdp 实现 L4 层的负载均衡功能,搞了几天也没有成功(好像是校验和的问题),再次被劝退,后面也陆陆续续在了解,但是相关资料还是太少了。
直到今年 4 月开始学习 k8s ,接触到 cilium 这个网络插件,看了看它的源码,简直爆鸡儿难(这是人能看懂的吗?)。后来经过反复放弃,慢慢的看懂了一点点,了解到了 tc ebpf 和如何加载它的知识。碰巧又看到了 https://github.com/gojue/ecapture 这个项目,发现很有趣,交流群里 cfc4n 大佬非常热心,问了不少问题都回答了(非常感谢),又结合刚了解的 tc ebpf 然后产生了实现一个 http 接口生成器的想法(其实是我们内部一直缺少接口文档,全靠手撸,我懒就不想写这个接口文档,哈哈哈哈),然后立刻动手建立项目,一个星期后写了第一版代码简单测试修改了一些 bug 发了第一个版本 v0.0.1 。
目前在 Linux 5.4.0-156-generic x86_64 以上的内核版本应可以使用,但项目还非常初始,可能会有许多问题,希望使用的过程中有问题可以反馈,哈哈哈。
项目地址: https://github.com/Zhouchaowen/prism
直接运行:
prism -n <device_name> # device_name 网卡名称
Docker 方式运行:
docker run --net host --privileged --name prism -itd zmosquito/prism:v0.0.1 ./prism -n <device_name>
演示视频: https://www.bilibili.com/video/BV1tK4y1c7rh/
感谢 star ,哈哈
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.