目录

文章目录

  • 目录
  • 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 — 架构设计相关推荐

  1. XDP/eBPF — eBPF

    目录 文章目录 目录 eBPF 诞生的背景 eBPF eBPF 与 cBPF 的区别 eBPF 与 Kernel 的区别 eBPF 的逻辑框架 eBPF 的运行原理 eBPF 的整体设计 eBPF J ...

  2. AI中pass架构设计优化

    AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...

  3. NVIDIA Turing Architecture架构设计(下)

    NVIDIA Turing Architecture架构设计(下) GDDR6 内存子系统 随着显示分辨率不断提高,着色器功能和渲染技术变得更加复杂,内存带宽和大小在 GPU 性能中扮演着更大的角色. ...

  4. NVIDIA Turing Architecture架构设计(上)

    NVIDIA Turing Architecture架构设计(上) 在游戏市场持续增长和对更好的 3D 图形的永不满足的需求的推动下, NVIDIA ®已经将 GPU 发展成为许多计算密集型应用的世界 ...

  5. 最全面的缓存架构设计

    一.缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力 ...

  6. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  7. Asp.Net开发架构设计(二)

    上回说到,我们配置了一下UnityConfig层,在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法,这个方法的主要作用就是把Servic ...

  8. web架构设计经验分享

    本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...

  9. 架构设计复杂度的6个来源

    谈到架构设计,相信每个技术人员都耳熟能详.我总结了三个架构设计相关的特性: 架构设计的思维和程序设计的思维差异很大. 架构设计没有体系化的培训和训练机制. 程序员对架构设计的理解存在很多误区. 所以, ...

最新文章

  1. input缓存中选值事件触发
  2. top,right,bottom,left设置为0有什么用?
  3. 大学计算机测试试题,大学计算机基础 excel测试题 求答案~~喵~~
  4. java中常见数据库字段类型与java.sql.Types的对应
  5. 自己实现一个右滑删除的ListView
  6. Delphi unit单元文件结构
  7. 2015 ICCV论文《Joint Fine-Tuning in Deep Neural Networks for Facial Expression Recognition》
  8. nyoj 144小珂的苦恼(关于如何不定方程有整数解问题)
  9. QCC3003项目实战:BlueMotor6 AGHFP CVC 蓝牙对讲耳机
  10. VS2019 OpenCL安装和快速入门
  11. 个人博客定制 to 鼠标单击事件绑定
  12. 最早的动态图匹配代表性算法-邻接点树(NNT)
  13. 在vue项目中使用favicon.ico
  14. 【渝粤题库】陕西师范大学202015 法律职业伦理 作业
  15. JavaScript mongodb(数据库)简单值
  16. vue项目webpack打包优化体积优化,打包体积减少200kb到4Mb
  17. 关于“大屏硬件”的故事,其实是生活方式的选择
  18. 我进了培训机构,成为一名java讲师
  19. C语言小项目——计时器(倒计时+报警提示)
  20. 2022华为机试真题 C++ 实现【快速人名查找】

热门文章

  1. Xamarin iOS项目找不到模拟器
  2. Xamarin iOS教程之申请付费开发者账号下载证书
  3. efcore调用函数_EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
  4. 如何设计Lighthoused定位接收电路
  5. 上市13年,AI平台收入还能暴增131%,这家老牌AI公司正在“反杀”
  6. AI进军摇滚圈,老炮:这是啥?
  7. 最新电子皮肤的触觉有多灵?连空气流动都能感受到
  8. 14.7倍推理加速、18.9倍存储节省!北航、商汤、UCSD提出首个点云二值网络 | ICLR 2021...
  9. 依图超车争夺AI创业第一股!冲刺科创板,募资75亿为造芯,去年营收91%投向研发...
  10. MIT的这个AI,专治抗生素滥用,二次抗生素直降67%