计算机体系结构 E06:可靠性与持久性

核心问题

CPU 已经读到新值,是否意味着掉电后还能读到它?可见性只描述运行中的读取关系。持久性还要区分写回已经发起、仍在 pending、已经 drained,以及持久域是否能在掉电时保存对应数据。

附件:E06-reliability.json。

范围与证据等级

证据等级为功能执行。第一部分穷举固定 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
data durable → commit marker durable

数据库 WAL、持久队列和内存映射日志都要先说明持久域,再证明顺序。cache coherence 不能替代掉电保证。

验收结果

本批脚本退出 0,得到 16 个 clean、128 个单错可纠正和 448 个双错可检测案例;持久状态显式记录 visible、pending、drained 与 powerfail_guaranteed。输出保留 real_nvdimm_measurement=false。

模式速查

状态 运行中可见 掉电保证
store 可以 未建立
flush pending 可以 未建立
drained 可以 在本题设持久域内成立

一手参考资料