目录

文章目录

  • 目录
  • 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. orm 通用方法——RunProc调用存储过程
  2. 二分搜索法 C++代码实现 恋上数据结构笔记
  3. 致:WWF技术博客领跑者WXWINTER--兰竹梅菊.春夏秋冬
  4. [css] pseudo-class与pseudo-element有什么区别?
  5. 比较交换/(选择)排序法和冒泡排序法(C语言)
  6. sqllite开发安卓项目_苹果安卓合作了?两大巨头共同居然共同开发这个项目
  7. docker(7):使用python 连接数据库,插入并查询数据--link
  8. 所谓敏感(数字的敏感)
  9. Faied to run MSBuild commond CmakeError
  10. 【面经】我是如何优雅的跳槽的?
  11. 「企业架构」什么是TOGAF?完整的介绍
  12. 开始使用Mac OS X
  13. 计算机配件对比,基本参数 尺寸对比 接口对比
  14. android拒绝服务攻击,Android移动设备上的DDOS攻击
  15. 全新版windows terminal 更换背景
  16. 第十一天之模板简要回顾
  17. Vue+Gojs实现流程图demo
  18. 非线性规划在计算机中的应用研究,Hopfield网络在非线性规划中的应用研究.pdf
  19. ansys添加力矩_ANSYS转矩施加三种方法
  20. python协程实现一万并发_python进阶:服务端实现并发的八种方式

热门文章

  1. Gmail进程信息转储分析工具pdgmail
  2. topic是短语还是句子_英语七下unit 5 topic 3短语句子
  3. python pypdf2另存为图片_最全总结!聊聊 Python 操作PDF的几种方法
  4. 最新研究 | 人类大脑皮质对有声调和非有声调语言的音高编码
  5. 脑机接口拼写器是否真的安全?华中科技大学研究团队对此做了相关研究
  6. 脑机接口成唯一沟通方式,渐冻症晚期父亲终向4岁儿子表达爱意
  7. 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
  8. 火星上的甲烷从哪里来,科学家用算法给出了答案
  9. TikTok在美逃过一劫,但在印度……
  10. 中国农业科技领域最大一笔融资来了:极飞科技拿下12亿投资,百度&软银领投...