XDP/eBPF — 架构设计
目录
文章目录
- 目录
- XDP 的架构设计
- XDP 的包处理
- XDP 程序示例
XDP 的架构设计
XDP 总体设计包括以下几个部分:
XDP 驱动:是网卡驱动中的一个 XDP 程序的挂载点,每当网卡接收到一个数据包就会执行这个 XDP 程序。XDP 程序可以对数据包进行逐层解析、按规则进行过滤,或者对数据包进行封装或者解封装,修改字段对数据包进行转发等;
BPF VM(虚拟机):一个 XDP 程序首先是由用户编写用受限制的 C 语言编写的,然后通过 clang 前端编译生成 BPF bytecode,然后加载到 Kernel 之后运行在 eBPF VM 上,通过 JIT 编译器将 bytecode 编译成 CPU 平台指令集。eBPF VM 支持 XDP 程序的动态加载和卸载;
BPF Maps:键值对存储,作为用户态程序和内核态 XDP 程序之间、以及内核态 XDP 程序之间的通信媒介,类似于进程间通信的共享内存访问。用户态程序可以在 BPF Maps 中预定义规则,XDP 程序匹配 Maps 中的规则对数据包进行过滤等。XDP 程序将数据包统计信息存入 Maps,用户态程序可访问 Maps 获取数据包统计信息。
BPF Verifier:如何确保 XDP 程序加载到 Kernel 之后不会导致内核崩溃或者带来其他的安全问题呢?Verifier(程序校验器)就是在将XDP bytecode 加载到 Kernel 之前对 bytecode 进行安全检查,例如:判断是否有循环,程序长度是否超过限制,程序内存访问是否越界,程序是否包含不可达的指令等;
XDP Action:
- XDP_DROP:在驱动层丢弃报文,通常用于实现 DDoS 或防火墙。
- XDP_PASS:允许报文上送到内核网络栈,同时处理该报文的 CPU 会分配并填充一个 SKB,将其传递到 GRO 引擎。之后的处理与没有 XDP 程序的过程相同。
- XDP_TX:从当前网卡发送出去。
- XDP_REDIRECT:从其他网卡发送出去。
- XDP_ABORTED:表示程序产生了异常,其行为和 XDP_DROP 相同,但 XDP_ABORTED 会经过 trace_xdp_exception tracepoint,因此可以通过 tracing 工具来监控这种非正常行为。
AF_XDP:是为高性能数据包处理而优化的地址族,AF_XDP Socket 使 XDP 程序可以将数据帧重定向到用户空间应用程序中的内存缓冲区。
XDP 的包处理
XDP 程序示例
下面是一个最小的完整 XDP 程序,实现丢弃包的功能。
// file: xdp-example.c#include <linux/bpf.h>#ifndef __section
# define __section(NAME) \__attribute__((section(NAME), used))
#endif__section("prog")
int xdp_drop(struct xdp_md *ctx)
{return XDP_DROP;
}char __license[] __section("license") = "GPL";
用下面的命令编译并加载到内核:
$ clang -O2 -Wall -target bpf -c xdp-example.c -o xdp-example.o
$ ip link set dev em1 xdp obj xdp-example.o
NOTE:以上命令将一个 XDP 程序 Attach 到一个网络设备,需要是 Linux 4.11 内核中支持 XDP 的设备,或者 4.12+ 版本的内核。
XDP/eBPF — 架构设计相关推荐
- XDP/eBPF — eBPF
目录 文章目录 目录 eBPF 诞生的背景 eBPF eBPF 与 cBPF 的区别 eBPF 与 Kernel 的区别 eBPF 的逻辑框架 eBPF 的运行原理 eBPF 的整体设计 eBPF J ...
- AI中pass架构设计优化
AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...
- NVIDIA Turing Architecture架构设计(下)
NVIDIA Turing Architecture架构设计(下) GDDR6 内存子系统 随着显示分辨率不断提高,着色器功能和渲染技术变得更加复杂,内存带宽和大小在 GPU 性能中扮演着更大的角色. ...
- NVIDIA Turing Architecture架构设计(上)
NVIDIA Turing Architecture架构设计(上) 在游戏市场持续增长和对更好的 3D 图形的永不满足的需求的推动下, NVIDIA ®已经将 GPU 发展成为许多计算密集型应用的世界 ...
- 最全面的缓存架构设计
一.缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力 ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- Asp.Net开发架构设计(二)
上回说到,我们配置了一下UnityConfig层,在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法,这个方法的主要作用就是把Servic ...
- web架构设计经验分享
本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...
- 架构设计复杂度的6个来源
谈到架构设计,相信每个技术人员都耳熟能详.我总结了三个架构设计相关的特性: 架构设计的思维和程序设计的思维差异很大. 架构设计没有体系化的培训和训练机制. 程序员对架构设计的理解存在很多误区. 所以, ...
最新文章
- orm 通用方法——RunProc调用存储过程
- 二分搜索法 C++代码实现 恋上数据结构笔记
- 致:WWF技术博客领跑者WXWINTER--兰竹梅菊.春夏秋冬
- [css] pseudo-class与pseudo-element有什么区别?
- 比较交换/(选择)排序法和冒泡排序法(C语言)
- sqllite开发安卓项目_苹果安卓合作了?两大巨头共同居然共同开发这个项目
- docker(7):使用python 连接数据库,插入并查询数据--link
- 所谓敏感(数字的敏感)
- Faied to run MSBuild commond CmakeError
- 【面经】我是如何优雅的跳槽的?
- 「企业架构」什么是TOGAF?完整的介绍
- 开始使用Mac OS X
- 计算机配件对比,基本参数 尺寸对比 接口对比
- android拒绝服务攻击,Android移动设备上的DDOS攻击
- 全新版windows terminal 更换背景
- 第十一天之模板简要回顾
- Vue+Gojs实现流程图demo
- 非线性规划在计算机中的应用研究,Hopfield网络在非线性规划中的应用研究.pdf
- ansys添加力矩_ANSYS转矩施加三种方法
- python协程实现一万并发_python进阶:服务端实现并发的八种方式
热门文章
- Gmail进程信息转储分析工具pdgmail
- topic是短语还是句子_英语七下unit 5 topic 3短语句子
- python pypdf2另存为图片_最全总结!聊聊 Python 操作PDF的几种方法
- 最新研究 | 人类大脑皮质对有声调和非有声调语言的音高编码
- 脑机接口拼写器是否真的安全?华中科技大学研究团队对此做了相关研究
- 脑机接口成唯一沟通方式,渐冻症晚期父亲终向4岁儿子表达爱意
- 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
- 火星上的甲烷从哪里来,科学家用算法给出了答案
- TikTok在美逃过一劫,但在印度……
- 中国农业科技领域最大一笔融资来了:极飞科技拿下12亿投资,百度&软银领投...