Generic XDP Hook
上一篇文章讲过bpf_prog_run_xdp是XDP 程序的最终调用函数,想要跟踪Generic XDP的代码可以从该函数入手。很显然你不应该从driver/,而是已改在net/目录下检索。
jensonqiu@Bing$ grep -rn "bpf_prog_run_xdp" net
net/core/dev.c:4349: act = bpf_prog_run_xdp(xdp_prog, xdp);
稍微过滤一下真相就呼之欲出了,函数的调用关系如下:
bpf_prog_run_xdp
netif_receive_generic_xdp
do_xdp_generic
netif_rx_internal/netif_receive_skb_internal/netif_receive_skb_list_internal
netif_receive_skb
ixgb_clean_rx_irq //Send received data up the network stack
从调用关系上很容易推导出 Generic XDP的Hook点是在网卡中断的下半部。也即是在网卡软中断的收包流程中,软中断收到报文后直接传递给网络协议栈。
网卡的两种工作模式
网卡有两种工作模式:
1) 软中断收包模式,该机制的特点是直接在软中断函数将报文传递到网络协议栈。
2)软中断唤醒触发轮询模式(NAPI),该机制的特点是在软中断函数中唤醒网卡驱动注册的poll函数,通过poll函数轮询收包。
API 是一种新技术,目前不是所有网卡驱动都支持这种能力,你如果想确定网卡是不是支持NAPI,有很多方式,其中一种就是查一下网卡驱动是否有实现xxxx_poll函数,比如ixgbe的驱动实现了ixgbe_poll函数。
这两种模式分别对应了XDP的 Generic XDP 和 Native XDP模式。
两种模式的代码汇总点其实都在软中断函数中,Generic XDP是在网卡不支持Native XDP模式时候,通过在ixgb_clean_rx_irq函数中调用netif_receive_skb实现,如果支持Native XDP模式则是通过调用网卡实现的xxxx_poll函数实现。
讲到这里,你肯定已经清楚Generic XDP、Native XDP的挂载点差异性了,如果还有不懂的地方可以连续我,我们单独交流。
Generic XDP Hook相关推荐
- Native xdp hook 点
XDP 支持三种操作模式: Native XDP(XDP_FLAGS_DRV_MODE) 默认的工作模式,Native工作在网卡驱动的RX队列上. Offloaded XDP(XDP_FLAGS_HW ...
- [译] Cilium:BPF 和 XDP 参考指南(2021)
Cilium:BPF和XDP参考指南_RToax-CSDN博客Table of ContentsBPF体系结构指令系统辅助功能地图对象固定尾叫BPF到BPF呼叫准时制硬化减负工具链开发环境虚拟机本文档 ...
- 万字长文|深入理解XDP全景指南
译者序 本文翻译自 2018 年 ACM CoNEXT 大会上的一篇文章: The eXpress Data Path: Fast Programmable Packet Processing in ...
- linux xdp简介
XDP是利用ebpf提供的全新内核网络性能提升方案,主要优势包括: 它不需要任何专门的硬件 它不需要内核绕过 它不会取代 TCP/IP 堆栈 它与 TCP/IP 堆栈以及 BPF 的所有优点协同工作 ...
- 同主机容器基于XDP的连通性实验
XDP原理介绍 受到Bastion论文的启发,我们尝试基于XDP来实现同主机上两个容器之间的端到端转发.XDP全称为eXpress Data Path, 是一种内核网卡上的Rx-hook,支持在网卡驱 ...
- XDP/eBPF — Overview
目录 文章目录 目录 XDP XDP 设计原则 XDP技术优势 XDP 的工作模式 XDP 的适用场景 XDP v.s. DPDK XDP XDP(eXpress Data Path,快速数据面)是 ...
- Linux网络新技术基石 |eBPF and XDP
hi,大家好,欢迎来到极客重生的世界,今天给大家分享的是Linux 网络新技术,当前正流行网络技是什么?那就是eBPF和XDP技术,Cilium+eBPF超级火热,Google GCP也刚刚全面转过来 ...
- linux网卡驱动对XDP支持情况
各个网卡厂商对应的Linux内核驱动如下 Mellanox: mlx4 (4.8) and mlx5 (4.9) QLogic/Cavium: qede (4.10) Virtio_net: (4.1 ...
- 简析XDP的重定向机制
一. XDP Socket示例解析 源码参见:https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP 该示例 ...
最新文章
- Vim 相关插件整理
- 为什么LINKBUTTON不能插在LTEMTEMPLATE里???
- 我自己写的3D图形数学库。。。有点乱!
- 优秀的中文分词第三方库——jieba
- 移动硬盘磁盘结构损坏且无法读取要怎样办啊
- mysql的c接口_mysql C接口大全
- 【Visio】Visio图片在Word中显示不全?如何确定Visio作图大小?
- python入门学习—字典(FishC)
- 微信小程序flex布局讲解
- vue实现 可拖拽的div
- 单片机/开发板连接配置的三种方式
- 时序数据库介绍和使用
- 互联网巨头开放给创业者的新机会!
- 开发者投稿—百度大脑新品体验之肤色检测
- 剑指 Offer 42. 连续子数组的最大和java
- 【Python数据处理篇——DataFrame数据准备】DataFrame的创建、增删改查、数据导入等
- 俄罗斯方块的设计思路
- 揭秘 typedef四用途与两陷阱
- 赞!敢闯会创的国赛新青年们!
- configure配置脚本的使用