计算机体系结构 E06:可靠性与持久性
计算机体系结构 E06:可靠性与持久性
核心问题
CPU 已经读到新值,是否意味着掉电后还能读到它?可见性只描述运行中的读取关系。持久性还要区分写回已经发起、仍在 pending、已经 drained,以及持久域是否能在掉电时保存对应数据。
范围与证据等级
证据等级为功能执行。第一部分穷举固定 extended Hamming (8,4) 教学码;第二部分执行五个持久状态,但不连接真实 NVDIMM、filesystem 或 PMDK。模型不能代表 ECC DIMM、Chipkill 或任意长度事务原子性。
核心案例一:纠错能力必须写出码字范围
布局使用 4 个数据位、3 个 Hamming parity 位和 1 个 overall parity 位。16 个数据字的无错编码全部判为 clean;每个 8 位码字的 8 个单比特翻转共 128 个,全部归类为可纠正;每个码字的 28 个双比特组合共 448 个,全部检测为双错。
这组穷举只覆盖固定码。双错“检测到”不等于“纠正”,更多比特同时翻转也没有保证。
核心案例二:visible、pending、drained 与掉电持久
store_data 后数据对 CPU 可见,但 powerfail_guaranteed=false。flush_data 只把写回置为 pending,仍未保证掉电持久;drain_data 后才标记 drained 和保证持久。commit marker 也要经历 store、flush 和 drain,不能把 flush 当成事务提交。
模式:先画持久域,再排列数据与提交标记
1 | |
数据库 WAL、持久队列和内存映射日志都要先说明持久域,再证明顺序。cache coherence 不能替代掉电保证。
验收结果
本批脚本退出 0,得到 16 个 clean、128 个单错可纠正和 448 个双错可检测案例;持久状态显式记录 visible、pending、drained 与 powerfail_guaranteed。输出保留 real_nvdimm_measurement=false。
模式速查
| 状态 | 运行中可见 | 掉电保证 |
|---|---|---|
| store | 可以 | 未建立 |
| flush pending | 可以 | 未建立 |
| drained | 可以 | 在本题设持久域内成立 |






