写点什么

从编译到可执行,eBPF 加速容器网络原理分析

  • 2023-01-05
    北京
  • 本文字数:1322 字

    阅读完需:约 4 分钟

从编译到可执行,eBPF 加速容器网络原理分析

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

1. 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 指针安全性检查



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



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

2. 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 优化我们的容器网络。

2023-01-05 10:5813938

评论

发布
暂无评论
发现更多内容

MyEMS:赋能能源精细化管理的数字化利器

开源能源管理系统

开源 开源能源管理系统

多客云 Ai 短视频批量剪辑矩阵系统:高效创作与智能管理的一体化解决方案

微擎应用市场

【HarmonyOS相机开发系列】折叠屏镜头切换优秀实践

最新动态

MyEMS:引领能源管理升级的全方位解决方案

开源能源管理系统

开源 能源管理系统

MyEMS:让能源管理从 “模糊粗放” 走向 “清晰可控”

开源能源管理系统

开源 能源管理系统

跑冷链,汕德卡G5S冷藏车自有“享”法!

科技热闻

优猿酒吧社交小程序:多门店酒吧的数字化经营利器

微擎应用市场

TCL电子(01070.HK)2025年H1经调整归母净利润大幅增长62.0%

财见

对于房企而言,国内最值得选的楼宇对讲品牌有哪些?

新消费日报

2025物联网与RFID产业:万亿赛道的技术破局与市场重构

斯科信息

RFID技术 RFID产业

从硬件标准重塑到AI应用创新 英特尔开启高性能静音+智能化体验新时代

科技热闻

CST教程:如何获取压变电容(变容二极管)的电容曲线

思茂信息

cst操作 CST软件 CST Studio Suite

高达99.57%GPU利用率,Alluxio在MLPerf Storage v2.0基准测试中展现卓越性能

Alluxio

AI 数据 模型训练 分布式缓存 MLPerf

组局同城社交社区平台进群找搭子陪玩旅游

微擎应用市场

判断等保测评机构是否正规的小技巧你知道吗?

行云管家

等保 等保测评

就在明天!8月26日丨EasyModel新品发布会等你来!

袋鼠云数栈

数字孪生 数字孪生技术 易知微 空间智能 EasyModel发布会

BeeWorks AI助理:懂业务,真智能,企业专属的超级AI专家

BeeWorks

即时通讯 IM 私有化部署

重磅!Ollama发布UI界面,告别命令窗口!

王磊

全面开放下载!Fabarta个人专属智能体免邀请码体验,功能重磅更新

Fabarta

人工智能 智能体

FinClip驱动中国应用全球出海的降本增效实践

xuyinyin

速来!CodeBuddy IDE国内版公测开启!🎉

CodeBuddy

从 KOL 到 KOC:海外营销“去中心化”新趋势

Wolink

海外推广 沃链Wolink 达人营销

夜莺里如何引用标签和注解变量

巴辉特

Nightingale 开源监控 告警模板 告警变量

G端业务需求的高效管理——禅道实践中的“破局”与“避坑”

禅道项目管理

软件 软件需求管理 禅道项目管理 软件需求设计 需求管理软件

软件工程 + AI 不是 “硬凑”,3 步走通落地关键环节

行云创新

平台工程 AI 赋能软件工程 AI赋能研发

浩创云 AI 三合一系统:微擎部署助力抢占商业服务新蓝海

微擎应用市场

浙江省委常委、杭州市委书记刘非莅临中昊芯英考察调研

科技热闻

台积电核心数据遭"指尖泄密",BeeWorks安全底座杜绝泄密

BeeWorks

即时通讯 IM 私有化部署

RFID 标签在封闭空间漏扫?系统化应对策略解析

斯科信息

RFID标签

壹佳美容按摩养生上门服务平台

微擎应用市场

企业一定要部署堡垒机吗?理由是什么?

行云管家

网络安全 堡垒机

从编译到可执行,eBPF 加速容器网络原理分析_文化 & 方法_王传国_InfoQ精选文章