ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

安全设备数据面加速三路线:CPU+DPDK、FPGA与NP的选型对比

安全设备数据面加速三路线:CPU+DPDK、FPGA与NP的选型对比 网络安全设备的数据面处理能力这几年一直被当成衡量产品档次的硬指标。早年做千兆防火墙一颗多核Xeon跑Linux内核协议栈就能应付现在客户开口就是40G、100G线速深度检测还要叠加加密流量识别、威胁情报匹配这些重负载业务通用CPU主频和核心数堆出来的算力很快就撞上功耗和访存带宽的天花板。于是CPUDPDK、FPGA、NP这三条技术路线成了每一家做安全设备的团队绕不开的选型题。这篇文章我会把三条路线从原理到实战完整捋一遍重点讲我在真实项目里怎么判断、怎么选、怎么用也会把踩过的坑一并交代清楚。适合正在做安全设备硬件选型的工程师、准备从软件转发转向硬件加速的同行以及被厂商宣传搞得一头雾水的甲方技术负责人。先聊聊为什么DPDK能在过去几年成为安全设备的事实标准。1. 为什么DPDK过去几年是安全设备的事实标准DPDK全称Data Plane Development Kit是一套用于高速数据包处理的开源库和驱动集合。它做的事情用大白话讲就是把数据包从网卡到应用层的路径“捋直”。传统的内核协议栈转发路径数据包的旅程是这样的网卡收到包触发硬中断CPU暂停当前工作去处理中断把数据从网卡拷贝到内核缓冲区内核协议栈做各种校验、路由查找再拷贝到应用层套接字缓冲区应用再通过系统调用读出来。这一路下来每次拷贝都有开销每次系统调用都要做用户态和内核态的上下文切换缓存还容易失效。吞吐一高CPU大量时间耗在“折腾数据”上而不是真正“处理数据”。DPDK的核心思路是绕开内核。它利用UIO或VFIO机制让网卡直接把数据包DMA到用户态预先分配好的大页内存里应用层通过轮询PMDPoll Mode Driver驱动不间断地从队列里把数据包捞出来。整个过程没有中断、没有拷贝、没有系统调用数据路径被压缩到极短。再配合多队列网卡把CPU多个核心分别绑定到不同队列上并行处理转发能力一下子就能从几万pps拉到几百万甚至上千万pps。我第一次接触DPDK是在做一款万兆防火墙原型的时候。当时用普通的Linux netfilter框架跑单核顶多几十万pps万兆线上随便一个路由扫描就能让设备CPU飙到百分百。后来改用DPDK同样的硬件四核跑线性转发直接到了800万pps这个差距是决定性的。DPDK在安全设备里的生态位不仅限于转发更关键的是它留出了完整的可编程空间。流表查找、会话管理、应用识别、IPS规则匹配这些逻辑都是C语言代码想怎么改就怎么改。对做安全设备的团队来说这种灵活性太重要了因为安全策略本来就是千变万化的每个客户的需求都不一样。不过DPDK也不是没有代价。它把CPU核心几乎全部吃满轮询模式让CPU始终处于高功耗状态即使流量很小也不会降频省电。如果同机还要做SSL卸载、加解密这类CPU密集型任务就得合理规划核的分配数据面核干转发的活控制面核跑管理协议加密核跑硬件卸载引擎。这套“异步转发分区调度”的设计成为后面几年安全设备软件架构的主流。2. CPUDPDK的演进逻辑以及藏在这条路线里的天花板CPUDPDK能撑多久取决于三个硬指标缓存命中率、DDR带宽、PCIe带宽。缓存是CPU最贵的资源。流表、会话表、策略规则这些热数据如果能保证在L3缓存里命中80%以上转发性能会非常好看。数据量一旦超过缓存容量频繁访问DDR延迟直接跳一个数量级。所以做安全设备的工程团队一般都会把会话表的桶大小、超时时间、老化策略调得比较激进目的就是让热数据尽量留在缓存里。DDR带宽是第二个瓶颈。我们算一笔账假设一台设备要做40Gbps的深度检测每个报文平均按512字节计算每秒就是接近一亿个报文。每个报文平均需要几次内存访问描述符读、包头读、流表查找、策略匹配、会话更新、封装修改、描述符写、报文写DDR访问量轻松上几百GB/s。单条DDR4通道的带宽只有25.6GB/s即便八通道也就200GB/s上下。这个账一算就知道纯靠CPU做40G之上的深度处理不是不能做而是硬件成本非常难看。PCIe带宽决定网卡和CPU之间的吞吐上限。PCIe 3.0 x16的单向带宽约16GB/sPCIe 4.0 x16约32GB/s。多张100G网卡插上去总线本身就容易先成为瓶颈。我见过不少项目方案选型时只算了网卡端口速率没算PCIe链路结果到了整机联调发现总线先饱和了只能砍业务功能非常被动。这里要说句得罪人的话网上很多转发性能数据是“线性转发”数据——把一个包从一个口搬到另一个口不查表不做业务。这种数字对安全设备参考意义很有限。真实场景里一次业务转发要完成至少8次内存访问性能往往要打个对折再打对折。如果只是转发瓶颈DPDK还能靠大页内存、NUMA绑定、CPU指令集优化比如AVX512做报文解析来挖掘潜力。但安全设备真正的痛点是“深度”——深度包检测、深度协议解析、加密流量检测。这些业务的特点是逻辑复杂、分支多、依赖大量上下文状态CPU跑起来虽然灵活但单核算力有限多核之间还要做会话一致性同步。这时候再去压CPU的频率早就撞上了功耗墙——一个18核的Xeon跑满光CPU功耗就300W以上整机散热、电源、机房电费都是成本。所以从产业节奏上看CPUDPDK方案在40G以下的场景里目前依然能打是性价比和时间成本综合最优的选择。但想冲100G以上的线速深度处理或者客户对单设备功耗有严格限制就开始要看FPGA和NP了。3. FPGA为什么在安全硬件里持续升温以及它的代价FPGAField-Programmable Gate Array本质上是一大片可以被反复配置的逻辑单元阵列。它不像CPU那样按照指令一条条执行而是把数据通路“烧”进硬件里用逻辑门并行处理数据。FPGA在安全设备里的核心优势有三个。第一是确定性延迟。CPU的转发延迟是毫秒级的因为要经历多级调度和缓存命中的不确定性FPGA只要把流水线设计好每个报文从入口到出口的延迟可以精确到纳秒级而且不管流量怎么波动延迟都很稳定。这对高频交易类客户、需要低抖动出口链路的场景都是硬性要求。第二是并行处理能力。一片中等规模的FPGA比如Xilinx UltraScale系列有上百万个逻辑单元能把报文解析、流表查找、ACL匹配、IPSec加解密等大量数据面工作真正并行执行。通道之间互不干扰数据面吞吐可以去到几百Gbps——不是标称值是可以实测出来的。不少做运营商级防火墙的团队就是靠FPGA把40G深度检测的功耗压在350W以内的。第三是卸载与融合。FPGA不仅能做数据面解析与转发还能把加解密AES、RSA、SM系列算法直接硬化到片内DSP和专用逻辑上。CPUDPDK方案里加解密通常依赖Intel QAT之类的专用卸载卡而FPGA可以直接把这项功能合并掉减少一类板卡降低整机功耗和成本。不过FPGA的坑和门槛同样不少我逐个聊。FPGA开发的工具链是Intel和AMD/Xilinx两大厂商的EDA套件学习曲线比软件开发陡峭得多。安全设备最常做的报文解析和内容匹配在C语言里就是几十行循环在FPGA里要拆解成状态机、并行比较器、哈希映射、FIFO的层层拼接。一个成熟的数据面流水线从MAC到解析到表项查找到策略动作需要工程师按周甚至按月来打磨跟DPDK下按天交付功能的节奏完全是两回事。调试更是让人头秃。CPU程序出问题可以加日志、打断点、单步跟踪FPGA的片上信号只能靠逻辑分析仪IP核来抓还得把信号引出来到引脚上用专门的调试工具看。每做一次修改综合布局布线都要跑半小时到几个小时迭代周期非常长。我所在团队做过一个统计DPDK方案下修一个数据面解析bug平均需要2小时FPGA方案下同类问题平均要1天到2天。FPGA的灵活性也有限制。CPU是“软件想怎么改就怎么改”而FPGA的硬件一旦烧录数据通路基本定死。如果客户突然提了个新协议解析需求而FPGA里没预留对应的处理模块就只能重新综合实现一版固件然后做回归测试这个周期经常按周计。所以做FPGA方案的产品线需求冻结和版本管理必须做得比纯软件方案严格得多。FPGA的成本结构也值得算清楚。单颗FPGA物料成本通常比一颗中高端CPU便宜但研发阶段的人力成本、EDA工具授权费用、高速PCB设计难度、信号完整性仿真验证成本全部摊进去之后一个FPGA数据面平台的研发投入往往是DPDK数据面平台的数倍。前端商务在报价的时候如果不把NRENon-Recurring Engineering算进去后面财务会非常难看。从应用场景来看FPGA最适合的是那些“规格稳定、性能要求高、量产后硬件不常变动”的产品线典型如运营商侧的企业级防火墙、抗DDoS设备的前端流量清洗板卡、IDC出口的安全网关。这类产品规格相对固定更新节奏是季度甚至年度级别FPGA能发挥高性能低功耗的优势。反过来如果产品定位是面向中长尾客户的灵活多功能网关需求三天两头变强行上FPGA就会发现固件版本管理会让你崩溃。4. NP——网络处理器的实用主义与存在感NPNetwork Processor网络处理器这条路线在安全硬件里的存在感比FPGA低但它在特定场景下依然有不可替代的位置。NP是一类专门针对网络数据包处理优化过的可编程处理器。和CPU相比它省掉了通用操作系统和通用指令集的包袱指令集里内置了大量网络操作原语。和FPGA相比它保留了指令编程的灵活性同时把常见功能解析、转发表查找、队列调度做成了硬件加速模块。简单说NP想要的是“FPGA的性能、CPU的编程体验”虽然两端都没完全做到极致但在某些领域确实是最务实的方案。历史上我接触最多的多核NP是Cavium Octeon系列后来被Marvell收购。它的长项是集成大量MIPS64核每个核都自带硬件加速器压缩解压、加解密、正则匹配引擎、流表查找协处理器。做安全设备的团队基于Octeon开发可以继续用C语言跑类DPDK的队列模型同时把这些加速器映射成软件库函数调用开发效率比FPGA高不少。从部署形态上看NP和DPDK的软件架构非常接近——同样有队列管理、同样的轮询驱动思路、同样的大页内存管理只是底层硬件资源换了一套。从这个角度讲如果一个团队之前用DPDK开发过产品迁移到NP平台的成本会比迁移到FPGA低很多数据面逻辑基本可以复用只需要把平台抽象层重写一遍。NP的局限性也很鲜明。第一它的可编程能力跟CPU完全没得比实际跑复杂的深度协议解析、基于机器学习的流量分类这类逻辑性能会明显不如同等主频的通用CPU——编译器优化和指令集通用性都差一截。第二NP产品的生命周期比较让人操心。这个市场盘子不大留给芯片厂的利润空间有限有些产品线被砍或者战略收缩后续芯片采购风险就会冒出来。第三NP生态里的第三方软件栈、开发工具链成熟度远不如CPU产业链遇到一个冷门bug论坛里基本找不到答案。所以在我的分类体系里NP适合的场景是产品量级上去了单设备需要40G到100G的线速转发业务逻辑又没有复杂到必须用CPU的程度开发团队暂时不想跳进FPGA的高研发成本里。这种情况下NP往往是“性能、研发成本、上市周期”三角平衡的最优解。网上有一个很形象的类比是DPPK方案像是开着SUV跑业务多功能、舒服但耗油FPGA像一辆F1赛车性能极强但车手和车队门槛都极高NP像一台通勤卡车载重和速度适合特定工况价值在于恰到好处。近两年还有一个趋势值得留意在高端设备里ARM架构CPU和FPGA/NP逐步走向“一片板上共存”的异构架构。控制面跑Linux用ARM核处理CLI、SNMP、日志这类管理业务数据面用FPGA或NP做高速转发与卸载。这种架构把管理面的复杂性和数据面的高性能做了彻底隔离是高端安全网关的主流走向。可以负责任地讲未来两三年里纯通用CPU做60G以上深度检测的商用设备会越来越少异构SoC是必然方向。5. 真实选型的判断框架以及我踩过的一些坑聊到这儿被问得最多的肯定是那具体到我的项目到底选哪条路线我的经验是选型不要先看技术先拉一张“需求清单”把话说清楚。下面是我常用的打分维度权重可以根据具体产品定位调整维度权重建议说明目标吞吐30%线速转发只转发不检测还是深度检测做IPS/DPI两者对算力需求差10倍业务变化频率20%需求是季度级迭代还是年度级固件升级变化越快越偏CPU/DPDK研发团队构成15%有没有能写RTL硬件描述语言的工程师FPGA团队不是招一个人就能建起来的也很少有团队能同时养熟两队人马单设备功耗与体积10%客户机房对功耗和机架单位有无硬性限制FPGA在这块的账很好算采购与供货风险15%芯片的供货周期、第二供应商备份、CPU/FPGA的禁运风险都要提前评估预算与NRE10%硬件研发的一次性投入和软件复用率。这一项经常被忽略我自己的实践里有一条很深的教训。有一年我们做一款面向中小企业的千兆下一代防火墙当时团队里FPGA能力和资源都很充足于是决定数据面直接上FPGA。结果产品上市后发现中小企业客户经常要求改策略、改协议识别规则这些需求在DPDK方案下两三天就能上线在FPGA方案下就要走固件发布流程一等就是两周以上。产线交付节奏完全被带崩了后来我们还是改回了CPUDPDK的方案。这个case给我最大的启发就是不要因为团队能力强就选一个超出产品定位的技术路线。技术上的“好”必须服务于产品定位上的“准”。反过来做运营商项目时需求相对标准化规格冻结早FPGA数据面的性能优势就能实打实兑现。我记得同一个40G吞吐的框式设备纯CPUDPDK方案实测功耗大约在700WFPGA方案功耗压到了350W以内客户验收时非常满意。功耗上的优势直接转化成了商务上的加分项。这个对比让我对“选型一定结合场景”这句话有了切身体会。还有一个容易踩的坑是“拿厂商的测试数据当产品指标”。无论DPDK的转发benchmark、FPGA的白皮书吞吐还是NP的Datasheet厂商给的通常是“最理想配置最短路径”下的数字。真实设备要跑业务逻辑、要做策略匹配、要处理攻击流量性能都会缩水。正确的做法是用自己产品的业务脚本、典型包长分布、协议组合在参考硬件上做PoC测出来的是什么选型就按什么算。关于包长分布多说一句安全设备最容易被打爆的就是64字节小包场景——这些包需要解析和查表的开销几乎和1400字节大包相同但数量却高出几十倍深度检测的吞吐往往在这里掉得最狠。所以PoC一定要把小包、混合包、全大包三组数据分开测。6. 几条具体的工程实践建议最后聊几条横向的工程建议不管最终选哪条路线都用得上。第一抽象平台层。无论底层是DPDK、FPGA还是NP都建议把数据面抽象成“收包—解析—查表—动作—发包”五个标准阶段每阶段定义好统一的中间表示格式比如统一的报文描述符结构体。这样底层硬件更换时上层业务代码不需要大改。我见过不少团队数据面逻辑和DPDK环、FPGA描述符、NP加速库耦合得死死的最后只能在一个平台上一条道走到黑非常被动。第二控制面和数据面严格分离。管理端口、CLI、SNMP、日志、配置下发放控制面所有业务流量走数据面。两边的CPU核心、内存区域、网络路径都要物理隔离。这样做的好处是数据面即使被攻击流量打满管理面依然可以登录设备排查问题。这已经是业内的基础共识了但仍有不少产品在初始设计时偷工减料后期被客户反复投诉。第三做性能回归测试要固定基准矩阵。硬件加速方案迭代慢、回归成本高所以每次固件或软件版本更新都建议跑一套固定的性能回归用例包括不同包长64B、256B、512B、1400B、不同协议组合TCP/UDP/ICMP/加密流量、不同会话数量级1万、100万、500万把数据记录下来存成基线。有了这套基线新版本发布时性能是否回退一目了然省去大量扯皮的环节。我见过不止一个项目因为漏了64字节小包的回归测试新版固件上线后小包吞吐暴跌40%现场直接翻车。这个矩阵的成本不高但能省掉的事故处理成本远超想象。说回技术路线本身。CPUDPDK、FPGA、NP这三条路线没有谁绝对碾压谁只有谁更适合你的产品定位和团队禀赋。DPDK胜在灵活性、生态和开发速度是绝大多数安全设备起步的最优解FPGA赢在高性能、低功耗和确定性延迟适合规格稳定的大流量场景NP则是在“想摆脱CPU瓶颈、又不想背FPGA研发包袱”的中间态里一个务实的存在。我个人的体会是做安全硬件选型永远先把“产品要给谁用、需求变化多快、量有多大”这三件事想清楚再谈技术优劣。技术团队容易陷入“手里有锤子看什么都是钉子”的惯性克制住这个惯性往往比掌握某种具体技术更难也更值钱。有条件的话建议你把需求清单拉出来在参考硬件上亲手跑一次PoC实际数据会比任何文章都更有说服力。
返回列表