【微知】DOCA中DOCA Flow初探?主要原理是什么?四大规则是什么?三级策略是什么?(M3F、Pipe-Entry-Rule

背景

DOCA: Data Center-on-a-Chip Architecture,片上数据中心架构。是NVIDIA针对DPU的软件框架。DOCA之于DPU,就相当于CUDA之于GPU。本文介绍的是DOCA SDK中的DOCA Flow模块的基本机制原理,他是DOCA中做数据包处理卸载到硬件处理的框架。本文将介绍DOCA Flow的主要原理是什么?四大规则是什么?三级策略是什么?

在Mellanox BF系列网卡中通过DOCA Flow让数据包处理从CPU上处理卸载到硬件中。它定义了一系列API来支持。并且通过Flow Pipe的方式来进行。 Flow Pipe类似OpenFlow,定义一个范式:以Flow Pipe(FP)为处理单元,每条FP包含多个条目,多条FP可以进行级联处理。

在SDN中使用OpenFlow通信协议来进行定义和管理网络转发规则,让交换机能够被几种控制和管理。在交换机中用OpenFlow table来定义如何处理接收到的数据包。通过该种方式可以提高了网络的灵活性和可管理性,而不用在每个交换机单独配置。比如流量调度、访问控制、QoS…

本文仅是对DOCA Flow原理的一个初步分析。DOCA Flow本质是让CPU处理的卸载到网卡上,网卡从硬件机制上提供了基于DOCA Flow的Flow Pipe的机制,这个机制类似SDN中的openflow,总之是让硬件帮忙做事情,也就是所谓的卸载。目的是为了加速,也是目前整个该方面的软件定义硬件加速的趋势技术。关注数据流动,忽略具体细节,把握本质。

关键点

M3F是条目的4种规则。 Match、MDF、Monitor、Forward

vDPA(virtual Data Path Acceleration)与 SR-IOV(Single Root I/O Virtualization)都是用于提升虚拟化环境中 I/O 性能的技术,尤其在高性能网络场景中广泛应用。尽管它们都能实现接近物理设备的吞吐能力,但其设计哲学、架构模型和适用场景有本质区别。 --- ## 一、vDPA 与 SR-IOV 的本质区别 | 维度 | **vDPA** | **SR-IOV** | |------|----------|-----------| | **核心思想** | 硬件加速 + Virtio 协议兼容性 | 物理设备虚拟化出多个独立 VF(Virtual Function) | | **数据路径控制权** | 可由硬件直接处理 virtqueue,但仍受 host 内核控制面管理 | VM 直接访问 VF,几乎绕过宿主机 | | **协议一致性** | 完全兼容标准 Virtio 驱动 | 使用原生网卡驱动或特定 VF 驱动 | | **热迁移支持** | ✅ 支持(因控制面仍在 host) | ❌ 不支持(VF 是独占资源,状态难迁移) | | **中断机制** | 支持 MSI/MSI-X 注入,可通过 KVM/vhost 协同 | 直接由 VF 向 VM 注入中断 | | **内存访问方式** | 使用 IOMMU 映射 Guest 内存,安全 DMA 访问 | 同样依赖 IOMMU 实现 DMA 隔离 | | **配置接口** | 通过 `vdpa` 子系统统一管理(如 `ip link add type vdpa`) | 通过 PCI 层创建 VF,使用 `ethtool` 或 sysfs 配置 | | **灵活性** | 高:可动态启用/禁用硬件加速,支持 fallback 到软件栈 | 低:VF 分配后即固定绑定给 VM | | **安全性** | 较高:控制面集中于 host,便于策略实施 | 中等:VF 具有一定特权,需严格隔离 | ### 核心差异总结: > 🔍 **vDPA 是“软硬协同”的中间路线**: > - 数据面交给硬件加速; > - 控制面保留在 host 内核; > - 兼容 Virtio 生态,支持热迁移。 > ⚡ **SR-IOV 是“直通优先”的极致性能方案**: > - 每个 VM 获得一个 VF,相当于拥有独立网卡; > - 性能最高,延迟最低; > - 但牺牲了灵活性和可管理性。 --- ## 二、技术原理对比详解 ### 2.1 SR-IOV 架构简述 ```text +------------------+ +------------------+ | VM 1 | | VM N | | eth0 → VF1 | | eth0 → VFn | +------------------+ +------------------+ ↓ ↓ +-----------------------------------------+ | PF (Physical Function) | | 嵌入在物理网卡中的管理实体 | +-----------------------------------------+ ↓ Physical NIC → Network ``` - **PF**:负责管理和配置 VF,运行在 host 上。 - **VF**:轻量级 PCIe 功能,可分配给 VM 使用。 - VM 中加载的是厂商提供的 VF 驱动(如 `ixgbevf`),而非标准 Virtio 驱动。 ✅ 优点: - 极致性能:零拷贝、无上下文切换; - 多队列并行处理能力强。 ❌ 缺点: - VF 数量受限(通常每个 PF 最多 64~128 个 VF); - 不支持热迁移(VF 状态无法迁移); - 安全风险较高(VM 对 VF 有较大控制权); - 配置复杂,难以自动化编排。 --- ### 2.2 vDPA 架构简述 ```text +------------------+ | VM | | eth0 → virtio-net| → 描述符写入 guest 内存 +------------------+ ↓ Guest RAM: [Desc Ring][Avail Ring][Used Ring] ↓ +-----------------------------+ | vDPA Device (e.g., mlx5) | | 直接解析 virtqueue 结构 | | 并执行收发操作 | +-----------------------------+ ↓ Physical Network ↑ Host Kernel: vdpa core ← ip/link/vdpa → 用户空间工具 ``` 关键点: - vDPA 设备能“理解”Virtio ring 的布局; - 不需要 VM 修改驱动; - host 内核仍可通过 netlink 接口配置 MAC、MTU、VLAN 等; - 支持 `vhost-vdpa` 后端,实现 hybrid 加速模式。 ✅ 优点: - 保持 Virtio 兼容性; - 支持热迁移(virtqueue 可被重新映射); - 控制面集中,适合云平台统一管理; - 可降级到软件模拟(fallback)。 ❌ 缺点: - 对硬件要求高(必须支持 vDPA); - 当前生态不如 SR-IOV 成熟。 --- ## 三、适用场景对比 | 场景 | 推荐技术 | 原因 | |------|----------|------| | **公有云 / 多租户环境** | ✅ vDPA | 支持热迁移、统一控制面、安全审计方便 | | **NFV(网络功能虚拟化)** | ✅ vDPA | 需要高性能 + 可编程性 + 动态调度 | | **裸金属容器(Kubernetes CNI)** | ✅ vDPA | 可结合 CRI-Runtime 使用 `vdpa-device-plugin` | | **超低延迟交易系统** | ✅ SR-IOV | 追求极致性能,不关心迁移 | | **HPC 集群通信** | ✅ SR-IOV | MPI 流量大,需要线速转发 | | **边缘计算节点(资源有限)** | ✅ vDPA | 更灵活,少量 VF 即可服务多个 VM | | **VDI / 桌面云** | ✅ vDPA | 需要频繁迁移用户会话 | --- ## 四、代码层面体现的区别(以内核为例) ### SR-IOV 创建 VF 示例(ixgbe 驱动) ```c // drivers/net/ethernet/intel/ixgbe/ixgbe_main.c static int ixgbe_pci_sriov_configure(struct pci_dev *dev, int num_vfs) { struct ixgbe_adapter *adapter = pci_get_drvdata(dev); if (num_vfs > MAX_VFS) return -EINVAL; /* 初始化 VF 队列、分配中断向量 */ ixgbe_enable_sriov(adapter, num_vfs); return num_vfs; } ``` 调用方式: ```bash echo 4 > /sys/class/net/enp3s0f0/device/sriov_numvfs ``` ### vDPA 设备注册示例(mlx5) ```c // drivers/net/ethernet/mellanox/mlx5/core/vdpa/main.c static const struct vdpa_config_ops mlx5_vdpa_config_ops = { .set_vq_address = mlx5_vdpa_set_vq_addr, .kick_vq = mlx5_vdpa_kick_vq, ... }; static int mlx5_vdpa_probe(struct auxiliary_device *aux_dev, const struct auxiliary_device_id *id) { struct mlx5_vdpa_dev *mvdev = to_mvdev(aux_dev); struct vdpa_device *vdpa = &mvdev->vdpa; vdpa->config = &mlx5_vdpa_config_ops; return vdpa_register_device(vdpa, num_vqs, 0); // 注册为 vdpa 设备 } ``` 使用方式: ```bash ip link add vdpa0 type vdpa dev mlxdpa0 ``` > 💡 可见:SR-IOV 是基于 PCI 层的硬件虚拟化;而 vDPA 是基于设备抽象层的协议加速。 --- ## 五、发展趋势展望 | 技术 | 发展趋势 | |------|----------| | **SR-IOV** | 逐渐被更灵活的技术替代,在新架构中趋于边缘化 | | **vDPA** | 成为主流方向,特别是在 DPU 和 SmartNIC 架构中 | | **VDUSE** | 新兴技术,将 vDPA 扩展到用户态设备(User-space vDPA) | | **VFIO-user + vDPA** | 实现远程设备共享与容器级设备虚拟化 | 例如 NVIDIA BlueField DPU 已全面支持 vDPA,并可在 DOCA 框架下构建用户态网络加速服务。 --- ## 六、结论 | 项目 | vDPA | SR-IOV | |------|------|--------| | 是否兼容 Virtio | ✅ 是 | ❌ 否 | | 是否支持热迁移 | ✅ 是 | ❌ 否 | | 性能水平 | 接近线速 | 极致线速 | | 管理性 | 强(统一控制面) | 弱(分散管理) | | 未来前景 | 广阔(云原生首选) | 收缩(特定场景保留) | > 📌 **一句话总结**: > - 如果你需要 **高性能 + 可管理性 + 热迁移** → 选 **vDPA**; > - 如果你只追求 **绝对最低延迟和最大吞吐**,且不在乎迁移 → 选 **SR-IOV**。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值