学习
实践
活动
专区
工具
TVP
写文章

AF_XDP socket 介绍

eBPF 程序会 attach 到指定的内核代码路径中,当执行到该代码路径时,会执行对应的 eBPF 程序 XDP XDP 是专门针对于网络数据,是基于 eBPF 的高性能数据链路。 ,XDP 程序在网卡驱动中直接取得网卡收到的数据包,然后直接送到用户态应用程序 应用程序利用 AF_XDP 协议族的 socket 接收数据。 XDP 程序会把数据帧送到一个在用户态可以读写的内存中,用户态应可在该内存中直接完成数据包的读取和写入,整个过程是完全 zero copy UMEM 使用 XDP socket 之前,需要在用户态通过 通过 socket 系统调用创建 AF_XDP socket,创建之后每个 socket 都各自分配了一个 RX ring 和 TX ring。 这两个 ring 需要通过 socket 选项 XDP_RX_RING 和 XDP_TX_RING 进行注册。每个 socket 必须至少具有其中一个ring。

77320
  • 广告
    关闭

    618夏日盛惠

    2核2G云服务器首年95元,GPU云服务器低至9.93元/天,还有更多云产品低至0.1折…

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    简析XDP的重定向机制

    XDP Socket示例解析 源码参见:https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP 该示例演示了如何通过 BPF将网络数据包从XDP Hook点旁路到用户态的XDP Socket,解析过程中为突出重点,将只关注重点代码段,一些函数会被精简,比如:错误处理等 二. ") int xdp_sock_prog(struct xdp_md *ctx) { int index = ctx->rx_queue_index; if (bpf_map_lookup_elem "):指定prog函数符号,应用层可通过查找"xdp_sock"加载该prog,并绑定到指定网卡 int xdp_sock_prog(struct xdp_md *ctx):当网卡收到数据包时,会在xdp 用户态程序 af_xdp_user.c 该程序实现bpf加载到网卡,创建XDP Scoket并绑定到网卡的指定队列,并通过XDP Scoket收发数据,这里仅分析xXDP Scoket相关部分 int

    12720

    在 FPGA 上运行 eBPF XDP 应用

    首先要回答的问题就是为什么要让 XDP 程序运行在 FPGA 上?理论上高速网络的功能,例如防火墙、负载均衡、SDN 独立使用 FPGA 或者 XDP 都是可以完成的,没必要硬把两者合在一起。 从 XDP 一侧来看,XDP 是一种利用 CPU 来进行网络处理的技术,就会面临 CPU 带来的瓶颈: CPU 面临摩尔定律失效的问题,性能无法再翻倍增长。 既然 XDP 一侧面临 CPU 资源消耗的问题,而 FPGA 一侧面临编程困难的问题,那么自然就产生了将 XDP offload 到 FPGA 的想法。 XDP 应用最后通常是将执行的动作保存在 r0 寄存器,然后再退出。 例如 r0=1;exit; 这可以优化成一条 exit_drop 测试结果 作者选取了几个在 Linux 代码库中的 XDP example ,一个简单的 XDP 防火墙和 Facebook 开源的

    59620

    XDP技术——linux网络处理的高速公路

    运行的XDP程序可以通过XDP动作码来指定驱动对网络数据包的后续动作: • XDP_ABORTED意味着程序错误,会将数据包丢掉,与XDP_DROP不同之处在于XDP_ABORTED会用trace_xdp_exception • XDP_PASS会将该数据包继续送往内核的网络协议栈,和传统的处理方式一致。这也使得XDP可以在有需要的时候方便地使用传统的内核协议栈进行处理。 • XDP_TX会将该数据包从同一块网卡返回。 • XDP_REDIRECT则是将数据包重定向到其他的网卡或CPU,结合AF_XDP可以将数据包直接送往用户空间。 以上几种XDP动作码的组合,带来了多种应用可能。 • …… XDP技术的使用 当前,XDP技术被OVS、Cilium、Polycube等用于网络快速路径的新选择,DPDK也做了AF_XDP PMD。 XDP技术的发展只过了几年,AF_XDP正式合入内核更是不过三年的时间,但它是Linux内核社区长期维护的技术,具有足以媲美DPDK的性能,具备多种独有的优势。

    1.3K30

    你的第一个XDP BPF 程序

    Cilium方案中大量使用了XDP、TC等网络相关的BPF hook,以实现高性能的网络RX和TX。 今天我们先来讲讲XDP应用理论,再来学习编写第一个XDP BPF程序。 目录 TL;DR 网络钩子(hook) XDP使用介绍 引入XDP之后网络Data Path XDP 开发环境搭建 设计你的第一个XDP程序 编译XDP程序 加载XDP程序 验证第一个XDP程序的效果 今天我们先来讲讲XDPXDP使用介绍 XDP全称为eXpress Data Path,是Linux内核网络栈的最底层。 这使得XDP在性能速度方面成为最佳钩子,例如缓解DDoS攻击等,相关背景知识可以看这篇文章。 XDP输入参数 XDP暴露的钩子具有特定的输入上下文,它是单一输入参数。 引入XDP之后网络Data Path 在没有引入XDP之前,原来是的网络数据包传输路径是这样的: ? ? 启用XDP后,网络包传输路径是这样的: ? ?

    7.7K32

    linux ebpf_防火墙拦截dns解析

    比如,XDP就是一个eBPF调用点。它位于网络协议栈的最底层,网卡层面,这里做数据包过滤非常高效,并且可以依托硬件特性将数据包过滤行为offload到硬件中,很棒的主意。 所谓的eBPF调用点理解起来非常简单,就是在这些点上,内核会调用通过用户态灌进来的eBPF字节码,目前在网络协议栈领域最常用的eBPF调用点就是XDP了。 如何将编译好的eBPF字节码灌进XDP。 root@zhaoya-VirtualBox:~/xdp# ip link set dev enp0s3 xdp obj simple.o 作为骨灰级的Netfilter,iproute2玩家,我是一直跟随着最新进展 很多年前我玩Cisco ACL就知道,Cisco的做法是将ACL规则优化编译加载到网卡,如今Linux的eBPF字节码在XDP运行,也是一样的路子。

    43620

    你的第一个TC BPF 程序

    Cilium方案中大量使用了XDP、TC等网络相关的BPF hook,以实现高性能的网络RX和TX。 第一篇文章提到了XDP只能处理入站流量(正在接收的数据包)。 dev veth09e1d2e xdp obj tc-xdp-drop-tcp.o sec xdp 由于我们需要测试双向流量,即也测试从容器内部访问外部网站,因此需要在容器内部执行curl命令,本人整理一篇如何从容器内部 验证XDP只能控制RX流量(XDP完整实战指导看这里) 在主机层(Nginx容器外)curl Nginx容器的80端口 从Demo视频中看到,实现丢弃TCP流量的XDP程序attach到veth设备上后 验证同时使用XDP和TC,控制RX和TX的TCP流量 如同XDP BPF程序可以通过ip命令进行加载,只要你安装了iproute2,也可以通过tc命令加载TC BPF程序。 /headers/ -O2 -target bpf -c tc-xdp-drop-tcp.c -o tc-xdp-drop-tcp.o 加载到内核 将编译成功后输出的tc-xdp-drop-tcp.o文件

    6K61

    P99 Conf Talk 汇总 | Rust 在高性能低延迟系统中的应用

    ---- 来自于 《eBPF 技术简介》[7] XDP 是什么? XDP 的引入是为了解决 Kernel Bypass 存在的一些问题。解决方案就是:给内核网络栈添加可编程能力。 这个框架称为 XDPXDP 定义了一个受限的执行环境(a limited execution environment),运行在一个 eBPF 指令虚拟机中。 参考:[译] [论文] XDP (eXpress Data Path):在操作系统内核中实现快速、可编程包处理(ACM,2018)[8] 如何使用 XDP ,以及设计一个 Rust 运行时 Bryan 这些环分别通过setockopts() 的 XDP_RX_RING和XDP_TX_RING 进行注册和调整大小。每个 socket 必须至少有一个这样的环。 http://arthurchiao.art/blog/xdp-paper-acm-2018-zh/ [9] AF_XDP技术详解: https://rexrock.github.io/post/af_xdp1

    90720

    深入理解 Cilium 的 eBPF 收发包路径

    BPF 程序有多种类型,图 2.1 是其中一种,称为 XDP BPF 程序。 XDP 是 eXpress DataPath(特快数据路径)。 XDP 程序可以直接加载到网络设备上。 如果存在,返回丢弃判决(XDP_DROP);否则,返回允许通行判决( XDP_PASS),内核会进行后续处理。 例如 内核只关心 XDP 程序的返回是 PASS, DROP 还是 REDIRECT。至于在 XDP 程序里做什么, 完全看你自己。 这就到了我们前面的 XDP 类型程序。 Step 2:XDP 程序处理 ? 如果驱动支持 XDP,那 XDP 程序将在 poll 机制内执行。 这里可以通过 receive_xdp() 做一些通用(generic)的事情,因此我在图中将其标注为 (g)XDP Step 2 中提到,如果网卡驱动不支持 XDP,那 XDP 程序将延迟到更后面执行,

    1.4K30

    容器网络|深入理解Cilium

    BPF 程序有多种类型,图 2.1 是其中一种,称为 XDP BPF 程序。 XDP 是 eXpress DataPath(特快数据路径)。 XDP 程序可以直接加载到网络设备上。 如果存在,返回丢弃判决(XDP_DROP);否则,返回允许通行判决( XDP_PASS),内核会进行后续处理。 例如 内核只关心 XDP 程序的返回是 PASS, DROP 还是 REDIRECT。至于在 XDP 程序里做什么, 完全看你自己。 这就到了我们前面的 XDP 类型程序。 Step 2:XDP 程序处理 如果驱动支持 XDP,那 XDP 程序将在 poll 机制内执行。 这里可以通过 receive_xdp() 做一些通用(generic)的事情,因此我在图中将其标注为 (g)XDP Step 2 中提到,如果网卡驱动不支持 XDP,那 XDP 程序将延迟到更后面执行

    68510

    扫码关注腾讯云开发者

    领取腾讯云代金券