写点什么

从编译到可执行,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:5814019

评论

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

YashanDB数据库索引策略及应用场景分析

数据库砖家

开发者说|H-RDT:基于人类操作数据的跨本体机器人学习

地平线开发者

自动驾驶 算法工具链 地平线征程6

使用Prodfiler优化eBPF编译器性能:零代码修改实现近2倍提升

qife122

编译器 ebpf profiling

大数据-83 Spark RDD详解:特性、优势与典型应用场景

武子康

Java 大数据 flink spark 分布式

YashanDB数据库数据表设计最佳实践与性能考量

数据库砖家

绕过使用__PSLockDownPolicy时的约束语言模式限制

qife122

PowerShell 约束语言模式

Node.js HTTP请求走私漏洞利用(CVE-2025-23167)

qife122

node.js 网络安全 漏洞利用

2000年模糊测试技术在Windows系统中的重现与安全影响

qife122

漏洞挖掘 模糊测试

工厂为什么要上MES系统,上MES系统的几大核心作用

万界星空科技

数字化转型 制造业 智能制造 mes 生产管理MES系统

YashanDB数据库数据脱敏技术解析与实施

数据库砖家

YashanDB数据库索引设计技巧及实践指南

数据库砖家

YashanDB数据库数据恢复与备份技巧

数据库砖家

YashanDB数据库数据回滚及错误恢复操作详解

数据库砖家

YashanDB数据库数据迁移的最佳实践

数据库砖家

YashanDB数据库索引结构与优化技术全解

数据库砖家

干货:Gemini与jobleap.cn联动,一种邪修找工作的新方法,让你面试成功率立即提升500%!

Y11

求职 找工作 应届生 找实习

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名PHP AI框架需求洞察

qife122

ai框架 PHP开发

YashanDB数据库数据压缩与存储效率提升指南

数据库砖家

YashanDB数据库索引策略优化与性能提升

数据库砖家

YashanDB数据库索引机制与查询性能优化

数据库砖家

YashanDB数据库数据建模与设计规范详解

数据库砖家

YashanDB数据库数据迁移的全面指南与步骤

数据库砖家

YashanDB数据库数据同步机制与实现技术

数据库砖家

YashanDB数据库数据同步及异步处理的特点比较

数据库砖家

为什么说jobleap.cn是最适合大学生找工作的App

Y11

求职 找工作 招聘 应届生 大学生

微软安全更新指南新增安全公告标签,强化漏洞管理透明度

qife122

微软安全 安全公告

YashanDB数据库数据访问安全策略及最佳实践

数据库砖家

YashanDB数据库数据高可用与灾难恢复实践

数据库砖家

YashanDB数据库数据同步与复制技术详解

数据库砖家

YashanDB数据库数据压缩技术及应用效果

数据库砖家

YashanDB数据库数据同步与一致性保障

数据库砖家

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