头图

从编译到可执行,eBPF 加速容器网络的原理分析 | 龙蜥技术

编者按:eBPF(extended Berkeley Packet Filter) 是一种可以在 Linux 内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术。简单说,eBPF 让 Linux 内核变得可编程化了。本文整理自龙蜥大讲堂第 57 期,浪潮信息 SE 王传国从原理上分析了 eBPF 的加载工作过程,解释了它如何保证系统运行稳定以及它能加速网络的原因。

01 eBPF 加载过程

我们知道,一般 eBPF 的加载过程,首先是写 C 代码,然后用 llvm lang 编译成 ELF 文件,接着用 libelf 对 ELF 文件进行解析,解析之后按照 libbpf 所需要的格式进行数据的整理、组织,再通过 BPF 的系统调用,可以将这些数据都加载到内核里面,包括程序翻译出来的 eBPF 指令集。

在内核里面有校验器负责对程序进行校验,有 JIT 对程序进行翻译解析。

1.1 重定位

BPF 基础设施提供了一组有限的“稳定接口”, 使用 convert_ctx_access 对各种 CTX 进行转换,在内核版本升级时保证稳定。

CO-RE 核心思想就是采用(BTF)非硬编码的形式对成员在结构中的偏移位置进行描述,解决不同版本之间的差异。

需要重定位的元素:Map、函数调用、Helper函数调用、字段、Extern 内核符号和kconfig。

1.2 安全性检查:数据、指令、循环

数学计算除数不能为 0,指令调用范围[0, prog->len)深度优先遍历排除环。

1.3 eBPF 指令集

1.4 指针安全性检查

确定指针类型、范围纠正,识别不了的指针类型不允许引用。

范围检查,不同的指针类型有不同的检查方法和范围。

02 eBPF 加速容器网络

主要涉及的 eBPF 程序类型:XDP、tc、sock_ops。

它们加速网络性能的基本原理都是把数据直接从一端(网口/socket)的发送队列传递到另一端的接收或发送队列,绕过不需要的网络协议栈。

XDP 位于整个 Linux 内核网络软件栈的底部,还未生成 skb,能够非常早地识别并丢弃攻击报文,具有很高的性能;但是在虚拟机中有时候可能无法支持 XDP 程序的加载,例如虚拟机网卡的接收队列太少。

在 tc 功能的 sch_handle_ingress、sch_handle_egress 添加 hook 点,分别是 tc ingress 和 tc egress,没有 XDP 那么多要求,基本上所有的 OS 中都能使用,绕过 netfilter 等非必要的内核网络协议栈路径,能极大地提升网络性能,降低延迟。

技术概述:把数据从一端 socket 发送队列直接发送到对端 socket 的接收队列或发送队列。

sockops:挂载到cgroup,监控整个 cgroup 中所有 socket 的握手和挥手(主动|被动),记录 tcp 连接。

sockmap:存储数据特征与 socket 句柄的关系。写数据时执行 bpf_map_update,修改对应 socket 的 sendmsg 函数指针。

sk_msg:使用 sockmap 对数据进行 redirect 判定。

经过我们的测试,如果用 Cilium 替换 calico,用 TCP Throughput 模式测,那么 pod 间的通讯性能 tcp 吞吐量提升 58%、sockops 提升 153%、跨节点也能提升 24%。

如果用 TCP-RR 模式来测,那么相比 calico 同节点能提升 28%、sockops 提升200.82%、跨节点提升 43%。

如果用 TCP_CRR 模式去测的话, calico 同节点能提升40%、sockops 提升 35% 、跨节点提升 55%。

Cilium 在提升性能的时候,它对于 CPU 的占用降低了 10% 以上,因此我们测试的结果是 Cilium 的性能要明显优于使用 iptables 的 calico。所以说目前我们打算使用 Cilium 优化我们的容器网络。

关于直播课件及视频回放获取方式:

【PPT 课件获取】:关注微信公众号(OpenAnolis),回复“龙蜥课件” 即可获取。有任何疑问请随时咨询龙蜥助手—小龙(微信:openanolis_assis)。

【视频回放】:视频回放可前往龙蜥官网查看。

—— 完 ——


OpenAnolis龙蜥社区
OpenAnolis龙蜥社区 由国内外头部企业联合建立的操作系统开源社区。加入我们,一起打造面向未来的开源操...

OpenAnolis龙蜥社区由国内外头部企业联合建立的操作系统开源社区。

29 声望
8 粉丝
0 条评论
推荐阅读
DPU 厂商北中网芯加入龙蜥社区,共建网络通信与安全
近日,成都北中网芯科技有限公司(以下简称“北中网芯”)签署了CLA(Contributor License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis)。

龙蜥社区

封面图
祝贺姜宁连任 2023 Apache 软件基金会董事
在刚刚结束的 ASF Annual Meeting 上,2023 年新任董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。

鸣飞4阅读 7.4k评论 1

姜宁 ASF 2022 董事竞选宣言:我希望能够帮助 ASF 打破地域、文化、语言的障碍
在刚刚结束的 ASF Annual Meeting 上,2022 年新任 ASF Member 及董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。Apache 软件基金会孵化器导师,ALC Beijing 发起人,华为...

鸣飞4阅读 12.3k

封面图
张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 1k评论 2

封面图
ebpf 月报 - 2023 年 1 月
Merbridge 是一个旨在通过 ebpf 代替 iptables,给 service mesh 加速的项目。作为成立刚满一周年的新项目,Merbridge 已经应用到 kuma 的官方版本当中。最近 Merbridge 又达到了另外一个里程碑 —— Merbridge 正...

spacewander6阅读 3k评论 1

阿里云被曝 UI 抄袭,复刻 SkyWalking Trace Profiling 页面
2023 年 1 月 3 日,SkyWalking 官网发布消息,称阿里云抄袭了 SkyWalking Trace Profiling 整体页面 UI,包括页面布局、文字和分析任务设置,唯一的区别仅有颜色方案。

鸣飞5阅读 5.3k

权威发布丨2022 中国开源先锋 33 人之心尖上的开源人物
开源社主办的 COSCon'22 中国开源年会上,我们也以「开源站在十字路口」为主论坛主题展开了讨论。面对机遇与挑战并存,分裂与合作共生,风云变幻的世界,我们该何去何从?且看开源先锋们「榜样的力量」!

SegmentFault思否2阅读 2.1k

封面图

OpenAnolis龙蜥社区由国内外头部企业联合建立的操作系统开源社区。

29 声望
8 粉丝
宣传栏