简介:这份 BlueField DPU Solutions 202104.pdf 面向数据中心架构师、云计算与网络加速方向的开发者及运维人员,系统梳理 NVIDIA BlueField-2 DPU 的定位与方案。内容围绕 DPU 卸载与硬件加速展开,涉及安全加速、存储加速、网络加速、裸金属云以及 BlueField 生态等主题,并延伸到 DOCA SDK、ConnectX-6 Dx、8 个 Arm A72 核心、PCIe Gen4 交换与可编程加速引擎、VMware 混合云架构等关键模块,同时讨论基础设施卸载、租户隔离与性能收益,适合用于技术选型、方案调研和架构入门。压缩包仅含 1 个 PDF 文件,大小约 4.7MB,便于集中阅读和归档。已有 807 人学习下载,说明其在 DPU 与智能网卡方向具有一定参考价值。读者可从中获取 BlueField-2 的硬件组成、典型应用场景、软件定义基础设施与安全卸载思路,也能对照 IPsec、RegEx、视频流等加速案例,快速建立对 DPU 在裸金属、虚拟化和云数据中心中价值边界的整体认识。
1. 为什么裸金属和虚拟化都需要一层 DPU:需求从哪里立起来
机房扩容时很多人的第一反应是加 CPU 核数,结果网络转发、存储协议栈、安全策略三块数据面把核吃得干干净净——一台 64 核的机器,真正留给业务的可能只剩一半。BlueField-2 DPU 这套方案要解决的就是这件事:把软件定义网络、软件定义存储、软件定义安全的数据面从主机 CPU 上摘下来,交给一张自带 8 核 Arm 和多个加速引擎的卡去跑。它适合两类人:一类做裸金属云交付,主机上不能装 agent 却仍要 VPC 隔离和云盘挂载;另一类在虚拟化平台上想把微隔离和存储卸载下沉到硬件。接下来按架构、数据面、安全面、踩坑、验收五步,把这份 2020 年版的方案讲透。
2. 总体架构:BlueField-2 的芯片结构与它在机柜里的位置
2.1 从「服务器插网卡」到「服务器插一台小计算机」
理解 DPU 最容易翻车的地方,是把它当成一张性能更强的智能网卡。传统智能网卡做的是「卸载」:把校验和、TSO、SR-IOV 这类固定功能从 CPU 挪到卡上,卡本身跑不了通用逻辑,改一次功能就要等一版固件。DPU 的思路不一样,它是一台独立的小计算机——有自己的 CPU 核、内存、操作系统、启动流程和带外管理口,主机只是它的一个 PCIe 对端。
这个定位差异直接决定了方案怎么画。在裸金属场景里,主机操作系统是租户的,你没法在主机里塞 agent 做安全组下发,也没法装客户端做分布式存储挂载。这时候 DPU 上的 Arm 系统就成了唯一能落地的控制点:VPC 的隧道封装、安全组的规则匹配、云盘的远端接入,全部在卡上完成,主机看到的只是一块普通网卡和一块普通本地盘。主机无感,这是整份方案里最有价值的一句设计约束。
在虚拟化场景里,情况反过来。主机侧有成熟的虚拟化层,能装驱动、能下发策略,但代价是每一份策略都要消耗主机的 CPU 周期。安全策略越细,微隔离的规则条数越多,主机被吃掉的核就越多。DPU 在这里承担的角色是「把策略执行点前移」:控制面还在管理平台,执行面落到卡上,主机只负责跑业务。
两种场景的共同点是,DPU 都必须做到与主机操作系统解耦。这条约束在后面的存储方案里会反复出现,因为它决定了你不能依赖主机侧的特殊驱动。
| 维度 | 传统网卡 | 智能网卡 | BlueField-2 这类 DPU |
|---|---|---|---|
| 是否有独立 CPU | 无 | 通常无 | 8 核 64 位 Arm A72 |
| 是否能跑通用 OS | 否 | 否 | 是,可跑完整 Linux 发行版 |
| 功能扩展方式 | 换固件 | 换固件 / 有限可编程 | 写应用,走 SDK |
| 典型职责 | 收发报文 | 固定功能卸载 | 承载网络/存储/安全控制面 |
| 故障域 | 与主机同生共死 | 与主机同生共死 | 可独立复位、独立升级 |
2.2 8 核 Arm Tile 架构与 PCIe 交换机的内部连接
拆开看这颗芯片的内部结构,有几个数字值得记住,因为它们直接决定了方案的能力边界。整颗芯片 69 亿晶体管,8 个 64 位 Arm A72 核按 Tile 组织成 4 组,每组 2 核共享 8MB L2,4 个 Tile 之间共享 6MB L3,主频最高 2.5GHz。这套配置放在 2020 年的语境下不算豪华,但胜在 IO 通路宽——它不是拿来当通用服务器用的,是拿来跑数据面的。
真正让它在架构上区别于普通网卡的是那颗集成 PCIe 交换机。16 lane 的 PCIe Gen4 可以在卡内做拆分,并且支持两种模式:
- End Point 模式:整张卡作为主机的一个 PCIe 端点,主机看到的是标准网口和加速设备。这是最常见的一种部署形态,适用于绝大多数裸金属和虚拟化节点。
- Root Complex 模式:卡自己当 PCIe 主机,向下挂 NVMe 盘或者别的端点设备。存储型节点会用这个模式,让 DPU 直接管理本地盘,再通过 SNAP 框架以本地盘的形式暴露给业务主机。
双模式这个设计在方案里很关键。它意味着同一张卡,在网络节点上是网卡,在存储节点上是存储控制器,在超融合节点上两者兼有。做预算和机型规划时,可以先确定每个机柜需要几种角色,再决定采购时配不配本地盘、配多少 lane。
对外接口是 200 Gbps 的以太网和 InfiniBand 双模,支持 NRZ 与 PAM4 两种调制方式;另外还有一个 1GbE 的带外管理口。这条带外口在实际交付里比想象中重要——DPU 上的 Arm 系统挂了、网络不通了,你还能从这个口进去救,不用跑到机房拔卡。整个方案里我一般强制要求带外口单独走一张管理网,跟业务网物理隔离。
网络芯片部分基于同代的 ConnectX 系列,这意味着它的 RDMA、SR-IOV、叠加网络卸载能力是继承下来的,不是从零开始。选型时可以直接复用已有的网卡调优经验,少走很多弯路。
2.3 上架形态与选型参数对照
把上面的结构翻译成采购和上架语言,需要落到一张参数表上。下面这份表是方案里给硬件选型用的,左侧是能力项,右侧是这套方案的取值和它在设计里的用途。
| 能力项 | 参数 | 在方案里的作用 |
|---|---|---|
| 计算 | 8×Arm A72,最高 2.5GHz,8MB L2 + 6MB L3 | 跑数据面应用、控制面 agent、轻量容器 |
| 网络 | 单口 200Gbps 或双口 100Gbps,以太/IB | 决定单节点东西向带宽上限 |
| PCIe | 16 lane Gen4,可拆分,支持 RC/EP 双模 | 决定能不能挂本地盘、能挂几块 |
| 带外 | 1×1GbE 管理口 | 独立救砖通道,必须单独组网 |
| 加密 | 对称加解密引擎,官方口径 100Gbps IPsec | 传输与静态数据加密卸载 |
| 正则 | 内容匹配引擎,官方口径 50Gbps | 恶意特征匹配、DPI |
| 存储 | NVMe-oF 卸载,官方口径 5M 级 4K IOPS | 远端盘以本地盘形态交付 |
| 视频 | 官方口径 100Gbps 视频流处理 | 转码/流媒体节点可选的附加场景 |
表格里的「官方口径」是这套方案对外宣传时的效率倍数来源,同一份材料里给出了从 2.5 倍(云叠加网络)到 150 倍(下一代有状态防火墙)的区间。做方案文档时我建议原样引用并标注出处,不要自己换算成「省了多少钱」,因为倍数高度依赖报文大小、连接数和策略复杂度,写死了容易被现场数据打脸。
节点形态上,这套方案里常见的三种组合:
第一种是纯网络节点,单口 200G 上行,DPU 只跑叠加网络和防火墙,主机侧业务不感知。这种形态最轻,也最容易先落地,适合作为试点。
第二种是存储节点,DPU 切到 Root Complex 模式,下挂若干块 NVMe,再通过 NVMe-oF 把盘共享出去,业务主机通过 SNAP 把远端盘当本地盘用。这种形态对 PCIe 拆分和 BIOS 配置最敏感,后面避坑章会专门讲。
第三种是超融合节点,网络和存储同时跑在一张卡上,8 个 Arm 核要同时承担隧道封装、存储协议栈、安全策略三份负载。这种形态对卡上 CPU 的调度要求最高,也是最容易把 Arm 核打满的一种,压测时必须单独观察卡上的负载曲线。
选型时还有一个容易忽略的点:主机侧 PCIe 插槽的供电和散热。200G 双口的卡功耗不低,普通机箱的风道未必按这个标准设计,上架前最好先拿一台机器做单机验证,别一次订几十台回来才发现插槽位置不匹配。
3. 网络与存储加速:把数据面从主机 CPU 上摘下来
3.1 网络数据面:从内核协议栈到 DPDK 与 P4
主机 CPU 被吃掉最多的部分,通常是网络路径上的三件事:隧道封装解封装、安全组规则匹配、以及连接跟踪。这三件事在传统架构里都在内核协议栈里做,一个 VXLAN 包进来要做一次解封装,再做一次规则查找,报文越大、连接越多,消耗越线性。
DPU 上的做法是把这三件事整体搬到卡上。软件栈上是三层:底层是 SDK 提供的开放 API,官方列出的有 DPDK、SPDK 和 P4;中间是几个专用加速库,覆盖交换包处理、加解密、信任根、DMA、SNAP 和管理遥测;上层才是你要写的应用。
P4 这一层值得单独说。它让叠加网络的封装格式变成可编程的,而不是写死在固件里。做方案时这条能力决定了未来能不能平滑支持新的隧道协议——如果换成纯固件卸载的方案,新协议出来就得等厂商升级;如果用 P4 描述数据面流水线,改的是你自己仓库里的一段程序。
给一个典型的流水线描述示意,用伪代码表达逻辑而不是完整可编译的 P4:
// 简化示意:入方向先按隧道类型分流,再做策略匹配 parser parse_packet { extract(ethernet); extract(ipv4); if (ipv4.proto == UDP && udp.dst_port == 4789) { extract(vxlan); // 命中 VXLAN,继续解封装内层 extract(inner_ethernet); extract(inner_ipv4); } } control ingress_policy { // 命中已建流的走快速路径,直接转发 if (flow_table.lookup(inner_ipv4)) { forward(flow_table.next_hop); } else { // 未命中则送安全策略表,决定放行、丢弃还是送 DPI apply(security_group_table); } }这段伪代码体现的设计意图是快慢分离:已经建流的报文走硬件快速路径,只有首包和策略变更后的报文才进慢路径做完整匹配。方案里落到参数上,就是要求首包处理时延控制在微秒级,稳态转发不额外占用主机核。
主机侧看到的形态应该是标准的 SR-IOV 虚拟功能,业务进程用普通 socket 或 RDMA 接口就能收发,不需要改代码。这一点在验收时一定要测,因为有些卸载方案为了性能要求应用接入私有库,那就违背了「对上层透明」的设计前提。
3.2 存储数据面:NVMe-oF 与 SNAP 框架造出的「本地盘幻觉」
存储加速的核心问题是:怎么让远端网络盘在主机眼里看起来像本地盘。传统做法是在主机里装一个客户端,做协议转换和块设备映射,这个客户端本身就是个内核模块,要适配不同操作系统和内核版本,维护成本极高。
这套方案用的是 SNAP 框架,思路是把这一层放到 DPU 上,做成两种接口形态:一种是 NVMe SNAP,让远端存储以 NVMe 设备的形式出现在主机 PCIe 总线上;另一种是 virtio-blk SNAP,面向虚拟化场景,以 virtio 块设备的形式出现。
关键在于,主机侧用的都是系统自带的 inbox 驱动。NVMe 驱动是操作系统标配,virtio-blk 也是标配,不需要额外装任何东西。这就把「支持哪些操作系统」这个问题从「等厂商适配」变成了「操作系统自带就行」,老版本系统的兼容性问题一下子被绕开了。这条设计在裸金属云场景里几乎是决定性的——你没法要求租户在你给的机器上装驱动。
存储侧的加速引擎同时承担几件事:远端访问走 NVMe-oF 或 RDMA 卸载,本地访问分直通和间接两种路径,静态数据做 AES-XTS 加密,另外还有去重和压缩。官方给出的吞吐指标是双 100Gbps 或单 200Gbps 下 4K 随机读最高到 5M IOPS 量级,时延压得很低。
部署顺序上,我一般按这个流程走,脚本里每一步都加了说明:
# 以下在 DPU 侧的 Arm 系统上执行,主机侧不装任何东西 # 1) 加载 NVMe over TCP 传输模块,验证内核是否支持 modprobe nvme-tcp lsmod | grep nvme_tcp # 有输出说明模块可用,否则先补内核模块 # 2) 发现远端目标,确认存储阵列的可达性 # -a 是目标地址,-s 是端口,实际地址按现场存储网段填写 nvme discover -t tcp -a 10.0.0.10 -s 4420 # 3) 建立连接,把远端子系统接进来 # -n 是子系统 NQN,必须和存储侧配置一致,写错会直接连不上 nvme connect -t tcp -n nvme-subsys-1 -a 10.0.0.10 -s 4420 # 4) 确认设备已经出现,记下设备名,SNAP 会用这个设备做映射 nvme list # 5) 启动 SNAP 服务,把远端 NVMe 设备映射成主机可见的本地盘 systemctl start snap-service systemctl status snap-service --no-pager # 6) 回到主机侧,用系统自带命令就能看到一块新盘 # 注意主机侧不需要 nvme-cli,也不需要任何厂商驱动第六步是整个流程的验收点。主机上敲一条lsblk能看到新盘、能格式化、能挂载,就说明「本地盘幻觉」成立。如果主机看不到盘,排查顺序是:先看 SNAP 服务是否起来,再看远端连接是否还在,最后看 DPU 的 PCIe 配置是不是被切成了 Root Complex 模式导致端点没有正确暴露。这个顺序别搞反,先查主机侧会浪费大量时间。
3.3 带宽与时延的分配策略
一张卡同时跑网络和存储,绕不开资源争抢。200Gbps 的总带宽在纯网络场景下够用,一旦叠加 NVMe-oF 的读写流量,队列调度就成了必须显式配置的东西。
我的做法是给两类流量打不同的优先级标记,在 DPU 的交换逻辑里做加权调度。存储流量对时延更敏感但可以接受一定的突发,网络转发流量对丢包敏感但带宽弹性大,所以通常给存储更高的权重但设一个带宽上限,避免存储把网络饿死。这个上限值需要按业务实测调,起步可以设在总带宽的 60%,再根据压测结果上下浮动。
Arm 核的分配同样要做。8 个核如果平均分给隧道处理、存储协议栈、安全策略、管理 agent 四份负载,很容易出现某一类负载把核占满导致整体抖动。实际配置里一般把网络数据面绑到固定的几个核上并做隔离,管理面单独留一个核,剩下的给存储。绑核这件事在 Arm 上和在 x86 上一样重要,不绑就会出现「明明 CPU 利用率只有 40%,时延却在跳」的玄学现象。
4. 安全加速:把信任根从主机挪到 DPU
4.1 从边界防护到主机内的微隔离
安全模型的变化是这套方案里最值得讲清楚的一层。传统数据中心的安全是「边界式」的:核心机房出口放防火墙,内部靠 VLAN 划分隔离,主机内部基本是信任的。云化之后这个模型站不住了——东西向流量占了大头,虚拟机之间、容器之间的访问根本不过边界设备。
材料里给的两张对比图很能说明问题。没有 DPU 的时候,安全能力被放在网卡之外的软件层,加密是软件加密,L4-L7 检查靠主机 CPU 跑,微隔离靠主机上的 agent,每一份都吃性能。有 DPU 之后,L4-L7 检查、微隔离、下一代防火墙、加解密全部下沉到卡上,主机侧只留下业务。
这个迁移带来一个很实际的好处:主机被攻破不等于安全策略被绕过。因为执行点在 DPU 上,控制面在卡上的独立系统里,主机操作系统即使被拿到 root,也改不了卡上的策略表。材料里把这条描述为「信任从主机转移到 DPU」,配合信任根、安全固件升级、Arm TrustZone 和硬化的隔离域,构成一条从固件到策略执行的完整链路。
具体拆开有四块能力:
第一块是硬信任根。固件升级要验签,启动过程有度量,Arm 侧有 TrustZone 划出安全世界。这块能力平时看不见,但它是前面所有软件策略的地基,做等保或者内部合规评审时是必查项。
第二块是L4-L7 的有状态检查。有状态防火墙、深度包检测、主机内省,这三样传统上都在主机里做。挪到卡上之后,规则匹配在硬件流水线里完成,官方给出的对比口径是下一代有状态防火墙可达 150 倍效率提升——这个数字要理解成「同样的策略规模下主机核占用接近零」,而不是「防火墙快 150 倍」。
第三块是密码学加速。传输中数据加密、静态数据加密、公钥运算加速三件事都有专门引擎,官方口径 100Gbps IPsec。做全链路加密方案时,这个数字决定你能不能在不开主机核的情况下把东西向流量全部加密。
第四块是可编程与隔离。策略逻辑可以用 P4 之类的语言描述,算法可替换;同时安全控制面和主机之间是硬隔离的,主机侧看不到也改不了。
4.2 一条微隔离策略的落地形态
策略怎么写、怎么下发,是方案能不能被别人接手的关键。用声明式的方式描述策略,再翻译成 DPU 侧的规则表,比直接在卡上敲命令可维护得多。
# dpu-security-policy.yaml # 描述 web 层到数据层的东西向访问控制,附带内容检查 policy: name: web-to-db-isolation direction: ingress # 作用在进入 DPU 的方向,即从网络侧进来 priority: 100 # 数值越小优先级越高,同层策略靠这个排序 match: src_cidr: 10.20.1.0/24 # web 层网段 dst_cidr: 10.20.9.0/24 # 数据层网段 protocol: tcp dst_port: 3306 # 只放行数据库端口,其余默认拒绝 action: verdict: allow log: true # 命中记录送遥测,未命中也要记,否则等于没有可观测性 inspect: dpi: true # 开启深度包检测 regex_set: pii-patterns-v3 # 内容匹配规则集,走正则引擎卸载 max_bytes: 65536 # 单流检查上限,超过后只做流级判定,控制卡上负载 ratelimit: pps: 200000 # 单策略包速率上限,防止策略表被刷爆几个参数值得单独解释。priority是策略排序的依据,微隔离策略多了以后一定会出现规则交叉,靠优先级而不是靠书写顺序来定胜负,后期排查冲突会轻松很多。max_bytes是个容易被忽略的保护项,深度包检测如果对每条流的全部内容做匹配,正则引擎会被长连接拖垮,设一个检查上限、超限后降级为流级判定,是实战里的常规做法。ratelimit同理,策略表本身也需要防刷。
下发之后要有验证手段。我一般会做三件事:故意用一个不在允许网段内的地址去连,确认被丢弃;用允许网段内的地址连,确认通;再发一个带特征字符串的请求,确认 DPI 引擎命中并产生日志。三步都过,才算这条策略真的生效,而不是「配置写进去了」。
4.3 安全能力与性能的取舍点
把安全全部下沉听起来很美,但方案里必须承认代价。加速引擎是有吞吐上限的:加解密 100Gbps、正则 50Gbps、视频 100Gbps,这些数字是各自引擎独立跑满时的值,同时开启时会互相争抢。如果业务要求全流量加密 + 全流量 DPI + 全流量防火墙,那总吞吐一定会低于裸转发。
做方案时我的处理办法是分级。核心业务流量走全量检查,测试和开发环境只做流级策略不做内容检查,备份流量只加密不检查。分级的依据写进方案文档,答辩或者评审时能解释清楚「为什么这里不做到 100%」,比含糊承诺「全部都加速」可信得多。
另一个取舍点是策略规模。规则条数越多,表项占用越大,查找时延越高。一般建议单卡策略表控制在几千条量级,再多就要考虑做聚合或者分层查找。这个数字不是硬指标,跟规则的具体形态强相关,但方案里得有个量级概念,否则后期扩容会失控。
5. 避坑与常见问题:五类最容易翻车的现场
5.1 上线前的三类硬伤
第一类:主机看到两个网口,流量走错口。
现象是主机上执行ip link看到多个网络设备,配了地址的那个口不通,没配地址的反而是管理口在跑流量,业务时通时断。
原因通常是把 DPU 的带外管理口和业务口搞混了。1GbE 那个口是给 Arm 系统做带外管理用的,不进业务数据面;业务面走的是 200G 或双 100G 的端口。有些机型在 BIOS 里还会把某个口默认设成 PXE 启动口,装完系统后这个设置仍然生效,导致默认路由指错。
解决办法是上架前就画一张口位对照表,标注每个物理口的用途、所属网段和是否允许跑业务,然后写进交付脚本里做自动校验。我现在的习惯是装机脚本第一步就打印所有网口的 MAC 和链路状态,比对清单,不一致直接停,不往下走。
第二类:PCIe 拆分不匹配,卡只认到一半 lane。
现象是链路协商出来是 x8 而不是 x16,带宽只有预期的一半,压测怎么调都上不去。
原因是卡支持 16 lane 可拆分,但主机 BIOS 里的 PCIe bifurcation 没配对模式。拆分是按插槽配置的,配成 x8x8 的时候插一张需要 x16 的卡,就只能协商到 x8。存储型节点尤其容易踩,因为还要给本地 NVMe 留 lane。
解决办法是先定卡的模式(End Point 还是 Root Complex),再回推需要的拆分方案,把这个配置写进机型模板,别指望每台机器现场手动设。装机前用lspci -vv看 LnkCap 和 LnkSta 两行,宽度和速率对不上就先解决 BIOS,别急着上业务。
第三类:固件升级顺序搞错,卡变砖。
现象是升级过程中断,重启后卡上 Arm 系统起不来,主机侧设备直接消失。
原因是这类卡上有多个可升级组件:网络固件、Arm 侧引导、Arm 侧系统镜像,升级有先后依赖。跳过中间步骤或者中途断电,就可能出现引导和固件版本不匹配。
解决办法是升级前先读一次当前版本、记下来,按厂商给定的顺序逐步升,每步完成都校验一次版本号。带外管理口在这时候是后悔药——卡上系统起不来,还能从 1GbE 口进去做恢复。所以那条带外链路线在上架时必须接好、地址必须记录在案,别等出事才去翻机柜。
5.2 运行期的两类性能陷阱
第四类:把 DPU 当纯网卡用,加速引擎全程空转。
现象是业务跑起来了,但主机 CPU 占用和换卡前几乎没区别,团队开始怀疑「这东西是不是没效果」。
原因是只用了 SR-IOV 做网口直通,没有启用策略卸载和存储卸载。数据包是绕过内核了,但隧道封装、规则匹配、块设备映射还是没人接管,等于只是换了一张更贵的网卡。
解决办法是逐项确认卸载是否真的开了:网络侧看 representor 口是否创建、流表是否有命中计数;存储侧看 SNAP 服务是否在跑、主机侧那块盘是不是真的来自远端。判断标准很朴素——如果主机 CPU 里的软中断和存储客户端进程还在吃核,就是没卸载干净。压测报告里必须带上「主机 CPU 释放率」这个指标,没有这个数字,整套方案的价值就讲不清。
第五类:压测口径不对,单流打不满带宽。
现象是标称 200Gbps,实测只有 20 到 30Gbps,换了几套工具都一样。
原因是单条 TCP 流受限于接收窗口和 CPU 单核处理能力,很难打满高带宽链路。这不是 DPU 的问题,是压测方法的问题。另一个常见错误是忘看卡上 Arm 核的利用率,隧道封装和策略匹配都在那儿跑,那 8 个核打满了,转发自然上不去。
解决办法是固定一套压测口径并写进方案:多流并发、明确报文大小分布、明确连接数、同时采集主机侧和卡侧两份 CPU 数据。我一般会准备小包(64B)、混合包、大包(1500B)三组数据,因为小包看 PPS 和策略查找性能,大包看带宽,混合包才接近真实业务。只用一组数据下的结论,答辩时很容易被问穿。
6. 验收与答辩:用四组数据把 DPU 的收益讲清楚
6.1 验收矩阵与压测口径
验收这件事,关键不在于跑分高,而在于每一组数据都能回答一个具体质疑。我一般按四组组织,每组对应一个评审时必然被问到的问题。
| 数据组 | 采什么 | 回答什么问题 | 采集位置 |
|---|---|---|---|
| 转发性能 | 带宽、PPS、时延,分 64B/混合/1500B | 能不能扛住东西向峰值 | 主机侧 + 卡侧 |
| 主机释放率 | 软中断、系统态 CPU、存储客户端占用 | 换卡到底省了多少核 | 主机侧 |
| 存储指标 | 4K 随机 IOPS、平均时延、P99 时延 | 远端盘能不能当本地盘用 | 主机侧 + 存储侧 |
| 安全开销 | 开策略前后的吞吐衰减比例 | 安全下沉的代价有多大 | 卡侧 |
第一组和第二组必须同时采,因为单独看带宽没有意义——如果带宽上去了但主机 CPU 没降,说明卸载没生效,只是换了张更快的卡。第三组里 P99 时延比平均时延重要得多,远端盘被当成本地盘用的时候,业务对尾延迟极其敏感,平均 200 微秒、P99 到 20 毫秒的盘,数据库一定出问题。第四组是很多人会漏掉的,评审时被问到「全量加密之后还能跑多少」如果答不上来,前面三组数据都会被打折扣。
压测报告里我建议附一张「卸载开关对照表」:关掉卸载、只开网络卸载、网络加存储卸载、全开,四行数据放在一起,收益曲线一目了然。这张表比任何文字描述都有说服力,也顺便证明了每个引擎都是真的在工作,不是配了没生效。
6.2 答辩时最容易被追问的三个点
第一个是**「这和智能网卡有什么区别」**。回答不要陷入参数对比,抓住一条:智能网卡是卸载固定功能,功能改一次要等一版固件;DPU 上跑的是你自己的程序,有新协议、新策略需求时改的是应用代码,走的是常规软件发布流程。这条差异在长期运维成本上的体现,比任何单项性能数字都重要。
第二个是**「成本怎么算」**。别只算卡的价钱,要算「卡价 ÷ 释放出的核数」和「卡价 ÷ 省下的独立存储网关数量」。官方材料里提到单卡等效替代上百个 x86 核,这个口径可以引用但要标注来源,同时给出你自己实测的释放核数,两个数字放在一起,可信度完全不一样。
第三个是**「卡挂了业务怎么办」**。这是最尖锐的问题,必须正面回答。思路是分层:管理面双卡冗余或者带外可恢复;数据面做多路径,一张卡的存储路径断了切到另一张;策略面在卡不可用时降级到主机侧的兜底规则,宁可性能掉也不断业务。整套方案里如果没有降级路径的设计,评审基本过不了。
最后说一个我自己的教训。早些年做类似方案,我把所有精力放在压测数字上,报告写得漂亮,结果交付时被运维问了一句「这张卡的带外口地址记在哪」,当场答不上来。后来那批机器有一次升级失败,三个人在机柜前翻了两个小时才找到管理地址。
从那以后我每次做硬件方案,都强制在第一页放一张「物理口与地址对照表」,把每个口的用途、网段、账号归属写全,跟着方案一起归档。这件事跟性能一点关系都没有,但它决定了出问题时你能不能十分钟内恢复。希望帮到你。
本文还有配套的精品资源,点击获取