为什么映射表不能就地写
逻辑地址到物理页的映射以 4KB 为粒度维护时,表项规模与容量成正比:单盘容量越大,常驻的映射结构越难在掉电瞬间一次性落盘。J750 的 15.36TB 容量点与 122.88TB 级别的高容量产品之间差了一个数量级,这个差距直接决定了“掉电时把整张表刷下去”是否还成立。就地覆盖一个映射条目,意味着旧值与新值在同一物理位置上短暂共存——掉电正好落在这个窗口里,恢复出来的既不是旧映射,也不是新映射。
两条崩溃一致性路径
- 影子更新:新版本写到空闲位置,最后以一次原子的根指针切换生效。代价是每次提交都要为上层索引节点付出额外写入,更新越随机,附加写入越多。
- 日志回放:只把映射变更以追加记录写入日志区,表本体按周期做检查点。代价是恢复时间等于回放最后一个检查点之后的全部日志。
工程上很少二选一。J750/J770 的固件定义把两者组合:表本体走检查点,检查点之间的增量走日志,根指针切换只发生在检查点边界。
检查点间隔被谁约束
检查点拉得越稀,稳态写放大越低,但掉电后需要回放的日志越长;拉得越密,恢复越快,但常态带宽被元数据写入吃掉。真正的硬边界来自 PLP——掉电瞬间保持电容的能量只够完成有限次编程操作,日志尾部尚未落盘的部分必须在这个预算内写完。所以检查点间隔不是一个可以自由调的性能旋钮,而是由掉电能量预算倒推出来的上限。
验证怎么做才算数
断电测试如果只在空闲时刻拔电,几乎测不出任何问题。有意义的做法是让掉电时刻精确落在编程操作、日志写入、检查点切换这三类临界区内,上电后再逐条比对主机侧写入记录与盘内映射结果。J750 与 J770 目前处于产品定义/EVT 阶段,这类注入式验证是内部工程平台 JH-E4U-C 上的常规项目,而不是量产前的一次性抽检。
