ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

网络安全设备硬件加速选型:DPDK、FPGA与NP的工程权衡

网络安全设备硬件加速选型:DPDK、FPGA与NP的工程权衡 1. 100G安全网关的验收翻车DPDK优化到头之后的第一堵墙先说一段真实经历。去年给某个政企客户交付一台100G吞吐的下一代防火墙硬件方案是Xeon Gold 双口100G网卡 DPDK软件侧做了大量手工优化。结果在第三方测试机构跑满规则集大概5万条ACL 2万条IPsec隧道 开启IPS特征库的混合流量时整机吞吐跌到了37G。测试报告贴在客户会议室里领导脸色很难看。那一次之后我花了整整两周重新review整个转发路径最后不得不承认一个事实在规则数、会话数和流量特征都拉满的安全业务场景下CPUDPDK这条路已经快走到物理极限了。这也是今天想聊聊网络安全设备硬件架构演进的原因。从早年的纯CPU转发到中期的CPUDPDK收包框架再到现在的FPGA和NP网络处理器硬件卸载每一代架构的切换都不是拍脑袋而是被性能和业务需求一步步逼出来的。这篇文章不聊PPT上的理论就聊我在真实项目里看到的取舍、踩过的坑以及最终怎么在不同路径间做选择。1.1 DPDK究竟解决了什么问题先说DPDK。十年前大家还在用内核协议栈收包的时候单核收包性能大概只有1Gbps出头的水平数据从网卡到内核再到用户态中间经历了中断、拷贝、上下文切换大部分CPU时间都花在调度和复制上真正干活的资源少得可怜。DPDK的核心思路说穿了就三条用户态驱动绕过内核协议栈、轮询模式代替中断、大页内存减少TLB miss。再配合CPU亲和性绑定把网卡的RX/TX队列直接锁到固定核上做到极致的无锁化和零拷贝收包。这些东西到今天仍然是正确的也确实把收包和发包能力拉到了线速甚至以上。我早期优化转发性能的时候把DPDK的lcore配置、mempool大小、rxd/txd描述符数量反复调了一遍确实能从早期的10G跑到40G甚至更远。但问题恰恰在于网络安全设备不是纯粹的转发设备。1.2 真正卡住CPU方案的不是收包是安全查表和会话管理交换机只查MAC表和路由表查完直接扔出去每包处理时间极短。安全设备则完全相反一个报文进来要先做五元组流表匹配匹配不中要向CPU上送建连接连接的会话要维护状态、序列号、超时进去以后要跑ACL规则匹配可能是几万条带优先级的规则再跑DPI正则特征库做HTTP解码、协议识别、文件还原如果走了IPsec还要做加解密和抗重放校验。这条链路走完一个64字节报文的CPU耗时可以达到几百甚至上千个时钟周期。DPDK优化得再好它只解决了报文怎么从网卡到CPU手里的问题但**CPU拿到报文之后要算多久这块DPDK帮不上任何忙**。我在参数调整阶段实测过一个印象很深刻的数字关闭全部安全特性时这台设备线速转发其实能做到80G以上打开IPS特征库和全量ACL后单核每秒只能处理大约40万个并发会话的新建报文。这个数据说明转发本身不是瓶颈业务逻辑才是。1.3 NUMA、亲和力和PCIe宽度的真实工程细节这里插一段容易踩坑的工程细节。CPUDPDK方案要做到极致光绑定CPU亲和性是不够的必须把细节抠到内存通道层面。NUMA节点绑定100G网卡插在NUMA node 0的PCIe插槽上但你DPDK的lcore绑到了node 1那跨节点访问内存的延迟会直接让单包时延增加30%以上。必须把网卡、内存和业务CPU全部收敛到同一个NUMA域。PCIe通道带宽双口100G网卡需要PCIe Gen3 x16才能勉强不成为瓶颈如果插在x8的槽位上直接损失带宽上限是很常见的问题。大页内存DPDK的hugepage配置不光是数量问题1GB页和2MB页混用时mempool的分配策略会直接影响cache命中率。# 一个常见的DPDK启动参数注意 socket-mem 和 lcores 的绑定逻辑 ./build/app/dpdk-testpmd -l 0-3 -n 4 \ --socket-mem 1024,1024 --huge-dir /mnt/huge \ -a 0000:3b:00.0 -a 0000:3b:00.1 \ -- --nb-cores2 -i这些细节做完之后性能确实还能再往上挤一截但天花板还是很清晰单CPU所有核同时满载的时候安全查表的计算能力就到顶了。想继续扩容只有两条路堆更多的服务器成本和延迟都不可控或者把计算搬到专门的硬件上去。2. FPGA卸载的本质把安全查表变成硬件流水线第一次接触FPGA做报文处理是2017年前后当时团队里招了几位做RTL的工程师配合我们的软件团队做一款IPS设备的硬件加速板卡。方案是Xilinx UltraScale系列FPGA板卡上带了多通道QDR-IV SRAM和一个TCAM芯片通过PCIe Gen3 x8连接到主机CPU。2.1 硬件流水线为什么适合报文处理FPGA最强的点是并行流水线和确定性延迟。软件是一条流水线上一个人从头干到尾FPGA则是一条流水线上站了很多工人每个人只干一道工序。举个实际的例子软件做ACL匹配五万条规则逐条遍历最坏情况下要比较五万次FPGA里可以把规则做成多级hash索引加TCAM逐级匹配一级、两级最多三级查找就出结果。报文进来以后每个时钟周期都会有一个新报文进入流水线头部流水线的每一级同时在处理不同的报文整体吞吐不会因为单包处理复杂度高而掉下来。这就解释了为什么FPGA在线速小包处理上的表现能把CPU方案甩开几倍甚至十几倍。还有一个常被忽略的点就是确定性延迟。CPU跑业务逻辑会因为cache miss、中断、调度抖动产生微秒甚至毫秒级的延迟毛刺FPGA的流水线是硬件逻辑跑出来的同样配置下每包经过的延迟基本是恒定值。这对证券、运营商这类对抖动极其敏感的场景非常关键。2.2 安全功能到底哪些能上FPGA哪些不行安全设备的业务不像交换转发那么简单不是所有东西都能直接往FPGA里塞。我在实际项目里总结过一份可卸载和不可卸载的清单。适合卸载到FPGA的功能五元组/七元组精确匹配会话表的建立和老化逻辑ACL规则匹配尤其是可以组织成TCAM查找的精确规则固定偏移的特征匹配比如UDP端口、IP协议号、报文长度检测加解密AES-GCM这类算法FPGA里有硬核吞吐和时延都很漂亮隧道封装/解封装、分片重组中的确定性操作固定模式的DDoS攻击检测比如SYN Flood的报文计数、速率统计不适合或者很难卸载到FPGA的功能依赖状态累积的深度正则匹配。DPI的规则集通常是几千条PCRE正则每条正则还要回溯在FPGA里跑完整PCRE引擎是非常大的工程不等于能做而是开发成本和维护成本高到得不偿失依赖外置知识库的检测逻辑比如病毒库查杀、威胁情报匹配动态性极强、每周甚至每天更新的检测逻辑需要和上层业务系统交互的管理面逻辑这条清单对这个行业的朋友应该不陌生。大多数安全厂商的FPGA方案落点都在固定模式匹配、隧道转发加速、加解密卸载上而把重型的检测逻辑继续留给CPU上的软件。2.3 工程现实时序收敛、TCAM稀缺和规则热更新FPGA开发真正的痛不在原理在工程。第一个是RTL开发周期。一个稍微复杂点的流水线模块从设计、仿真、综合、布局布线到板级验证没有三个月拿不下来。特别是时序收敛时钟频率想上300MHz布局布线的路径延迟一超标就得反复调整流水线级数和逻辑结构。开发调试的手段比软件上裸奔还原始——万用表加示波器加逻辑分析仪最痛苦的是看波形一条条对信号。第二个是规则热更新。软件的规则表更新叫改配置文件然后reloadFPGA里的ACL表存在TCAM和SRAM里。TCAM容量贵且有限通常只有几十Mb要塞几万条规则就得做多级查找加哈希压缩。而且更新规则表时要保证线上的流不断涉及乒乓切换、读改写仲裁这些机制。做完才发现FPGA最耗时间的不全是写代码而是设计一套稳定的表项同步协议。第三个是调试手段匮乏。CPU上逻辑错了gdb断点一打就看到了FPGA里逻辑错了一个信号一个信号往下查线上问题复现还要抓包加抓波形一起上。我们团队为了定位一个问题在实验室抓了三周波形后来发现是外部SRAM的时序裕量不够温度一高就触发偶发读错误。2.4 大多数团队高估了FPGA的收益确实FPGA的线速处理能力非常吸引人但我要泼一盆冷水。降龙十八掌人人都想学但场地、器材、小半年闭关只是前提。很多团队做FPGA的方案做到一半发现硬件工程师和软件工程师的协作成本比想象中高。软件改一个表项格式硬件那边要陪着改寄存器、改解析逻辑、改仿真testbench跨团队的联调周期以周计算。出厂之后规则库更新困难。你有什么新检测逻辑如果硬件不支持就得在软件侧跑慢路径又变成CPU兜底。备货和生产周期拉长一片FPGA的大封装和配套存储颗粒交期可能十几周。所以FPGA不是坏选择而是有条件的选择。如果产品定位是固定功能、高性能、大量出货比如运营商级的高端防火墙或抗DDoS清洗设备FPGA路径是合理的。如果是中小企业的下一代防火墙这种通用安全产品需求变化很快纯FPGA方案会把整个产品线拖垮。3. NP路线纯网络处理器的工程逻辑同样有代价不少从业者会把FPGA和NP放在一起讨论因为都叫硬件加速。但实际上两者在架构哲学上完全不同。FPGA是用逻辑门搭出你想要的电路NP则是专门的网络处理器芯片片上集成了很多微引擎Microengine和硬件加速器通过编程来分配任务。3.1 NP的核心设计哲学多核众核加专用加速器比较典型的一代NP是Intel的IXP28系列和田纳西的Cavium OCTEON再往后是Ezchip的NP系列。这类芯片的共同点是ARM核或MIPS核成百上千个配合一片专门做报文解析、查表、加密、调度等功能的硬件加速单元数据进来以后由加速芯片做任务分发把不同的报文分给不同的核去处理。这种架构的转发性能很可观单颗芯片处理40G甚至100G线速不在话下。它的设计思路更接近我前面说的并行流水线一个复杂的安全策略拆成解析、查流表、做ACL、做统计、做转发几步每个核专职干一步互不干扰。3.2 NP的优势场景固定转发加低功耗加批量出货纯转发场景比如运营商BRAS、OLT、核心交换机的业务板上大量使用NP。这种场景的规则固定报文的处理逻辑高度确定NP的众核架构可以保证确定性转发功耗又比同样吞吐的CPU系统低不少。在运营商机房里能耗是硬指标NP在这类设备里确实活得很好。3.3 生态封闭的代价从编程模型到调试手段但NP在安全设备的应用上有一个很大的问号生态太封闭。每一代NP芯片的编程模型都在变。Intel的微引擎编程用其C语言变种Cavium早期用的是一套专用SDK到了新平台又要重写转发面代码团队的学习成本很高。另外NP芯片的软件工具链远没有x86那么成熟调试网络报文路径像是在黑盒子里打手电筒。有时候一个转发例外问题要在微引擎的trace buffer里一阵挖效率远低于x86上用gdb和perf的体验。3.4 为什么安全类产品大多最终选了FPGA而非NP在安全设备领域我观察到的一个现象是大厂旗舰产品里FPGA方案比NP方案常见得多。这里面有几个关键原因安全设备的检测逻辑比转发逻辑复杂得多NP的多核编程模型对复杂状态流的处理并不擅长。那些微引擎是为转发动作设计的跑深层包检测和正则匹配并不顺手。NP芯片的供应商名单这些年越来越窄自研或选型的空间小。FPGA有Intel、Xilinx现在是AMD两家大厂持续供料供应链相对稳定。基于TCP/IP的复杂协议解析、会话跟踪、文件还原这些逻辑带有强软件属性NP的硬件加速单元帮不上忙最后还是要靠通用ARM核来跑那么它和纯CPU方案比的优势就只剩下功耗了。在我见到的实际选型中NP路线更常见于大型电信设备制造商而安全设备厂商的主力硬件加速方案基本落在FPGA或者ASIC上。我们项目组当年评估过基于NP的开发板两周之后放弃了原因很简单支持的规则特性率太低光是把我们的ACL语义映射到NP的表项模型就够写三个月的适配层。4. 三条路径的决策框架性能、成本、开发速度和长期维护如何权衡聊完三条技术路线各自的底细很多朋友应该已经在心里拿产品定位去比了。这里把我整理的一套决策框架写下来不一定全对但至少是踩过坑之后的总结。4.1 一套不套模板的量化评估表格维度CPUDPDKFPGANP单设备极限吞吐40G~80G受限于查表算力100G轻松上400G100G~400G规则容量十万条级别取决于内存几万条到十几万条取决于TCAM/SRAM容量几万到几十万条取决于片上存储动态灵活性极高改代码即可上线中改逻辑需重新综合改表项可在线中低可编程但依赖特定的SDK模型状态检测/正则/DPI能力强生态成熟弱到中取决于投入弱到中受微引擎能力限制单台BOM成本最低中高FPGA芯片大容量QDR/TCAM中高采购量小单价高开发周期按月计按年计按月计但学习成本高团队技能要求通用软件背景即可需要RTL工程师、硬件工程师几乎只有原厂工程师熟维护升级难度最低热升级容易中逻辑升级要停机或双片切换中SDK升级绑硬件功耗高中低低供应链风险低中高4.2 选型决策的顺序逻辑先量化业务特征再做架构决定我给的建议是先别急着谈用FPGA还是NP先回答三个量化问题第一未来三年目标产品的线速吞吐需求是多少如果只到40G主流x86DPDK加四张25G网卡还能撑住就先把软件优化做透硬件投入推迟到下一轮产品规划里。第二安全业务特征里大数据面的占比有多少我从项目经验看安全设备的报文处理可以分成三块基础的转发动作解析、查表、改头、发出去、中间的处理动作会话跟踪、ACL匹配、加解密、尾部的人性化业务动作DPI正则、文件检测、威胁分析。第一块最适合硬件卸载第二块部分适合第三块在可见的未来都适合留在CPU上。第三规则和特性更新频率怎么样每周更新一次的规则库一定要给硬件路径留好带内更新的接口。如果规则结构本身变化快比如从五元组匹配升级到深度报文解析那硬件方案的架构折旧速度会非常快。4.3 典型场景的推荐落点中小型防火墙/UTM40G以下安心用CPUDPDK把多核负载均衡和DPDK收发包性能吃透。这一档不碰硬件是最高效的。运营商级抗DDoS/流量清洗设备100G以上FPGA做主路径卸载DDoS攻击检测中固定特征部分放硬件动态分析和用户行为学习留在CPU两步走的收益最大。电信级转发设备固定路由/隧道转发NP仍然是合理选项功耗和确定性转发体验确实好。高端下一代防火墙/IPS100G以上且要求灵活规则更新主流做法是CPUFPGA异构FPGA负责固定字段匹配和加解密CPU负责深检测和全部控制面。4.4 团队技能树对架构路线的反向约束这条常常被忽视但在真实项目里最关键。架构选型的本质是选团队。我见过不止一个项目硬件加速方案选定了结果团队里没有一个人看得懂RTL代码。硬件出问题只能依赖原厂技术支持一次现场调试等三周产品迭代节奏完全被打乱。反过来也见过有经验的硬件团队把一个并非最优的方案硬生生做成了因为人家有一整套信号完整性、仿真验证、引脚约束的积累。所以如果你的团队全是软件工程师先不要考虑自研FPGA方案除非你已经准备好花半年到一年时间建立硬件研发能力。这在产品节奏上是很大的提前量不只是钱的问题。5. 稳定落地的异构方案CPU管控制面FPGA/NP管数据面前面说了这么多路径选择实际真正在头部产品的架构图上很少看到单一路线的极端设计。大家最终殊途同归到一个结构上控制面/管理面跑在通用CPU上数据面交给FPGA或NP处理CPU和硬件之间通过高速总线协同。5.1 为什么几乎没人用纯硬件方案纯硬件做完整的安全业务流在理论上是成立的但在工程上是灾难。原因很简单安全业务需要人机交互需要动态策略配置、用户认证、报告输出、日志审计这些东西天然长在通用操作系统上你不可能让客户在FPGA里配防火墙策略。所以异构不是一种妥协而是两种平台各干各擅长的CPU负责逻辑和生态硬件负责速度和确定性。5.2 控制面与数据面分离的工程结构拿我们最终落地的方案来举例主机侧一台通用的x86服务器跑Linux DPDK收发包剩下的CPU核跑BGP/OSPF、会话管理、DPI深检测、日志上报、Web管理。加速侧一块FPGA板卡内部实现报文解析、固定ACL匹配、加解密AES-GCM的硬核、隧道封装以及高速会话表的维护。连接总线PCIe Gen3 x16通过DMA通道在CPU内存和FPGA板卡内存之间交换报文和控制信息。这里面最关键的是报文流向的设计。不是所有报文都和硬件有关。第一个版本的方案很土所有报文先进FPGAFPGA做完一轮固定字段匹配后需要深检测的报文再通过PCIe上送CPU。结果发现CPU侧变成瓶颈因为深检测流量占比高的时候PCIe带宽被打满。第二个版本改成智能分流FPGA保留一份规则表能明确判断哪些报文需要CPU深检、哪些报文可以线速放行。只有匹配需要深检的报文才上送CPU其余报文在FPGA内部直接转发。这个分流比例做对之后整机吞吐稳稳地上了120GCPU平均负载只有40%。5.3 规则下发与统计上报通道的同步难题这个结构一落地真正的麻烦不在于转发本身而在于控制面到数据面的状态同步。FPGA里面维护的ACL表项、会话表项、计数器和CPU侧的业务状态是两份副本必须保持一致性。最开始我们用PCIe中断机制每次CPU更新规则都要中断FPGA然后把一整张表重灌进去。规则量小的时候没问题规则量到五万条的时候一次表更新的耗时到了几百毫秒流量直接出现丢包和错乱。后来改成双缓冲表结构CPU先把新表写入影子区写完以后发一个切换指针的命令FPGA瞬间切到新表。整个更新过程对线上流量零扰动。这套机制花了不少时间设计但带来的稳定性收益很大。5.4 热补丁、灰度升级、可观测性在硬件路径上如何补齐软件方案做热补丁很容易进程重启一下就行。有FPGA加速后硬件逻辑本身的升级是最大的风险点。我们在工程上写了一套灰度逻辑FPGA里的逻辑镜像做成了双镜像升级时先加载新镜像到影子区校验完后切换失败自动回滚。这个共地保护动作在没有硬件经验的人看来以为是小题大做但真在客户机房出过一次现场升级变砖的事故后再也不敢少了。可观测性这块硬件路径比CPU路径弱很多。我们后期在FPGA里埋了一堆性能计数器每级流水线的处理报文数、丢弃数、上送CPU数、匹配命中率、TCAM利用率。这些数据通过PCIe定时上报到主机侧做成Grafana看板。这应该是被很多团队忽略的一块硬骨头但是当你的客户问为什么这台设备在某段时间内CPU高了的时候没有这些数据根本答不上来。6. 如果让我重新做一次这个项目我会改变的几件事文章最后分享一些个人复盘的部分。如果时间回到当初那个100G安全网关的项目启动前我会优先做的是先把软件转发路径的profiling做到极致再决定要不要上硬件。而不是像当年那样老板说客户要求100G线速产品经理直接拍板上FPGA然后团队花一年时间才把方案稳定下来。第二个体会是永远要给CPU留一条慢路径。不管硬件卸载做得多么完美总有超出预期的新协议、新攻击、新流量特征出现。设计时刻意保留一条未知报文上送CPU的通道排查线上问题时是救命稻草。我们后来遇到QUIC协议更新特征库里的正则匹配上不了FPGA就是靠这条慢路径兜住了否则设备直接变砖。第三点是硬件方案同样需要DevOps意识。当年觉得硬件逻辑升级复杂度高实际上FPGA的方案完全可以做到类似软件的CI/CD只是链路更长RTL代码静态检查、仿真回归、板级验证、灰度加载、监控回滚每个环节都要自动化。我们做了半年之后一次硬件逻辑改版从原来三个月压缩到三周。这个投入不亏。最后再分享一个很小的技巧。如果你想评估一个安全业务功能适不适合上FPGA不要只看它能不能实现而是先做个至少两周的软件原型把处理的数据结构、查找频率、每条规则的更新周期摸清楚。因为FPGA做规则匹配时一切都要转成定长、定宽、可哈希的结构化表。如果一个业务逻辑的特征本身是变长、带回溯、强依赖上下文的软件做的越好越难搬到FPGA里去。这条规律在我们后续评估威胁情报域名匹配上FPGA的时候再次验证了——设计了两个月最终放弃了老老实实留在CPU上跑hash表效果也不错。路径选择这件事没有绝对的最优只有基于你自己产品定位、团队能力和生存周期的当前最优。CPUDPDK不会消失FPGA和NP也不会互相取代未来的安全设备大概率会沿着异构融合的方向再走好几年。希望这篇文章能给正在纠结方案选型的朋友一些参考。
返回列表