ARTICLE DETAIL

资讯详情

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

AMD Ryzen跑VCF 9.0.2:NSX Edge部署与性能调优实战

AMD Ryzen跑VCF 9.0.2:NSX Edge部署与性能调优实战 搞 VCF 这玩意儿最容易被忽略的往往不是 vCenter 怎么装而是 NSX Edge 这批流量出口的表现。我在自己的 AMD Ryzen 实验节点上部署 VCF 9.0.2 时踩过不少跟 Intel 环境完全不同的坑也找到了一些性价比极高的调优方法。这篇文章就把我的整套部署优化思路串一遍从 BIOS 设置、ESXi 分区、Edge 节点规划到具体性能参数尽量写到可以直接照着落地。文中所有配置我都在真实机器上跑过不保证能在你的硬件上原封不动复制但思路和排查路径是通用的。先说清楚背景我这里说的 VCF 是 VMware Cloud Foundation一个把 vSphere、vSAN、NSX 和 Aria 组件统一纳管到 SDDC Manager 之下的集成平台。9.0.2 版本的控制面自动化已经做得很完整NSX 部分的向导基本是点按式部署越是这样底层硬件细节就越容易出问题——尤其是当你用 AMD Ryzen 而不是官方 HCL 里常见的 EPYC 或 Intel Xeon 时很多默认参数会把你晾在半路。所以这篇文章本质上不是讲“怎么点按钮”而是讲“点按钮之前和之后有哪些参数值得你手动改”。1. 项目整体思路与架构拆解1.1 在 AMD Ryzen 上跑 VCF 究竟意味着什么首先要把 VCF 9.0.2 的组件版图理清楚。一个标准 VCF 管理域里至少要有SDDC Manager负责整个平台的生命周期编排、vCenter Server、NSX Manager、NSX Edge 集群、vSAN 数据存储外加可选的 Aria Operations 和 Aria Automation。SDDC Manager 会通过统一的向导把 vCenter、NSX、vSAN 串起来你在界面上填好机架拓扑、网络池、Cluster 配置它就去批量创建和注册各种组件。这套流程在厂商参考架构上跑得确实顺但是放到 AMD Ryzen 个人实验机上你得先接受一个现实VCF 的兼容表非常严格官方 HCL 里几乎只见到 AMD EPYC 系列Ryzen 这种消费级 CPU 是不在名单里的。它能不能跑完全能我在 Ryzen 9 5950X 上跑过完整的 VCF 9.0.2包括 NSX Edge 的南北向流量转发。但它需要你手动处理两件事对 CPU 指令集和虚拟化特性的兼容性做验证尤其在安装 ESXi 时Ryzen 的 SVMSecure Virtual Machine模式和 IOMMU 必须开否则 vSphere 直接装不上或被判定为不支持由于 VCF 的自动化向导对硬件做合法性检查时可能因为 CPU 型号不在 HCL 里而报 Warning 甚至 Block这时要么绕过检查要么提前准备好环境声明。我的建议是如果只是学习和做 POC就直接用“非官方支持环境”的心态去对待不要指望 SDDC Manager 里所有图标都漂绿。把重点放在 NSX Edge 的转发性能和稳定性上这是 Ryzen 平台和 Intel 平台差距最明显、也最值得调优的地方。1.2 NSX Edge 在 VCF 里的真实定位VMware Cloud Foundation 里的 NSX 分成两层NSX Manager 是控制面主要管逻辑交换机、路由策略、分布式防火墙规则NSX Edge 是数据面负责承载南北向流量和一部分服务网关功能比如 NAT、Load Balancer、IPSEC 通信、Tier-0 与 Tier-1 路由等。在 VCF 里Edge 默认是以虚拟机形态创建的SDDC Manager 会按照你填写的 Edge 集群规格在指定 vSAN 数据存储上拉起 Edge VM。VCF 9.0.2 的自动化程度更高它会顺带把 Tier-0、Tier-1、Overlay Segment如 Geneve 隧道默认建好你只要在 NSX Manager 里补充具体网段和路由即可。这也就解释了为什么 Edge 部署会这么吃底层硬件Edge VM 本质上是一个对延迟极其敏感的转发网关进程它的数据面大量使用 DPDK 和中断轮询模式CPU 调度抖动、内存访问跨 Node、网卡中断不均匀都会直接反映在吞吐和延迟曲线上。在 Intel 平台上这些问题可能因为架构成熟不明显到了 AMD Ryzen跨 CCX 通信和 SMT 调度的副作用会被放大你必须主动做绑核和资源预留。1.3 AMD Ryzen 平台的博弈麻烦和收益在哪里为什么我非得用 AMD Ryzen 而不是老老实实上一台 EPYC 或者二手 Xeon原因很实际Ryzen 消费级平台有极高的核心/价格比DDR4/DDR5 内存便宜单核频率也不差。5950X 有 16 核 32 线程跑一套小规模 VCF 加 NSX Edge 完全够用。再加上 AM4 平台的主板和准系统都非常容易获得对个人做测试、跑实验来说是性价比极高的选择。但它毕竟不是服务器级平台有几个绕不开的限制内存通道只有双通道EPYC 是八通道这对 vSAN 的性能模型有直接影响PCIe Lane 数量少插满网卡以后 Bifurcation 要精打细算NUMA 拓扑和 Intel 不完全一样Ryzen 的每个 CCD 互连走 Infinity Fabric跨 CCD 访问延迟比片内高一截VCF 官方支持列表里没有它SDDC Manager 检查时可能给你黄色警告。正因为有这些限制调优空间反而更大。只要你把 Edge VM 的 vCPU 限定在同一个 CCD/CCX 内把内存预留做到 100%再配合网卡多队列性能可以做到接近入门级 Xeon 的水平。下面整个第四章全是围绕这个展开的。2. 硬件准备与部署前调优2.1 网卡选型这是 Ryzen 平台上最容易被轻视的一环我在第一台 Ryzen 实验机上用的是板载 Realtek 2.5G结果 NSX Edge 建好以后内部 VM 互访都能跑一旦流量从 Edge 走 Percentile 转发到物理网络CPU 占用立刻飙到 90%吞吐只有 400Mbps 左右。后来换了 Intel X710-DA2 万兆网卡同样配置直接跑满 1G 甚至接近 8Gbps 小包转发差距非常大。原因不复杂NSX Edge 的 VMXNET3 驱动需要网卡支持 MSI-X 多队列和硬件校验和卸载。Realtek 的驱动在 ESXi 下本身兼容性就差更别说支持 SR-IOV、DPDK 这类高级特性了。所以我的第一个建议是如果你要在 AMD Ryzen 上部署 VCF 9.0.2尽量别用板载消费级网卡选 Intel X710/XL710、Mellanox ConnectX-4/5或者至少是 Broadcom 的服务器网卡。兼容性上注意一点ESXi 8.0 对部分 Mellanox 固件版本有要求如果插上以后 ESXi 里网卡不识别先升级固件到厂商推荐的版本再考虑加社区驱动。不要第一反应就去打驱动补丁很多虚惊都是固件版本不匹配造成的。2.2 BIOS 里的几个开关AMD 平台专属坑AMD Ryzen 平台的虚拟化相关开关和 Intel 不完全一样你需要在 BIOS 里逐一确认SVM ModeAMD-V必须开启这个默认通常是关闭的不开的话 ESXi 会直接告知 CPU 不支持硬件虚拟化连装都装不上IOMMU 必须开启因为在 VCF 环境中vSAN 或 NSX 的某些数据路径会用到 DMA 重映射特性不开虽然也能启动但直通网卡就废了C6 电源状态建议关闭我实测关闭后 Edge VM 上的 PPS每秒包数性能能提升 10% 到 15%。原因是 C6 会让核心频繁进入深睡眠DPDK 轮询线程醒来的延迟不稳定Global C-State Control 和 Power Supply Idle Control 都可以往 Performance 方向调如果你的 BIOS 里有 CPPCCollaborative Power and Performance Control保持开启但把 CPPC Preferred Cores 设为最高性能档。还有一个很多人忽略的点如果你的 Ryzen 支持 PBOPrecision Boost Overdrive在跑 NSX Edge 这种长期高负载场景时建议反而关闭 PBO 或限制 PPT 上限。原因很简单PBO 是瞬时加速机制它会让 CPU 频率频繁跳动这对虚拟机调度和 DPDK 时延没有帮助只会带来不确定性。锁频或者开启 CBPCore Performance Boost的固定模式反而更稳。2.3 ESXi 安装与兼容性处理ESXi 8.0 Update 2 或更高版本在 Ryzen 平台上安装时需要注意几个细节建议用 Offline Bundle 注入 AMD 平台的常用驱动特别是 USB/网卡驱动否则交互式安装可能卡在找不到存储控制器上安装完成后立刻检查 CPU 微码版本使用esxcli software vib list | grep micro确认如果微码太老最好用最新的 ESXi 补丁包更新否则 vCenter 的 EVC 校验会报错打开 ESXi 的 SSH执行vsish -e get /power/summary看一下当前电源策略如果是 Balanced把它切成 Performance开启 HyperthreadingSMT之前先忍一下虽然 Ryzen 支持 SMT但 NSX Edge 数据面是否受益存在争议我后面专门讲。安装完 ESXi 后先用esxcli hardware cpu global get确认 SVM 已经生效再用esxcli network nic list确认网卡驱动和固件状态。这一步走完整个宿主机的底子才算能用。3. VCF 9.0.2 中 NSX Edge 部署流程与资源规划3.1 通过 SDDC Manager 向导部署 NSX Edge 的路径VCF 9.0.2 的 SDDC Manager 提供了一个 Networking 菜单你在这里可以手动触发 NSX-T 的部署和管理。正常路径是这样的在 SDDC Manager 里选择一个已有的 vCenter Cluster 作为管理域填入 NSX Manager 的管理 IP 和处理网络的 VLAN/网段SDDC Manager 会先部署三个 NSX Manager 节点Active/Standby/第三节点做集群接下来设置 Edge 集群命名、节点数量、Edge VM 规格、 uplink 配置SDDC Manager 自动在目标 Cluster 上创建 Edge VM并完成 NSX Manager 的注册和配置最后自动创建 Tier-0 Router、Tier-1 Router 和 Overlay Transport Zone。我用的版本里Edge 集群默认规格有四个档位Extra Small、Small、Medium、Large。对应关系大致如下不同版本会微调以界面上为准规格vCPU内存适用场景Extra Small24GB轻量测试 / PoCSmall48GB小型园区 / 分支Medium816GB中型数据中心Large1232GB重负载 / 大型网关个人实验环境建议直接上 Small 或 Medium。Extra Small 跑起来虽然省资源但一旦开启分布式防火墙和 NAT 并发CPU 立刻见底。也不要一上来就拉 LargeEdge VM 的 vCPU 数量越多NUMA 绑定的复杂度越高反而可能拖累性能。3.2 Edge 节点布局最少两个最好三个放在不同宿主机上NSX Edge 集群至少需要两个 Edge 节点组成 Active/Standby 对否则无法提供高可用。在生产建议是两台 Edge 分布在不同 ESXi 主机上VCF 默认会尽量这样做。我自己的实验机只有一台物理主机所以我开了三个 Edge VM 放在同一个 ESXi 上构成一个小型边缘集群这样虽然谈不上机房级容灾但至少能测出 HA 切换时 NSX 控制面的行为。这里要特别提醒一个坑如果你的 VCF 环境里只有一个 Cluster而 Edge VM 和业务 VM 都跑在同一台宿主机上那么当你要维护 ESXi 主机比如重启时Edge 集群会集体失联。解决方法是至少准备两台物理主机或者干脆让 Edge VM 跑到单独的端口组上保证网络面独立。3.3 Tier-0/Tier-1 网关配置要点NSX Edge 部署完成后第一个要做的是检查 SDDC Manager 自动生成的 Tier-0 和 Tier-1 逻辑路由器。VCF 会给 Tier-0 分配一个 uplink 接口用来连接物理路由器Tier-1 则挂在 Tier-0 之下承载业务网段。几个我在实际配置中反复踩过的点静态路由 vs BGPVCF 向导默认可能只建好接口不会自动配置 BGP。如果你的物理网络规模不大可以直接在 Tier-0 上加静态路由指向物理路由器省心如果要做 ECMP需要配置 BGP Session并开启 Tier-0 的 Active/Active 模式检查 Geneve 端口是否在所有 ESXi 主机上正确开启NSX 会在每台宿主机上创建 Geneve 隧道端口如果宿主机防火墙没放行 UDP 6081Overlay Segment 之间的 VM 通信就会断不要急着建一堆 SegmentVCF 的理念是先跑通一条业务路径再逐步扩展。我在初期建了 5 个 Segment结果调试排障时很难厘清逻辑。4. NSX Edge 性能优化实操4.1 NUMA 与 CPU 绑定先把 Edge 的“家”给定下来这是整个优化里最核心的一步。AMD Ryzen 的架构特点是多颗 CCD每颗最多 8 核CCD 之间通过 Infinity Fabric 互联跨 CCD 访问内存和 L3 的代价明显高于片内。如果你让 NSX Edge 的 8 个 vCPU 散落在两颗 CCD 上数据面转发时会频繁跨片通信小包吞吐可以下降 20% 以上。打开 vSphere Client找到 Edge VM编辑配置手动指定 CPU 亲和性。以我的 5950X两颗 CCD 各 8 核共 16 核 32 线程为例我需要 8 个 vCPU 的 Edge。打开 ESXi 的 SSH执行esxcli hardware cpu list查看逻辑 CPU 与物理核心编号把 Edge VM 的 vCPU 数量和 numa.nodeAffinity 设置为同一 CCD 对应的物理核心范围。比如第一颗 CCD 的逻辑 CPU 大概是 0-7 和 16-23SMT 对我就绑定 0-7同时把内存预留设为 100%这样 ESXi 会倾向于把 Edge VM 的内存锁定在同一 NUMA 节点内避免内存跨 Node 访问。操作细节在 VM 的edit settings里展开 CPU把Reservation设置为等于Memory Size这里是 16GB 就预留 16GB再把CPU Affinity填写为具体物理 CPU 列表。如果 SDDC Manager 后续对 VM 配置有漂移检查注意 NVRAM 里的 affinity 配置可能会被向导重置所以做完之后最好在 SDDC Manager 的替换/扩展操作后复查一遍。4.2 内存预留与电源策略稳定比极限更重要NSX Edge 是内存敏感型应用内存预留不足会导致 guest 内 swap转发性能呈现锯齿状波动。我在第一次部署时没做预留结果带宽测试时每秒吞吐在 2Gbps 和 6Gbps 之间反复横跳非常诡异。后来把内存预留改为 100%并检查 Hadoop 有没有开启ESXi 内存压缩性能曲线就平滑了。电源策略方面除了 BIOS 关闭 C6ESXi 本身也建议将电源管理设为 Performance。你可以通过esxcli system settings advanced set -o /Power/intelPstate -i 1 esxcli system settings advanced set -o /Power/usePStates -i 0AMD 平台虽然没有 intelPstate但类似的电源参数需要确认。还有一个容易忽略的是 Host 的Power.CpuPolicy默认是 Balanced我直接用powercli把它改成了 HighPerformance。改完以后Edge 的延迟分布明显收窄P99 从几百微秒降到几十微秒。4.3 网卡多队列与中断调优把转发线程喂饱要让 NSX Edge 的 DPDK 数据面跑出好效果必须保证它所在的宿主网卡有足够的中断能力和队列。我的实践配置如下物理网卡Intel X710开启所有 RSS 队列在 ESXi 里通过esxcli network nic ringcurrent确认队列数把接收队列从默认的 4 改成 8Edge VM 的虚拟网卡类型必须用 VMXNET3不要用 E1000 或 SR-IOV VF。VMXNET3 在 vSphere 环境下对 DPDK 有官方优化打开 Edge VM 的网卡多队列模式将ethernetX.coalesceParams调低减少 CPU 合并中断带来的延迟如果物理网卡支持 SR-IOV可以考虑把 Edge VM 直通一个 VF但要注意一旦直通 VFvMotion 和支持 vSphere HA 的特性会受限。个人实验环境可以接受生产不建议。我实测最明显的提升来自 VLAN 和 MTU 的调整默认 MTU 1500 改为 jumbo frame9000吞吐提升非常明显。NSX 的 Overlay 报文本身带 Geneve 封装头如果底层 MTU 不够分片会导致吞吐断裂。VCF 向导默认可能会用 1500我建议你至少在物理交换机、ESXi 虚拟交换机、Tier-0 uplink 三处统一改成 9000。4.4 SMT/CCX 对 Edge 数据面的影响开还是关AMD Ryzen 的 SMT同时多线程对普通虚拟机是有利的但对 NSX Edge 这种 DPDK 轮询型应用来说SMT 线程之间共享 L2/L3 缓存可能会互相干扰。我做了两组对比开启 SMTEdge VM 分到 8 vCPU4 物理核 4 SMT 线程CPU 占用显示不高但 PPS 性能不稳定高负载下出现抖动关闭 SMTBIOS 里关掉或者只把 Edge VM 绑定到物理核心不绑定 SMT 对PPS 曲线更平滑峰值吞吐大概提升了 5% 左右。最终我的建议是如果你这台 Ryzen 同时还要跑其他业务 VM保持开启 SMT但 Edge VM 只绑定物理核心列表中不被 SMT 共享的那一组如果你专门有一台宿主机跑 NSX EdgeBIOS 里直接关掉 SMT换来的是更可预测的转发延迟。5. 常见问题与排查记录5.1 Edge VM 无法开机或反复重启过问题这类问题通常有三个原因。第一个是 CPU 亲和性绑定的 CPU 集合里包含了一个已经离线或不能调度的核心ESXi 会拒绝启动。解决办法是在vmx文件里手动清除sched.cpu.affinity确认esxcli hardware cpu list返回正常后再绑定。第二个是资源预留超过了宿主机可提供的内存总量。尤其是你在单个 Ryzon 上跑多个 Edge 节点时预留总和很容易超过物理内存导致其中一个 VM 无法启动。我给三个 Edge 节点分配内存时会先在纸上算好总预留Edge1 16GB、Edge2 16GB、Edge3 16GB加上 vCenter、NSX Manager、SDDC Manager 常驻内存整机 64GB 会非常紧张。后来我把 Edge 规格从 Medium 降到了 Small总内存才扛住。第三个原因比较隐蔽NSX Edge 部署完成后SDDC Manager 会做一次 checklist其中一项是验证 Edge VM 是否开启了“热添加”。如果memory.hotadd和cpu.hotadd被误设为 TrueNSX Edge 的 guest OS 可能无法正确处理 DPDK 大页直接 panic。标准做法是在 Edge VM 的高级参数里确认这两个值都是 False。5.2 南北向吞吐跑不满甚至只有几百 Mbps先别急着怀疑 Ryzen 性能按下面的顺序排查检查物理网卡是否是 1G 还是 10G 速率以及链路协商状态看 Edge VM 的 vCPU 数量和预留是否合理vCPU 太少会直接成为瓶颈查看网卡是否开启了多队列ethtool -l如果没有去 ESXi 里把 VMXNET3 的队列数调大确认 MTU 是否统一 9000尤其是 Geneve 端口的 MTUOverlay 报文如果分片带宽再大也白搭最后检查 DPDK 大页是否启用登录 NSX Edge 的 CLI执行get dataplane dpdk status看Total Memory是否足够如果内存低于预期回到 Edge VM 的预留设置。我在实验中最蠢的一次是物理交换机端口被设置为千兆但网卡和管理界面都显示 10G查了半天才发现是光纤模块兼容性问题。换成原厂模块后一切正常。5.3 vSAN 与 NSX Edge 联动时的 IO 延迟问题VCF 的默认数据存储是 vSANEdge VM 的虚拟磁盘也放在 vSAN 上。如果你只有一块 NVMe SSD 和一块机械盘vSAN 缓存策略可能导致 Edge VM 启动或重启非常慢。我建议在 NVMe 上单独建一个 vSAN 盘组并把 Edge VM 的存储策略设置为“仅本地 NVMe”强制避免用机械盘承载 Edge 虚拟磁盘。通过以下命令确认 Edge VM 的存储策略vSphere CLI: Get-VM -Name edge-1 | Get-SpbmEntityConfiguration如果不是直接改存储策略重启后生效。这个方法解决了我 Edge 节点启动时间从 20 分钟降到 3 分钟的问题。5.4 时钟漂移引发的 BGP 会话震荡NSX Edge 对 NTP 非常敏感。AMD Ryzen 平台如果宿主机的 TSC 不稳定guest 内时钟跑一会就偏移几百毫秒BGP Keepalive 会周期性掉线。除了确认 NSX Manager、Edge 节点都设置了正确的 NTP 服务器还要在 ESXi 的/etc/ntp.conf里把tinker panic 0加上避免时钟跳变导致服务中断。我遇到过最隐蔽的现象是Edge 与物理交换机建立 BGP 后每隔 3 小时会话自动重置日志里全是 BGP Notification。排查到最后发现是宿主机的Power.CpuPolicy处于 BalancedP-state 变化导致细粒度时钟抖动。把电源策略改成 Performance 并重启宿主机后问题彻底消失。6. 后续还可以怎么扩展最后再分享一点个人体会。这套 AMD Ryzen VCF 9.0.2 NSX Edge 的验证环境我后来加了一个 10G 的免驱网卡做了 Edge 节点的 Active/Active 测试也试过用 Terraform 对接 SDDC Manager 自动扩展 Edge 集群。说实话Ryzen 平台虽然不是官方参考架构但它作为学习和预生产验证环境性价比真的很高。关键在于你要愿意花时间去理解底层拓扑把 Edge 节点当成一个敏感的转发进程来对待——预留资源、绑定 NUMA、关掉功率波动它就会给你远超这个价位的转发性能。如果你也在折腾类似环境可以从最简单的开始先把一个 Edge 节点的 vCPU 亲和性绑好内存预留 100%然后跑一轮 iperf3 对比你会立刻感觉到差异。之后再逐步加 BGP、叠加防火墙规则每加一层就复测一次别等整套环境都搭好了才做性能验证那会把人逼疯。
返回列表