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个来源
谈到架构设计,相信每个技术人员都耳熟能详.我总结了三个架构设计相关的特性: 架构设计的思维和程序设计的思维差异很大. 架构设计没有体系化的培训和训练机制. 程序员对架构设计的理解存在很多误区. 所以, ...
最新文章
- input缓存中选值事件触发
- top,right,bottom,left设置为0有什么用?
- 大学计算机测试试题,大学计算机基础 excel测试题 求答案~~喵~~
- java中常见数据库字段类型与java.sql.Types的对应
- 自己实现一个右滑删除的ListView
- Delphi unit单元文件结构
- 2015 ICCV论文《Joint Fine-Tuning in Deep Neural Networks for Facial Expression Recognition》
- nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
- QCC3003项目实战:BlueMotor6 AGHFP CVC 蓝牙对讲耳机
- VS2019 OpenCL安装和快速入门
- 个人博客定制 to 鼠标单击事件绑定
- 最早的动态图匹配代表性算法-邻接点树(NNT)
- 在vue项目中使用favicon.ico
- 【渝粤题库】陕西师范大学202015 法律职业伦理 作业
- JavaScript mongodb(数据库)简单值
- vue项目webpack打包优化体积优化,打包体积减少200kb到4Mb
- 关于“大屏硬件”的故事,其实是生活方式的选择
- 我进了培训机构,成为一名java讲师
- C语言小项目——计时器(倒计时+报警提示)
- 2022华为机试真题 C++ 实现【快速人名查找】
热门文章
- Xamarin iOS项目找不到模拟器
- Xamarin iOS教程之申请付费开发者账号下载证书
- efcore调用函数_EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
- 如何设计Lighthoused定位接收电路
- 上市13年,AI平台收入还能暴增131%,这家老牌AI公司正在“反杀”
- AI进军摇滚圈,老炮:这是啥?
- 最新电子皮肤的触觉有多灵?连空气流动都能感受到
- 14.7倍推理加速、18.9倍存储节省!北航、商汤、UCSD提出首个点云二值网络 | ICLR 2021...
- 依图超车争夺AI创业第一股!冲刺科创板,募资75亿为造芯,去年营收91%投向研发...
- MIT的这个AI,专治抗生素滥用,二次抗生素直降67%