2. Intel Xeon高可用硬件基础

关键业务系统对停机时间的容忍度通常以“每年分钟数”衡量,而硬件故障是导致非计划停机的主要来源之一。Intel Xeon 平台从处理器内部到板级互连,构建了一套分层 RAS(Reliability, Availability, Serviceability)能力。理解这些能力的触发条件、作用范围与代价,是设计高可用体系的第一步——因为并非所有 RAS 特性都能同时开启,也并非所有故障都能被同一层机制覆盖。

一、处理器 RAS:从纠错到隔离的三级防线

Xeon 处理器的 RAS 能力可按“错误发生位置—处理方式—对业务的影响”分为三层。第一层是纠错:L1/L2/L3 缓存与内存控制器普遍采用 SECDED(单错纠正、双错检测)ECC,可自动纠正单比特错误而不中断执行。第二层是检测与记录:当出现不可纠正错误(UCE)时,机器检查架构(MCA)会记录到 MSR 寄存器,并通过 CMCI 中断上报,操作系统可读取 /sys/devices/system/machinecheck/ 下的计数判断故障趋势。第三层是隔离与恢复:通过内存镜像、页面离线(Page Offlining)、Cache Way Disable 等手段,把故障单元从可用资源池中摘除,避免其继续参与运算。

需要特别区分 CE(Corrected Error)与 UCE。CE 本身不导致宕机,但持续增长的 CE 是硬件劣化的前兆。工程实践中通常设定阈值:同一 DIMM 在 24 小时内 CE 超过 100 次,或出现可定位的 UCE,即触发预防性更换。这一判断依据来自 MCA 记录中的 DIMM 位置字段,而非笼统的“内存报错”。

二、内存镜像与备用:两种不同的冗余思路

内存 RAS 有两种典型模式,其代价与保护范围差异明显。

内存镜像(Memory Mirroring)将内存划分为主副本与镜像副本,两者写入完全相同的数据。当主副本所在通道出现 UCE,控制器立即切换到镜像副本继续读写,业务无感知。代价是可用容量减半:例如 8 条 32GB DIMM 共 256GB,镜像后可用 128GB。镜像通常按通道或按 Rank 成对配置,要求成对 DIMM 容量、速率一致。

内存备用(Memory Sparing)则预留一部分 Rank 作为备用。当某个 Rank 的 CE 超过阈值,控制器把该 Rank 的数据迁移到备用 Rank,并把它标记为失效。备用不减少总容量,但会降低可用带宽,且迁移过程需要短暂时间。Rank Sparing 的粒度比镜像更细,适合容量敏感但可接受轻微性能波动的场景。

选择建议:对延迟极敏感、容量充裕的交易库,优先镜像;对容量紧张、可容忍迁移抖动的缓存类负载,可考虑备用。两者不应在同一内存区域叠加使用。

三、PCIe 热插拔:把“换卡”变成在线操作

PCIe 热插拔(Hot Plug)让网卡、HBA 等扩展卡在系统运行中更换,是高可用维护的关键。其完整链路涉及硬件、固件与操作系统三方配合:插槽需支持热插拔(通常标注为热插拔槽位),BIOS/UEFI 中开启 PCIe Hot Plug 与 ACPI 支持,操作系统侧通过 pciehp 驱动管理。

一次标准的热替换操作顺序如下:先通过 echo 0 > /sys/bus/pci/slots/<N>/power 关闭槽位电源,确认对应 lspci 设备消失;再拔出旧卡、插入新卡;随后 echo 1 > .../power 上电,内核重新枚举并加载驱动。若使用 acpiphp 而非 pciehp,行为可能不同,需在部署前确认。热插拔失败最常见的原因是槽位未真正支持、固件未开启或驱动未绑定,因此上线前应做一次“空槽位上下电”验证。

四、QPI/UPI 链路冗余与故障隔离

多路 Xeon 之间通过 QPI(较早平台)或 UPI(较新平台)互连。双路系统中通常存在多条链路,形成冗余路径。当某条 UPI 链路出现持续错误,处理器可将其降级或隔离,流量改走其余链路,系统继续运行但互连带宽下降。这一机制依赖链路层的重传与错误计数,达到阈值后触发链路降级。

故障隔离的边界值得注意:UPI 链路故障通常不会直接导致宕机,但会削弱跨路访问内存的带宽与延迟;若所有链路同时失效,则系统可能分裂或宕机。因此监控 UPI 错误计数(如通过 rasdaemon 或 BMC 日志)与监控内存 CE 同样重要。

Intel Xeon 高可用硬件分层与故障隔离路径 CPU 0(Socket 0) L1/L2/L3 ECC · MCA 记录 内存控制器 · 镜像/备用 CPU 1(Socket 1) L1/L2/L3 ECC · MCA 记录 内存控制器 · 镜像/备用 UPI Link 0(正常) UPI Link 1(正常) UPI Link 2(降级/隔离) 内存通道 A/B(主副本) DIMM A1 32GB DIMM B1 32GB 内存通道 C/D(镜像副本) DIMM C1 32GB DIMM D1 32GB 镜像写入(容量减半) PCIe 热插拔链路(硬件 → 固件 → OS) 热插拔槽位 支持 PRSNT 信号 BIOS/UEFI 开启 Hot Plug + ACPI OS pciehp 驱动 槽位上下电控制 设备枚举 lspci 可见 故障隔离边界:CE 累积 → 页面离线 / Rank 迁移;UCE → 镜像切换;UPI 错误 → 链路降级

五、把 RAS 能力落到监控与演练上

硬件能力只有被观测和验证才具备可用性。建议在部署阶段完成三件事:其一,通过 rasdaemon 或 BMC 的 SEL 日志持续采集 CE/UCE 计数,并设置分级告警;其二,对内存镜像与备用做一次“拔除模拟”——在测试环境人为触发 Rank 失效,观察业务是否中断、容量与带宽如何变化;其三,对每个热插拔槽位执行一次上下电演练,确认 pciehp 绑定正确、驱动可自动重载。

需要强调的是,RAS 特性之间存在资源竞争。开启内存镜像会减少可用容量,可能影响虚拟机密度;UPI 链路降级会降低跨路带宽,可能拖慢数据库的远程 NUMA 访问。因此高可用设计不是“把所有开关都打开”,而是根据业务 SLA、容量预算与性能目标做取舍,并在变更后重新验证。

一个实用的检查顺序:先确认 BIOS 中 RAS 相关选项(Memory Mirroring / Sparing、PCIe Hot Plug、UPI 错误处理策略)与业务目标一致;再确认 OS 侧驱动与监控代理已就位;最后用一次受控故障演练验证“检测—隔离—恢复”链路是否真正闭环。