资讯动态

从CPU瓶颈到无损网络:FPGA智能网卡如何重塑数据中心数据面

发布时间:2026/10/16 2:16:01 来源:尧图企业网站定制
几个月前我调一个分布式存储集群单看CPU使用率只有百分之十几可业务就是跑不满带宽。抓包一看网卡中断几乎全打在一个核上软中断和协议栈处理直接把那个核压垮了其他核想帮忙也插不上手。换了一块支持多队列的网卡缓解了一些可数据一上来还是扛不住。后来我们把存储报文处理的核心逻辑从CPU挪到智能网卡上问题才算真正解决。这篇文章不打算讲太多概念层面的东西就围绕我最近折腾的FPGA智能网卡、鸣镝这类产品化网卡以及数据中心的RDMA无损网络聊聊它们到底解决了什么问题又该怎么选型。1. 智能网卡到底解决了什么问题从一次CPU被打满的排障说起1.1 传统网卡的工作模式为什么开始撑不住传统网卡的活儿其实很单一收包的时候把数据通过DMA搬进内存然后发中断通知CPU“包到了”发包的时候从内存把数据搬出去按MAC地址发到链路上。看起来简单可问题就出在收包之后的那一长串流程上——校验和、协议解析、路由查询、Netfilter钩子、协议栈处理、socket队列再到用户态拷贝全套下来全是CPU在干活。25G时代这种模式还勉强能撑到了100G就彻底绷不住了。咱们可以粗略算一笔账100Gbps线速下如果全是64字节小包大约每秒要处理1.48亿个包。一颗主流服务器CPU跑到3GHz单核每秒大概有30亿个时钟周期摊到每个包上只有20个周期左右。可是一个DMA描述符处理加校验都不止20个周期更别提后面还有一长串协议栈逻辑。换句话说一个核早就被数据面吃干榨净了。虚拟化场景更严重。虚拟机的网络不是直接怼到物理网卡上的中间还隔着一层虚拟交换机。每个包从虚拟机出来要先经虚拟交换机做转发决策、查安全组规则、做VXLAN封装然后才从物理口出去。这一套操作比物理机收包还重所有开销都实打实摊在宿主机CPU上。我们当时那个存储集群就是这种状态存储节点之间跑RDMA协议中断处理不均匀某一个核被打满整个集群的吞吐就卡在那一两个核上。1.2 卸载的本质把“数据搬运和协议处理”从CPU手里拿走智能网卡的思路说起来特别朴素既然CPU干数据面不划算那就把这些重复性的、固定模式的活儿放到网卡上干。网卡上原本就有DMA引擎现在再加上硬件解析、流表匹配、封装解封装、拥塞控制、加密卸载这些模块CPU只负责下发规则和收控制面消息。这就是“卸载”的核心逻辑。不过这中间有个易混淆的概念不是所有卸载都叫智能网卡。普通网卡也有校验和卸载、TSO/GRO这些功能但它们只是把某个固定操作微加速规则和逻辑都焊死在芯片里。智能网卡的区别在于可编程性——你可以定义新的转发规则、修改协议头处理流程、加载新的拥塞控制算法。从这个角度智能网卡更像是一个放在网卡位置上的专用处理系统而不只是一个I/O设备。如果用快递来打比方传统网卡相当于每个快递员收发件时都要自己查地图、手动填面单、逐个绕路配送智能网卡则相当于一个分拣中心快递一进来自动扫描、按规则分拣、规划路线还能随时更新分拣规则。CPU从“亲手送快递”变成“制定规则、处理异常件”效率自然是另一个量级。现在市面上的智能网卡方案大概分三类一类是固定加速的ASIC网卡把几类热门卸载做成硬件逻辑性能功耗都很好但不能改逻辑一类是FPGA智能网卡逻辑可以反复配置适合还没完全定型的场景还有一类是带多核CPU的DPU网卡能跑完整的控制面协议栈基本就是一台小服务器挂在PCIe槽上。三类各有各的舒服区后面会专门算账。2. FPGA智能网卡为什么说网络处理天生适合“可重写的硬件”2.1 FPGA的流水线结构与包处理天然匹配好多朋友一听到FPGA就发怵觉得那是硬件工程师的地盘。实际上从网络从业者的角度看把FPGA理解成一个可以反复改接线的大规模并行逻辑阵列就行。它最核心的优势不是某个单独模块跑得快而是整条数据通路可以做到所有环节同时工作——包从进去那一刻开始解析、查表、转发、封装、发送就是在一条流水线上并行的。网络包处理恰恰就是这种高度流水化的计算。一个包进来先查协议类型再提取五元组然后匹配流表按规则做QoS和封装最后从出口发出去。每一步都依赖上一步的结果但不同包之间完全独立。这种场景CPU处理起来效率很低因为CPU是“取指—译码—执行”的串行模型一个核同时在跑的上下文也就那么几个还得不停做分支预测。FPGA则可以把流水线的每一级做成独立硬件上一级还没算完下一级已经开始处理前一帧的尾部了。我在实际调测里的感受是FPGA网卡在处理64字节小包时的延迟稳定性比同级别通用CPU方案要稳得多延迟抖动基本可以忽略。2.2 FPGA网卡上真正值钱的几个加速模块一块FPGA智能网卡上真正承担业务的其实是下面这几个模块可编程解析器支持自定义报文格式不只是标准以太网/IP/TCP还能直接解析RoCE、NVMe-oF这类特定协议字段。这是相比固定ASIC最大的自由度。多级流表匹配用哈希、基于块内存的匹配逻辑做五元组/连接级别的查表。按精确匹配、最长前缀匹配分级规则变更是下发到硬件刷新不用动数据通路。流调度器按优先级、队列、流的速率做整形和拥避。无损网络的优先级流控参数也是在这里生效。线速加密和摘要IPsec、MACsec的加解密、完整性校验能卸到FPGA逻辑里省掉CPU的加密开销。硬件时间戳在数据通路里直接给每个包盖上纳秒级时间戳这个对网络监控和延迟测量特别有用。我自己刚接触时最直观的感受是FPGA网卡的“可编程”不像CPU软件那样写个函数就能改逻辑而是通过加载不同的比特流或规则表来生效。好在鸣镝这类产品化网卡已经把常用的卸载功能封装好了我们不需要真去写Verilog按它提供的接口下发规则表就行FPGA的灵活性和用户的开发成本之间取了一个平衡。2.3 三种智能网卡方案到底怎么选看灵活性也看总成本经常有朋友问我FPGA网卡是不是一定比ASIC网卡好真不是。选型本质上是拿灵活性换功耗和成本。我习惯用下面这张表来说事维度FPGA智能网卡ASIC固定功能网卡多核SoC DPU可编程性逻辑级可重写规则和流程都能改只有参数能调逻辑流片后定型软件可编程生态最丰富数据面性能高延迟确定性强最高功耗最优取决于核数和加速器配合开发周期硬件迭代一次几周流片周期数月到一年软件开发迭代最快单卡成本较高适合批量但非海量大规模量产单卡成本低中高CPU核本身也值钱适用场景协议还在演进、需要快速跟随标准成熟、量非常大的场景需要复杂控制面逻辑的卸载说实话数据中心无损网络这块目前正好处在协议参数还在调整的阶段。DCQCN的参数怎么配、PFC是否全局开启、ECN阈值设多少不同厂商都有各自的推荐值。ASE方案一旦流片这些细节基本就固定了FPGA方案则可以随着算法迭代重新配置这是它现在被重视的很关键的原因。当然如果哪天无损网络和智能网卡的功能完全标准化了ASIC的优势会重新凸显。3. 鸣镝这类FPGA智能网卡产品化之后业务端拿到的是什么3.1 鸣镝系列网卡在产品层面的几个看点鸣镝这个系列最近在圈子里讨论比较多按公开资料来看它属于典型的FPGA智能网卡产品化路线。硬件上通常是PCIe 4.0或5.0形态双25G或双100G端口板载大容量内存用来做流表和缓冲队列FPGA逻辑里集成了包解析、流表匹配、隧道封装、RDMA和拥塞控制相关的硬件模块。相比一块裸FPGA开发板鸣镝这类产品的价值在“打包好了”。网卡管理工具、驱动、固件升级机制、调试接口都是现成的用户拿到手不是面对一堆逻辑代码而是通过一套协议直接下发流表规则、配置QoS、查看统计计数。网络工程师可以用自己熟悉的那套“下发规则—看计数器—调参数”的方法来使用它而不需要懂硬件描述语言。从卸载范围看鸣镝覆盖了云数据中心最常见的那几类卸载OVS流表卸载、VXLAN/GRE封装卸载以及RoCEv2所需的ECN识别和流控配合。这几个点正好是纯CPU方案最吃力的地方也是无损网络落地最核心的环节。3.2 实测下来感受最明显的三个场景我自己目前在模拟环境里调过类似定位的FPGA智能网卡三个场景印象比较深。第一个是云主机网络卸载。没卸载之前虚拟交换机每转发一个包都要CPU参与规则多了之后CPU占用像坐过山车。把OVS流表下发到网卡后数据面直接走硬件匹配转发宿主机CPU占用立刻掉了一大截。最让我意外的是规则变更时的表现流表下发到FPGA是增量刷新不是把整张表重来一遍业务流量几乎无感。第二个是存储和AI训练的RoCE场景。分布式存储节点之间跑RDMA时一个很头疼的问题是PFC和ECN参数配不好就会掉速。FPGA网卡上这些参数可以直接通过寄存器调而且ECN标记是在数据路径里由硬件判断的不像软件方案那样需要靠采样来近似。调完之后AI训练这类长尾通信的尾延迟明显变得稳定。第三个场景可能很多人没意识到就是网络可视化和安全过滤。FPGA可以在线速下做包头和负载特征匹配把特定流量镜像到分析端或者在硬件层直接丢掉恶意报文。这在CPU方案里几乎不可能做到线速但FPGA天然就是干这个的。3.3 产品化网卡同样要付出的隐性代价用了几周之后我也得说实话产品化FPGA网卡不是零成本方案。首先是驱动和固件的配套。FPGA逻辑越灵活驱动和固件的版本匹配就越敏感。我们遇到过升级固件后旧驱动异常业务断连的情况最后只能按“固件和驱动必须同批验证”的规矩来管理。其次是管理接口的成熟度。产品化网卡的管理工具通常能覆盖绝大多数需求但真要到做深度调试的时候还是得翻厂商提供的寄存器级文档。再有一个容易被忽略的功耗和散热。FPGA的逻辑规模上去了功耗比同端口的固定功能网卡高不少。单台服务器如果插两块供电和散热就得提前做评估。这些成本不会出现在产品宣传页上但会在你部署的时候一点一点“找补”回来。4. 无损网络的真相PFC、ECN与智能网卡之间其实是三方博弈4.1 RDMA为什么必须追求“无损”先从一个基础问题说起RDMA为什么对丢包这么敏感传统TCP丢包后走重传、拥塞窗口退避虽然延迟升高但总归能恢复。而RDMA为了降低延迟把数据通路上的重传和拥塞处理减到最轻很多实现甚至依赖无损网络来保证不丢包。一旦某个包丢了接收端迟迟等不到数据整个传输就可能等上很长时间才触发超时代价是微秒级的性能瞬间掉到毫秒级差距上千倍。所以无损网络不是一个“金字招牌”它是RDMA能够成立的前提。为了让网络不丢包传统思路就是用流控把压力往上游推推到源头让它降速。这听起来很合理但真做起来全是坑。4.2 PFC看似简单的逐跳反压挖了哪些坑PFC优先级流控的原理就是每跳交换机和网卡都监控自己队列的长度超过阈值就向上一跳发暂停帧让对端暂时停发该优先级的流量。一层一层推上去最后让发送端降速。这个机制本身没有大问题坑全在工程实现里。最典型的是队头阻塞某个拥塞队列触发了反压暂停帧会把同一优先级上的所有流都挡在后面哪怕这些流根本不经过拥塞点。我见过一台混跑AI训练和普通业务的交换机上一条训练流的突发流量把同优先级里所有流全部堵死连监控流量都跟着遭殃。PFC风暴更是运维噩梦配置里任何一个环节出错暂停帧就会在环网里循环传播整个机房的该优先级流量全部瘫痪排查难度极高。所以现在做无损网络的人对PFC基本是“能不开就不开必须开就限制范围”。把优先级流控当作最后一道防线而不是主要手段这个观念上的转变很重要。4.3 ECN和DCQCN则是更聪明的“有损折中”为了少依赖PFC现在无损网络的主流做法是端到端拥塞控制。核心思想是交换机不直接掐断流量而是在队列深度超过阈值时给报文打上ECN标记。接收端网卡收到带标记的报文后生成拥塞通知包发回给发送端发送端据此快速降速。这一套在RoCEv2里对应的就是DCQCN。算法细节当然比这段文字复杂得多什么时候标记、降速比例多大、什么时候升速、CNP包的生成频率怎么控制每个参数都会影响真实业务吞吐。这恰恰是FPGA智能网卡发挥价值的地方——ECN标记的识别需要在线速下做毫秒级的延迟都会影响算法效果而拥塞控制参数的调节则需要灵活因为算法还在持续演进。固定功能的ASIC在流片那一刻就把这些逻辑定型了而FPGA的逻辑可以重新配置。我们的实际感受是这块的可迭代性比纸面上的性能参数更重要因为你永远不知道下一次算法优化会改成什么样。4.4 智能网卡在无损网络里实际承担的活把角色拆开看智能网卡在无损网络里承担的事情有三块流控参数的硬件卸载PFC的暂停阈值、ECN标记阈值、速率限制器全部由网卡硬件执行CPU只负责初始化和动态调整。参数下发之后即使CPU被业务打满流控依然有效。线速ECN识别和标记交换机打上的ECN标记接收端网卡要在收包的第一时间识别并决定是否生成CNP。这个操作做慢了拥塞窗口就调整晚了。PFC统计与死锁检测网卡维护每个优先级的暂停帧收发统计出现异常时及时上报。这些计数器是排查PFC风暴最重要的依据。鸣镝这类FPGA网卡在无损网络里的价值就在于它开箱就带这些硬件逻辑同时保留了“未来算法升级时重新配置逻辑”的可能。这比单纯买一块固定功能的RoCE网卡要稳妥得多。用我们团队内部的话来说无损网络不是“配置”出来的一次性结果而是需要持续调优和演进的动态过程。5. 选型与落地到底什么样的组合才是“最优解”5.1 按业务场景对号入座别问“哪个最好”要问“哪个适合”经常有人问“买FPGA智能网卡是不是一步到位”。我的回答是没有一步到位只有场景适配。下面是我自己整理的一个粗粒度选型表业务场景核心诉求推荐方案理由HPC高性能计算超低延迟、固定路径通信成熟RoCE网卡优先ASIC通信模式固定、追求极致性能功耗AI训练集群长尾流量、突发严重、需持续调优FPGA智能网卡支持ECN参数自定义拥塞算法还在演进需要灵活迭代分布式存储吞吐优先数据面卸载FPGA智能网卡RoCEv2卸载存储协议卸载收益最直接云主机大规模虚拟化OVS卸载、多租户隔离带OVS卸载的智能网卡流表频繁变化需要可编程匹配通用Web/业务成本敏感、流量相对平稳固定功能网卡CPU调优FC网卡性价比最优这个表不是绝对的但能反映出核心逻辑流量模式越稳定、协议越标准越应该选ASIC固定功能流量突发越强、协议越不成熟越需要FPGA这类可编程方案。5.2 成本账智能网卡的钱花得值不值咱们可以算一笔很粗略的账。一台双路服务器如果要支撑100G网络并做OVS转发和RoCE处理纯CPU方案往往要预留4到6个物理核给网络数据面。一颗28核的CPU那相当于损失了七分之一左右的算力。如果跑的是云主机业务这些核占着的成本一直存在很浪费。智能网卡把数据面卸载之后这几个核可以释放跑业务虚拟机。按一台服务器的生命周期和核数来折算一块智能网卡多花的几万元成本通常能在一年左右从业务部署密度提升上赚回来这笔账在测试环境里跑一遍就能算清楚。当然如果要跑的场景只是少量收发包智能网卡的优势就体现不出来这时候也没必要上。5.3 部署和调优时容易踩的坑提前帮你排掉最后说几个我们自己踩过、周边同行也常踩的坑。第一驱动和固件的版本配套关系一定要固化。FPGA网卡逻辑可更新固件升级后驱动不匹配会有兼容性问题升级前必须看官方配套表升级后立刻做回归测试。我们现在的规矩是生产环境能不动固件就不动。第二BIOS里的PCIe配置别漏。智能网卡要发挥性能PCIe链路宽度和速率必须配够SR-IOV、IOMMU相关选项也要按产品手册打开。曾经遇到性能只有预期一半的情况查了半天最后发现PCIe被BIOS自动协商到了x4不是x16。第三PFC和ECN参数不要一把梭。无损网络的配置要按业务流量模型来定不同优先级配不同的缓冲策略PFC能不开就不开优先级范围越小越好。调完一定要跑一轮长时压测看PFC暂停帧计数有没有异常增长我见过不少“配置看着合理、跑了半小时就开始丢包”的案例。最后我直接分享一点自己的体会。我一开始也怀疑智能网卡是不是就是高级一点的卸载卡真正调完RDMA和PFC之后才明白在无损网络这件事上网卡端的灵活性和可编程能力比想象中重要。FPGA方案看起来功耗高一点、门槛也高一点但遇到PFC风暴、新拥塞算法这类问题你会庆幸自己选了一块能改逻辑的卡。如果你正在折腾数据中心网络建议先跑通一套标准的流量模型再考虑上智能网卡如果预算允许优先选支持RoCEv2卸载和流表可编程的方案。这个方向变化很快早一点自己动手试试比看多少文章都有用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑