内存镜像模式的取舍
内存镜像(Memory Mirroring)在两组内存之间保存互为副本的数据:正常读写同时写入两侧,读可以来自任意一侧,一旦一侧出现不可纠正的错误,系统仍能继续运行。它换来的是更高的可用性,代价是可用容量大幅下降——两组内存里只有一组是有效容量。这里要区分它与 ECC 的关系:ECC 处理颗粒级的位错误并纠正,镜像应对的是通道或控制器级的失效,两者是叠加而非替代。
基本信息
| 适用场景 | 对可用性要求高于内存容量的业务 |
|---|---|
| 实现原理 | 两组内存保存相同数据互为副本 |
| 容量代价 | 可用容量显著下降(按平台实现,通常约一半) |
| 配置位置 | BIOS 中内存 RAS 相关配置项 |
| 前提条件 | 按手册要求插满对应通道且配置对称 |
| 验证方式 | 上电后核对系统可用容量与模式状态 |
典型使用场景
- 金融交易、核心数据库等对停机极为敏感的业务
- 内存容量有余但可用性要求高的场景
- 故障演练:配合单侧故障注入验证切换行为
- 评估阶段:比较镜像与备用等 RAS 模式的实际代价
- 验收核对:确认交付机器的 RAS 模式与设计一致
核对容量与模式
核对容量与模式
# BIOS:在内存 RAS 配置中开启镜像(菜单路径随机型不同)
# 开启前后对比系统可见容量与主板支持上限
dmidecode -t 16 | grep -i 'Maximum Capacity'
dmidecode -t 17 | grep -E 'Size|Locator' | head -20
# 系统侧查看实际可用内存
free -h | head -2
# 与 NUMA 分布对照,确认两组镜像内存跨节点分布情况
numactl --hardware | head -20RAS 模式对照
| 模式 | 机制 | 容量代价 |
|---|---|---|
| ECC | 纠正单比特错误并检测多比特错误 | 无额外容量损失 |
| 镜像 | 两组内存互为副本 | 可用容量明显下降 |
| 备用(Sparing) | 保留备用内存用于替换故障区域 | 按配置比例损失 |
| 锁定步进(Lockstep) | 两侧同步执行并比对结果 | 需按平台支持情况核对 |
镜像与 ECC 是叠加关系而不是替代关系:ECC 负责纠正颗粒级位错误,镜像负责在一侧通道或控制器失效时保住可用性。
开启镜像会改变可用容量:系统重启后操作系统看到的内存会明显减少,若未提前与业务方确认,可能被误判为硬件故障或配置错误。