2. Intel Xeon可用性技术全景
在讨论业务连续性与故障切换之前,必须先建立一张“技术地图”:Intel Xeon 平台上究竟有哪些可用性机制,它们分别工作在什么层级、解决什么类型的故障、彼此之间如何衔接。只有把这张地图看清楚,才能理解为什么某些故障可以做到业务无感,而另一些故障仍然会导致服务中断。
Intel Xeon 的可用性能力通常被统称为 RAS——Reliability(可靠性)、Availability(可用性)、Serviceability(可服务性)。RAS 不是单一功能,而是一整套从芯片内部到系统外部的分层防御体系。它的核心思路是:能纠正的错误就地纠正,不能纠正的错误尽早隔离,必须停机的操作尽量在线完成。
一、RAS 的分层结构
从下往上,Xeon 的 RAS 能力大致可以分为四层:
- 芯片级:CPU 内部缓存、TLB、执行单元的 ECC 与奇偶校验,以及 Machine Check Architecture(MCA)对错误的捕获与上报。
- 内存级:ECC、SDDC、DDDC、内存镜像(Memory Mirroring)、内存备用(Memory Sparing)、ADDDC 等。
- I/O 级:PCIe Advanced Error Reporting(AER)、PCIe 热插拔(Hot-Plug)、链路降速与重训练。
- 平台级:BMC/ME 的故障管理、操作系统 MCE 处理、虚拟机热迁移、集群 HA 切换。
这四层不是孤立的。一个内存 UE(不可纠正错误)会先被 MCA 捕获,再由固件或 OS 决定是隔离页面、触发镜像切换,还是直接宕机;而宕机之后是否影响业务,则取决于上层是否有集群或虚拟化层的故障切换。理解这条链路,是设计可用性方案的基础。
二、Machine Check Architecture:错误的第一现场
MCA 是 Xeon 上错误报告的核心机制。它通过一组 MSR(Model Specific Register)记录错误信息,主要包括:
- MCG_CAP:全局能力寄存器,说明支持多少个 bank。
- MCi_STATUS:每个 bank 的状态寄存器,记录错误类型、地址、是否可纠正等。
- MCi_ADDR / MCi_MISC:错误地址与附加信息。
- MCG_STATUS:全局状态,指示是否有未处理的 MCE。
当 CPU 检测到错误时,会填充对应 bank 的寄存器,并可能触发 CMCI 中断(Corrected Machine Check Interrupt)或直接触发 MCE。CMCI 用于可纠正错误,通常由 OS 记录并继续运行;MCE 用于不可纠正错误,可能导致进程被杀甚至系统宕机。
实际运维中,可以通过 rasdaemon 或 mcelog 观察这些事件。例如:
# 查看可纠正内存错误统计
ras-mc-ctl --errors
# 典型输出片段
Corrected memory errors:
1 2024-06-11 10:22:31 +0800 CPU 0 Bank 7 DIMM_A1 CE count=3
2 2024-06-11 10:25:02 +0800 CPU 0 Bank 7 DIMM_A1 CE count=5
如果同一 DIMM 的 CE 计数在短时间内快速增长,说明该内存条正在劣化,应安排更换。这正是 RAS 中“可服务性”的体现:错误被记录、被统计,运维人员据此提前干预,而不是等到 UE 导致宕机。
三、内存镜像与备用:把 UE 挡在业务之外
内存是 Xeon 平台上故障率相对较高的部件。针对内存错误,Xeon 提供了多种保护模式:
- ECC:纠正单比特错误,检测双比特错误。
- SDDC:单设备数据纠正,可纠正单个 DRAM 芯片内的多比特错误。
- DDDC:双设备数据纠正,进一步扩展纠正能力。
- Memory Mirroring:将内存分为主副本和镜像副本,写操作同时写入两份,读操作从主副本读取。主副本发生 UE 时,切换到镜像副本。
- Memory Sparing:预留部分内存作为备用,当某个 rank 错误过多时,将数据迁移到备用 rank。
镜像模式会牺牲一半内存容量,但换来的是内存 UE 时业务不中断。在虚拟化或数据库场景中,这种取舍往往是值得的。配置方式通常在 BIOS 中设置,例如将 Memory Mode 设为 Mirroring,或通过 dmidecode 确认当前模式:
# 查看内存镜像状态
dmidecode -t memory | grep -i "mirror"
# 示例输出
Memory Mirroring: Enabled
四、PCIe 热插拔与 AER:I/O 故障的在线处理
PCIe 设备(网卡、HBA、GPU)的故障同样会影响业务。Xeon 平台通过 AER 报告 PCIe 链路错误,包括可纠正错误和不可纠正错误。对于可纠正错误,系统记录并继续;对于不可纠正错误,可能触发链路重训练或设备隔离。
PCIe 热插拔则允许在不关机的情况下更换故障卡。它依赖平台、BIOS、OS 和驱动共同支持。在 Linux 下,可以通过以下命令观察和管理:
# 查看 PCIe AER 错误统计
lspci -vvv | grep -A 10 "Advanced Error Reporting"
# 热插拔操作示例(需硬件支持)
echo 0 > /sys/bus/pci/slots/3/power
echo 1 > /sys/bus/pci/slots/3/power
热插拔的价值在于:当网卡故障时,可以在线更换并恢复链路,而不必重启整台服务器。对于双网卡绑定或 SR-IOV 场景,配合上层冗余,业务可以做到几乎无感。
五、QuickAssist:卸载与加速中的可用性
Intel QuickAssist Technology(QAT)是集成在部分 Xeon 中的加速引擎,用于加解密、压缩等操作。它本身不是故障切换机制,但在可用性架构中扮演重要角色:通过卸载 CPU 的加密负载,降低 CPU 占用,使系统在高负载下仍能稳定响应。同时,QAT 设备也支持错误报告和恢复,配合驱动可以实现加速卡故障时的回退。
六、技术栈全景图
下面这张图把上述技术按层级和故障切换关系组织起来,帮助建立整体认知:
从图中可以看到,故障切换并不是某一层的单独行为,而是自下而上的逐级响应:芯片级先捕获,内存级尝试纠正或切换,I/O 级尝试隔离或降级,平台级最终决定是否触发业务迁移。每一层都在尽力把故障“消化”在自己这一层,只有当本层无法处理时,才向上传递。
七、实际运维中的观察与判断
理解了技术栈之后,实际工作中最重要的是知道“看什么、怎么判断”。以下是一组常用的观察点:
| 观察对象 | 工具/命令 | 判断依据 |
|---|---|---|
| 可纠正内存错误 | ras-mc-ctl --errors | 同一 DIMM CE 快速增长 → 安排更换 |
| 内存镜像状态 | dmidecode -t memory | 确认 Mirroring 是否启用 |
| PCIe AER 错误 | lspci -vvv | 不可纠正错误 → 检查链路或更换设备 |
| MCE 日志 | dmesg | grep -i mce | UE 出现 → 评估是否触发宕机或迁移 |
| BMC 告警 | IPMI / Redfish | 硬件级告警 → 结合日志定位部件 |
需要强调的是,RAS 特性的启用与否,往往取决于 BIOS 设置和硬件配置。例如内存镜像需要成对的内存条和正确的 BIOS 选项;PCIe 热插拔需要背板、BIOS 和 OS 共同支持。在规划阶段就应确认这些条件,而不是等到故障发生时才检查。
dmidecode、ras-mc-ctl 和 BMC 界面确认 RAS 特性状态,并建立基线。日常运维中定期检查 CE 计数和 AER 日志,把“事后救火”变成“事前更换”。
总结来说,Intel Xeon 的可用性技术栈是一个从芯片到平台的纵深防御体系。MCA 负责发现和报告,内存镜像与备用负责内存层面的切换,PCIe AER 与热插拔负责 I/O 层面的恢复,QuickAssist 通过卸载提升整体稳定性,而 BMC、OS 和集群 HA 则完成最终的故障切换。理解每一层的能力和边界,才能在实际业务连续性设计中做出正确的取舍。