最近接触了一台典型的1U网络服务设备(Net Service Appliance),前面板密密麻麻排着光口和电口,后面板是两个冗余电源加一堆管理接口,拆开上盖一看,里面躺着一颗AMD EPYC 7000系列处理器。这类设备在运营商边缘机房、企业核心网、SD-WAN接入侧越来越常见,属于典型的x86白盒网络设备,用来跑防火墙、DPI深度检测、负载均衡、vCPE(虚拟客户端终端设备)这些网络业务。整篇文章我就围绕“1U + EPYC 7000 + 网络服务设备”这条线,聊聊这类设备为什么这么设计、硬件选型怎么考虑、部署时有哪些坑,以及我实际调测中积累的一些心得。
对于正在做网络设备选型、白盒硬件设计,或者准备拿EPYC平台去做DPDK转发业务的工程师来说,这篇文章应该能帮你少走不少弯路。我不写太虚的东西,尽量把技术逻辑和实操细节都拆开讲清楚。
1. 网络服务设备到底在跑什么,为什么偏偏是1U
1.1 网络设备与通用服务器的本质区别
先说个基本概念。同样是一台x86服务器,普通机架式服务器用来跑数据库、虚拟化、大数据,而网络服务设备是用来搬数据、改数据、审数据的。所谓搬数据,就是纯二层/三层转发,一个包进来快速查表、改MAC、丢出去;所谓改数据,就是NAT转换、隧道封装(VXLAN、GRE)、负载均衡层面的改写;所谓审数据,就是防火墙的会话管理、IDS/IPS的纵深检测、DPI的应用层识别。这些业务有一个共同特征:对延迟极度敏感,对吞吐有硬指标,而且往往是7x24小时不允许重启的。
EPYC 7000系列在这种场景里有一个很大的天然优势:PCIe通道数量非常多,内存带宽大。网络设备后面挂什么,几乎都靠PCIe通道来撑。四口10G网卡要占8条lane,双口100G网卡要占16条lane,再加上NVMe存储、OCP网卡插槽、BMC管理网卡,一套配置下来就把Intel平台那48条PCIe 3.0通道吃得差不多了。而第一代EPYC 7000(Naples架构)单颗CPU对外提供128条PCIe Gen3通道,即便在单路配置下也几乎不缩水,这就让1U设备里能塞进非常夸张的网口密度。
1.2 1U形态的设备定位与使用场景
为什么这类设备几乎都做成了1U,而不是2U或者塔式?核心原因是机房机柜的U位成本太高。电信机房里动辄几十台网络设备堆在一起,2U设备一台占两个U位,散热和走线都会变得不可控。1U高度只有44.45mm,前面板标准宽度482.6mm,深度通常在550mm到650mm之间,这样的尺寸刚好能塞进600mm深的通信机柜,后面还能留出电源和理线的空间。
另外,网络设备通常不需要非常多的内置硬盘位。一台转发设备,系统盘两个SSD做RAID 1就足够了,顶多加一个NVMe缓存盘。相比之下,2U的盘位优势在网络设备上反而不明显。1U的短进深设计也让它在边缘机房、分支机柜这些空间局促的位置更有适应力。
当然,1U形态给设计和散热带来了很大的挑战,这一点后面我会单独展开讲。先记住一个结论:网络服务设备选1U,不是因为它便宜,而是因为它是最适合机房部署密度和网络业务形态的尺寸。
2. 拆解AMD EPYC 7000,为什么它适合做网络服务设备
2.1 PCIe通道数,网络设备的硬指标
做网络设备选型的时候,我最先看的就是CPU的PCIe通道数,而不是核心数。因为网络业务的瓶颈往往不在CPU计算能力,而在数据进出的通道宽度。
EPYC 7000系列单路平台提供了128条PCIe Gen3通道,插槽形态是SP3。这是个什么概念?拿它来算一笔账:
- 主板要扩展出去给业务用的PCIe槽位,至少需要64条lane,好一点的方案是1个x16 + 4个x8,加2个x8给内置OCP网卡。
- 四口SFP+ 10G网卡(Intel X710-DA4或博通BCM57416)占8条lane,两张就是16条。
- 双口100G QSFP28网卡(Mellanox CX5/CX6)占16条lane,两张就是32条。
- 两块NVMe U.2盘占8条lane。
- BMC、板载管理网卡、串口控制器等杂项再占个几条。
这么一算,128条通道刚好安排得明明白白。换成同期的Intel Xeon Scalable(Skylake-SP)平台,只有48条PCIe 3.0通道,同样的网口和存储配置就得靠PCIe Switch来扩展,成本上去不说,还多了一层交换芯片的延迟和故障点。所以,EPYC在这一代白盒网络设备中异军突起,通道数是最关键的原因。
2.2 内存通道与多核拓扑,实际转发性能的底气
EPYC 7000是8通道DDR4内存设计,而Intel当时的平台是6通道。网络设备跑DPDK这种用户态转发框架时,数据面收包、查表、转发的一系列动作都是在内存里完成的,内存带宽直接决定了大报文(比如1518字节以上的大帧)的转发上限。8通道DDR4-2666的理论带宽大约170GB/s,比6通道平台高出一截,这对双向40G甚至100G的线速转发来说很关键。
再看核心拓扑。EPYC 7000是chiplet设计,一颗CPU里封装了两个Die(die 0和die 1),通过Infinity Fabric互联,每个Die内部有最多8个核心(4个CCX,每个CCX 2个核心),支持SMT。要注意的是,EPYC 7000的CCX是2核一组,单个CCX的共享L3是8MB,和后来Zen 2/Zen 3的CCX设计不太一样。对网络业务来说,这意味着跨CCX跨Die访问内存的延迟会明显上升,跑DPDK时如果没做好NUMA亲和性绑定,转发包量会有肉眼可见的抖动。
但换个角度说,正因为是多Die设计,EPYC 7000做单路设备时天然有更均衡的PCIe fanout。网络设备的网卡通常插在不同Die对应的PCIe控制器上,跨Die的PCIe访问延迟会比同Die高,但这个延迟在大多数网络场景下是可接受的,只要配合hugepage和CPU绑核就能把影响降到最小。这个我放到第4章详细说。
2.3 单路与双路的取舍
1U网络设备里,EPYC 7000平台多数是单路设计,但电源功率和散热资源是支持双路EPYC的。那么选单路还是双路?我的经验是,绝大多数网络服务设备选单路就够了。
原因很简单:网络业务主要是网卡中断和DPDK轮询驱动在处理,CPU多核主要用来跑转发面、控制面和业务面。32核64线程的EPYC 7000(比如7302P这种单路型号,32核64线程,TDP 155W)已经能承载很重的业务。假如你跑一台vCPE,上面要开十几个虚拟机的VNF,双路肯定更从容。但这时候机箱深度、电源冗余、散热风量的设计就要全部拉高一个档次,成本也直接翻倍。
从实际项目来看,单路EPYC 7000配合千兆电口/万兆光口在前面板做业务口,后面板放BMC和HA口,这类配置在SD-WAN接入设备和中小型防火墙里占了绝大多数。如果你确实有双路需求,建议优先考虑EPYC 7002或更新的平台,第一代EPYC 7000的双路产品在1U里做散热确实压力太大,除非你可接受牺牲一些CPU性能做功耗限制。
3. 硬件平台设计,1U机箱里怎么把EPYC塞稳
3.1 散热与风道的硬约束
1U设备里塞一颗TDP 155W甚至180W的EPYC处理器,散热是整个结构设计的头号难题。为什么?因为1U高度只有44.45mm,热管散热器的高度被压得很死,普通的塔式散热器根本塞不进去。行业内通用的方案是定制1U专用散热器,纯铝挤或者铜底铝鳍片,配合一颗高性能涡轮风扇形成强制风冷。
风道设计上,标准做法是前侧进风、后侧出风。前面板开孔进冷风,经过硬盘托架、PCIe网卡、CPU散热器,最后由后面板的风扇墙抽出去。注意,这里风扇不是装在CPU前面吹,而是装在后窗往外抽,形成负压风道。1U的CPU散热器通常要配合一个导风罩,把进风精确导到CPU散热片上方,否则风会从网卡和内存槽的缝隙漏掉,CPU反而吃不到冷风。
风扇选型上,1U设备基本都选40mm或60mm的涡轮风扇,转速一般在8000到15000转之间。这个级别的风扇满转噪音非常感人,65dBA都是常态,所以BMC一定要能根据CPU温度做四线PWM调速。我见过不少项目在BMC调速策略没调好之前,开机风扇直接满转,整个机柜像飞机起飞一样。
我自己的实操经验是,散热设计时要留出至少20%的散热余量。比如按CPU 180W TDP、环境温度35°C来设计,风扇的总风量至少要比理论计算值多20%。千万不要按25°C环境温度去算散热,机房空调一故障,温度上来就是一场灾难。
3.2 网口布局与PCIe空间规划
1U设备前面板是最值钱的地方。网络设备的业务口基本全部放在前面板,运维人员插拔网线、理线都在设备正面操作。常见布局是前面板从左到右依次是:2个管理电口(千兆或万兆)、若干SFP+万兆光口(8到24个)、甚至2到4个QSFP28 100G光口,部分设备还会保留一个串口和两个USB口,用来本地调试和导入配置。
管理口和数据口分开是一个非常重要的设计原则。管理口用于带外管理,比如SSH登录、BMC访问,它不能和业务口抢带宽,更不能因为业务流量涌进来就把管理通道打死了。这也是为什么绝大多数路由器和防火墙都有独立管理口的原因。1U设备里,板载管理网卡走板载PCIe,数据口则通过PCIe扩展卡引出到前面板,两边物理隔离。
PCIe空间的规划上,标准方案是:主板提供3到4个PCIe x8或x16插槽,通过riser卡转成横插方式放在机箱内。一个riser放OCP 3.0网卡插槽,另外两个riser放标准PCIe网卡,比如双口100G卡。如果网口数量多,还可以在PCB设计时直接把网卡的PHY和MAC做到主板上,走板载PCIe。
这里要注意,EPYC 7000的PCIe通道按Die分布,不同Die控制的PCIe插槽在NUMA拓扑上是不同的。插网卡时要看哪张卡接到了哪个CPU Die上,尽量把高吞吐的网卡分散到不同Die上,避免全部挤在一个Die的PCIe控制器下导致带宽争抢。
3.3 电源、管理BMC与存储的细节
电源部分,1U设备通常用CRPS(Common Redundant Power Supply)标准电源模块,常见功率有550W、800W、1200W。对于单路EPYC 7000加几张网卡的配置,550W单电其实够用,但为了7x24高可用,绝大多数项目会选1+1冗余电源。选电源时重点看12V输出能力和瞬态响应,网络设备启动时网卡PHY初始化、NVMe盘上电会有较大的瞬时电流,电源跟不上会导致设备启动失败。
BMC管理芯片(比如ASPEED AST2500/AST2600)几乎是1U网络设备的标配。它负责IPMI带外管理、远程KVM挂载ISO、传感器监控(电压、温度、风扇转速)、以及风扇PWM调速策略。别小看BMC,它在网络设备里承担的作用,甚至比普通服务器更重要——因为网络设备部署在分支机房,出了故障可能根本没有人能到现场按电源键。远程重启、远程装系统、查看串口日志,全靠BMC。
存储部分,1U网络设备不需要大容量存储,一般就是两个前置SATA/SAS托架,加一个内置M.2或U.2 NVMe插槽。系统盘建议用两颗SSD组镜像,比如用Intel D3-S4610或三星PM893这类企业级盘;缓存盘/日志盘用NVMe。这里的坑是企业级SSD的发热不低,1U机箱里硬盘位置往往风道不太好,要确认硬盘托架位置有风流覆盖,否则存储盘温度能上到60°C以上,寿命和稳定性都会受影响。
4. 从硬件到业务,部署一台EPYC网络服务设备的完整路径
4.1 网卡选型,别只看速率
给这台EPYC设备配网卡,不能光看接口速率,还要看驱动生态、队列数、卸载能力。端口速率决定了上限,但队列数和驱动质量决定了实际能不能跑满。
Intel X710/X550系列(10G)是最稳妥的选择,驱动成熟,支持RSS、VMDq、SR-IOV,在DPDK和内核协议栈下都有良好表现。博通BCM57416也是常见选择,队列数多,功耗控制好。到了25G/100G这一档,Mellanox(NVIDIA)ConnectX-5/CX-6系列性能最强,支持硬件卸载和双口100G,但价格也明显高;Intel E810系列(100G)在云原生和DPDK场景下也不错,尤其是对AF_XDP等新特性的支持更好。
选网卡时一定要确认它支持SR-IOV。因为在NFV(网络功能虚拟化)场景里,你要把一个物理网口切分成多个VF(虚拟功能),分别给不同的虚拟机用,这就离不开网卡的SR-IOV能力。不通用的便宜网卡往往阉割了这部分功能,等你做完虚拟化才发现不支持,换卡的成本是双份的。
4.2 系统层优化,DPDK转发前的必做动作
网卡插上去之后,先别急着跑业务,系统层有几个关键项必须调好。
第一,大页内存(HugePages)。DPDK的收包队列、内存池都要从大页分配,否则TLB miss会导致转发性能急剧下降。常见配置是在内核启动参数里加default_hugepagesz=1G hugepagesz=1G hugepages=8,预留8个1G大页给DPDK使用。如果不想用1G大页,也可以分配512个2M大页,但DPDK的mempool性能会略差一点。
第二,CPU隔离(isolcpus)。把DPDK使用的数据面CPU从内核调度器中隔离出来,避免其他进程打扰。参数示例:isolcpus=2-15 nohz_full=2-15 rcu_nocbs=2-15。这样这些核只跑DPDK轮询线程,不会有周期时钟中断打断。
第三,IRQ亲和性。对于使用内核协议栈的业务(比如Linux网桥、iptables),要把网卡中断绑定到指定CPU,避免中断在各个核之间漂移。方法很简单,改/proc/irq/<中断号>/smp_affinity即可。对于使用DPDK的场景,因为收包是轮询模式,这一步可以跳过。
第四,关闭CPU休眠和动态调频。网络设备最怕延迟抖动,如果BIOS里开了C-states和P-state节能,CPU会在空闲时降频,包一上来又要升频,这个频率切换过程会导致延迟抖动,严重影响转发稳定性。在BIOS里把电源策略改成Performance,关闭C6、C7,通常能显著降低转发延迟的毛刺。
4.3 业务场景实例,这台设备能怎么用
拿一台配置了EPYC 7302P(单路32核64线程)、128GB内存、2个双口100G网卡加8个千兆电口的1U设备举例,它可以很轻松地扮演以下几种角色:
- 下一代防火墙:CPU多核跑DPDK,64线程可以分配2到4个核跑控制面的Session管理、NAT表老化,其余核跑数据面收包和五元组匹配。多核扩展性好的情况下,100G双向吞吐的防火墙完全可行。
- SD-WAN分支网关:前面板万兆口接运营商线路,千兆口接办公网,内部跑VXLAN隧道和集中式策略路由,EPYC的PCIe通道多,可以同时挂两到三条物理线路而不挤占I/O。
- 边缘AI推理网关:除了CPU转发,还能在PCIe x16槽位插一块半高GPU卡(比如NVIDIA A2或T4),做视频流的AI识别预处理,前面板DPDK收视频流,后面GPU做推理,一台设备同时承担网络和算力网关。
- 流量分析探针:多张100G网卡做TAP分光流量汇聚,用DPDK抓包,把去重后的数据写到NVMe盘上,再通过管理口把元数据推送到后端分析平台。
这些场景都能在一台设备内闭环完成,这也是x86网络服务设备相比传统专用ASIC设备最大的价值——灵活、可编程、软件迭代快。
4.4 BIOS和BMC调优的几个关键设置
EPYC 7000平台在做网络设备时,BIOS里有几项设置对稳定性影响非常明显,这里列一下我常用的配置:
- SMT(同步多线程):如果你的业务以DPDK转发为主,建议关闭,可以减少同核两个线程互相抢资源的抖动;如果业务以控制面和业务面为主,比如跑虚拟化,开SMT收益更大。这个没有绝对标准,要实测对比。
- NUMA:保持NUMA开启,不要为了省事进BIOS把NUMA禁用。禁用NUMA会导致内存访问全部走远端,延迟up得很厉害。
- ACPI SRAT表:如果BMC支持,确认SRAT表能正确暴露给OS,虚拟机热迁移时会用到。
- 功耗上限(TDC):1U散热有瓶颈时,可以在BMC里给CPU设置功耗上限,比如把180W的处理器限制到140W,温度能降一截,性能损失通常在5%-10%之间,对网络业务的峰值影响可控。
BMC的调优主要看风扇策略。建议把风扇调速的基准温度传感器挂在CPU封装温度(Tctl)上,并设置一个有滞回区间(hysteresis)的调速曲线,避免转速在某个温度点反复跳动。另外,进风口温度和PCIe槽位温度也要纳入监控,因为网卡的发热在1U空间里同样不可忽视。
5. 部署中我踩过的一些坑,与排查方法
5.1 散热不足,CPU触发热节流
有次测试一台1U设备,满载跑DPDK转发时,CPU频率突然从3.2GHz掉到了2.2GHz,转发包量直接腰斩。排查发现,BMC的风扇控制策略在出厂时没有正确读取CPU的Tctl传感器,导致风扇只跑了40%转速,CPU温度冲到95°C以上触发降频。
解决方法是进BMC命令行手动读取传感器温度,确认Tctl值正常,然后把风扇曲线调整到合理区间,比如50°C以下30%转速、70°C时80%转速、85°C以上全速。调整之后,CPU温度稳定在80°C上下,转发性能恢复。这件事给我们的教训是:拿到设备后第一件事不是跑业务,而是验证散热风扇策略。
5.2 PCIe拓扑与NUMA节点,性能忽高忽低
另一个常见的坑是网卡插错位置,导致DPDK转发性能出现严重的NUMA不均衡。EPYC 7000的两个Die各管一部分PCIe通道,如果你把两张高吞吐的100G网卡都插到了同一个Die对应的PCIe插槽上,而DPDK的lcore全部绑在另一个Die上,那么所有收包的内存拷贝和转发都要跨Die访问,性能损耗很大。
排查方法很简单:系统下用lscpu -e看CPU分布,再用lspci -v看网卡挂在哪棵PCIe bus下,或者直接用lstopo画拓扑图,一目了然。分配CPU时尽量让DPDK线程和网卡落到同一个NUMA节点,即使有跨NUMA的场景,也要先摸清拓扑再规划线程分布。
5.3 驱动与固件版本,白盒设备最容易被忽视的一环
做网络设备最讨厌的故障之一,就是网卡在跑高负载时报错或者直接无响应。这种事十有八九出在固件和驱动版本上。有些主板的板载网卡PHY固件版本很老,对E810、CX5这些新网卡的link training支持不好,导致网线插上后协商不稳定,一会儿千兆一会儿万兆。
我的习惯是,设备到货后先把所有网卡固件升级到厂商最新版本,BIOS和BMC固件也一并升级,然后再开始做系统配置。尤其是用到DPDK这类用户态驱动时,建议用DPDK自带的dpdk-devbind.py查看设备绑定状态,确认网卡被正确bind到vfio-pci驱动,而不是跑到igb_uio或内核驱动里去了。这类问题很隐蔽,表现就是DPDK启动时报端口初始化失败,但普通网卡驱动下一切正常。
5.4 常见问题速查
| 故障现象 | 排查思路 | 解决方向 |
|---|---|---|
| CPU降频、转发性能腰斩 | 查看BMC传感器温度、风扇转速 | 调整风扇策略,或限制CPU功耗上限 |
| 网卡link不稳定 | 检查网线、光模块、网卡固件 | 升级固件,换兼容性好的光模块 |
| DPDK端口初始化失败 | 看是否被内核驱动占用 | 用dpdk-devbind.py重新绑定vfio-pci |
| 转发延迟抖动大 | 检查是否关C-states / 是否开了节能 | 关闭节能,禁用C6/C7,绑定CPU |
| 跨Die访问导致的性能损失 | 用lstopo看NUMA拓扑 | 重新规划网卡插槽与CPU线程绑定 |
| 开机风扇满转噪声过大 | 查看BMC是否读取到CPU温度 | 校准BMC温度传感器,优化调速曲线 |
5.5 一条非常实用的部署前自检清单
写完常见问题,我再送一份自检清单,照着走一遍能省掉很多后期调试的事。
第一,硬件层面:确认所有PCIe网卡插槽和CPU Die的对应关系,确认CPU散热器和导风罩装好,确认风扇线插在BMC对应的PWM接口上,确认电源模块功率≥整机峰值功耗的1.3倍。
第二,固件层面:升级BIOS、BMC、网卡固件到稳定版本,确认BMC的传感器读数正常,尤其是CPU温度、进风温度、风扇转速。
第三,系统层面:内核启用大页和CPU隔离,关闭节能,确认NUMA拓扑,设置好IRQ亲和性。
第四,业务层面:用DPDK跑一轮l2fwd或testpmd的收发测试,确认转发性能达到预期,再做业务配置。这一步相当于硬件验收,能提前暴露很多问题。
6. 我对这类设备的一些个人体会
做网络设备这些年,我慢慢觉得,硬件选型其实是给未来几年要跑的业务提前铺路。现在1U设备里为什么越来越多看到AMD EPYC 7000,而不只是Intel平台,根本原因是网络业务对PCIe通道和内存带宽的胃口越来越大,从10G到25G再到100G,每升级一次带宽,对CPU的I/O能力要求就上一个台阶。EPYC 7000用更激进的PCIe扩展能力,把更多网口、更多NVMe盘、更多硬件加速设备塞进了一台1U设备里,这是它在这个市场站住脚的根本逻辑。
但对做实际项目的人来说,参数好只是一方面,真正决定了用户体验的,还是散热、风扇策略、BMC带外管理这些细枝末节的东西。一台设备如果转发性能再强,部署三个月后风扇策略出问题导致CPU降频,那也是白搭。所以我一直建议:任何一台白盒网络设备拿到手,先花两个小时做硬件自检和固件升级,再花两个小时跑一轮DPDK转发压测,确认性能和温度都稳定了,再谈业务上线。
写这篇文章的时候,我一直在想,网络设备这个领域最迷人的地方,就是它永远在性能和物理约束之间找平衡。1U的尺寸、EPYC的多核、PCIe的通道数、风扇的噪声,每一环都是互相牵制的。理解了这些约束,你才算是真正看懂了这类设备。