rustfs-erasure-codec 7.0.0

Rust implementation of Reed-Solomon erasure coding
Documentation
# Reed-Solomon-Erasure 实施作战手册

## 1. 目的

本手册不是背景分析,而是面向实际动手改造时的执行指南。

如果主方案文档回答的是“做什么、为什么做”,本手册回答的是:

- 先做哪一步
- 每一步改哪些文件
- 每一步如何验证
- 每一步怎么切 PR
- 哪些风险必须在提交前拦住

## 2. 推荐实施顺序

### 第一波

目标:

- 最小风险建立可持续演进的骨架

任务顺序:

1. 阶段 1:benchmark 和 correctness 基线
2. 阶段 2:`CodecOptions``reconstruct_some``fast_one_parity`

这一波不要碰:

- runtime SIMD dispatch
- Leopard
- 大规模 reconstruction 重构

### 第二波

目标:

- 吃到最直接的性能红利

任务顺序:

1. chunk scheduler
2. auto thread policy
3. encode 并行
4. verify 并行
5. reconstruct 并行

### 第三波

目标:

- 让 SIMD 能力从“能用”升级为“现代化”

任务顺序:

1. backend 抽象
2. runtime dispatch
3. GFNI 优化
4. ARM64 路线强化

### 第四波

目标:

- 深化 reconstruction 性能

任务顺序:

1. cache metrics
2. `reconstruct_data` 优化
3. `reconstruct_some` 联动
4. 命中模式 benchmark

### 第五波

目标:

- 让项目进入可长期维护状态

任务顺序:

1. self-test
2. backend consistency
3. benchmark regression gate
4. 发布清单

## 3. 推荐 PR 切分

### PR 1

主题:

- benchmark matrix
- benchmark 输出
- golden vector baseline

建议改动文件:

- `benches/*`
- `tests/*`
- `docs/*`

### PR 2

主题:

- `CodecOptions`
- inversion cache 开关

建议改动文件:

- `src/core.rs`
- `src/lib.rs`
- `tests/*`
- `docs/*`

### PR 3

主题:

- `reconstruct_some`
- `split` / `join`

### PR 4

主题:

- `fast_one_parity`

### PR 5

主题:

- chunk scheduler
- auto threads

### PR 6

主题:

- encode/verify 并行化

### PR 7

主题:

- reconstruct 并行化

### PR 8

主题:

- SIMD backend abstraction

### PR 9

主题:

- runtime dispatch
- GFNI / ARM64 改进

### PR 10

主题:

- self-test
- regression gate

## 4. 文件级改造建议

### `src/core.rs`

优先负责:

- `CodecOptions`
- matrix mode 接口
- cache 策略
- reconstruction API
- 并行调度接入

### `src/galois_8.rs`

优先负责:

- backend 分发层
- scalar fallback
- SIMD 接口适配

### `simd_c/reedsolomon.c`

优先负责:

- 保留现有 SIMD 核
- 作为 runtime dispatch 的一个后端来源

### `build.rs`

优先负责:

- backend 编译组织
- 弱化固定 `-march=haswell`

### `benches/*`

优先负责:

- 统一 benchmark 口径
- ISA/feature 元数据输出

## 5. 每一步的验证要求

### 通用验证

每次核心改动后至少执行:

- `cargo check --tests`
- `cargo test --no-run`

若涉及 bench:

- `cargo check --benches`

若涉及 `no_std`:

- 至少做一次 `no_std` 方向编译检查

### 并行相关验证

必须新增:

- 单线程结果与多线程结果一致性测试
- 小 shard 和大 shard 的性能对比

### SIMD 相关验证

必须新增:

- scalar vs SIMD 输出一致性测试
- 至少一组随机输入 hash 对照
- 至少一组固定 golden vector 对照

## 6. 性能门槛建议

### 并行阶段门槛

- `10+4, 1MiB` encode 吞吐提升目标:`>= 2x`
- `64KiB` 场景退化限制:`<= 10%`

### SIMD 阶段门槛

- GFNI 对比 AVX2:目标 `15%~30%+`
- ARM64 路径:至少无退化,理想目标 `10%+`

### reconstruction 阶段门槛

- 常见重复缺失模式下 `reconstruct_data` 要优于当前基线

## 7. 风险拦截点

出现以下情况时,不建议继续扩大改造范围:

1. benchmark 波动过大,无法说明收益
2. scalar 和 SIMD 结果出现一次不一致
3. 并行路径在小 shard 明显恶化
4. options 设计已让 API 变得混乱

## 8. 实施纪律

1. 每一波改造都要有“前后 benchmark 对照”。
2. 不要在没有 benchmark 的情况下声称优化成功。
3. 不要把 SIMD、并行、API 改造混在一个大 PR 中。
4. 任意一步出现 correctness 不稳定,先停下来补护栏,再继续优化。

## 9. 建议的第一批实际落地内容

建议直接开始做下面这组内容:

1. benchmark matrix
2. golden vectors
3. `CodecOptions`
4. `reconstruct_some`
5. `fast_one_parity`

原因:

- 风险小
- 架构收益高
- 能为后续并行与 SIMD 提供稳定支点