From 5e8b56f23e84961a4cbbfc8634049d334372f97f Mon Sep 17 00:00:00 2001 From: Songlx516 Date: Wed, 16 Sep 2026 14:31:25 +0800 Subject: [PATCH] docs: record the multithreaded LZMA2 path and the ZIP fsync removal --- HANDOVER.md | 2 +- docs/EXTRACTION-PERF.md | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/HANDOVER.md b/HANDOVER.md index 7f017a7..47e1ddf 100644 --- a/HANDOVER.md +++ b/HANDOVER.md @@ -258,7 +258,7 @@ ELF 已构建,但需装 PS5 实测: ### 可选项(非阻塞) -- **性能**:实测上游(7-Zip 本体)在 **7z 格式上快 1.9×(单线程)/ 3.4×(8 线程)**;ZIP 无显著差异。差距不在我们的架构(我们比 SDK 自己的 `SzArEx` 路径还快 1.02×)。**汇编解码器已于 2026-09-16 启用**(`Asm/x86/LzmaDecOpt.asm` + jwasm + `-DZ7_LZMA_DEC_OPT`,1.26×,无 jwasm 自动退纯 C),剩余差距是**多线程 LZMA2**(未做)。完整数据与复现方式见 `docs/EXTRACTION-PERF.md`,基准工具 `tests/bench_driver.py` +- **性能**:实测上游(7-Zip 本体)在 **7z 格式上快 1.9×(单线程)/ 3.4×(8 线程)**;ZIP 无显著差异。差距不在我们的架构(我们比 SDK 自己的 `SzArEx` 路径还快 1.02×)。**已全部落地(2026-09-16)**:①汇编解码器(`LzmaDecOpt.asm`+jwasm,1.26×,无 jwasm 自动退纯 C)②多线程 LZMA2(`Lzma2DecMt`,8 线程,1.37×,线程失败自动降级 chain;BCJ2/加密布局仍走 chain)③ZIP 逐条目 fsync 移除(8000 文件 ≥14×)。7z 现与 7-Zip 单线程打平、ZIP 已压过官方(本机受 Defender 拖累不可比,PS5 无该因素)。RAR 与官方 UnRAR 同速(unrar 自带 `target("aes")` SIMD 已启用,无逐条目 fsync)。完整数据见 `docs/EXTRACTION-PERF.md`,基准工具 `tests/bench_driver.py` - fsync 批量化(每 64MB/N 条刷一次)—— 9.5 万文件级可省 20–30 分钟 - 解压失败保留 staging 支持续解(中等改动) - 进度条 % / 文字进度 / ETA 三处口径统一为字节 diff --git a/docs/EXTRACTION-PERF.md b/docs/EXTRACTION-PERF.md index e5d17bb..c7b622d 100644 --- a/docs/EXTRACTION-PERF.md +++ b/docs/EXTRACTION-PERF.md @@ -7,8 +7,18 @@ > `third_party/7z/`,jwasm `-elf64 -DABI_LINUX` 汇编进 PS5 与 Linux 两条链路, > `LzmaDec.o` 加 `-DZ7_LZMA_DEC_OPT`。实测 **1.39 s → 1.05–1.13 s(1.26×)**,解出字节与 > C 版逐字节一致;7z 测试矩阵 28 checks 全过。Makefile 对该优化做了条件化(无 jwasm 自动 -> 退回纯 C)并依赖 Makefile 本身触发重编(flag 变化不会被 make 察觉)。ELF -> 1,017,944 B / sha256 `7fc0881b…`。方案 B(多线程)仍未做,见第四节。 +> 退回纯 C)并依赖 Makefile 本身触发重编(flag 变化不会被 make 察觉)。 +> +> **✅ 方案 B 已落地(2026-09-16)**:`Lzma2DecMt.c` + `MtDec.c` + `Threads.c` 已 vendor, +> 单一纯 LZMA2 folder(7-Zip 默认布局)走 SDK 并行解码器(`src/sevenz_mt.c` 适配层), +> 8 线程 + 1 MiB inBufSize_MT;`SZ_ERROR_THREAD` 自动降级回单线程 chain(BCJ2/加密/奇异 +> 布局本来就由 chain 负责)。实测 329 MiB:1.05 s → **0.77 s(1.37×)**,与 7za -mmt=off +> 打平(898 ms);7za -mmt=8 = 485 ms。7z/ZIP/RAR 163 checks 全绿。 +> +> **✅ ZIP 引擎 fsync 批量化(2026-09-16)**:逐条目 fsync 已移除(publish 是纯 rename、 +> 无续解功能,该 fsync 无收益;RAR/7z 引擎本来就没有)。8000 文件 fixture:fsync 版 +> \>200 s 未完成 → 无 fsync **14.5 s(≥14×)**。同机官方 7-Zip 反而要 >400 s(Defender +> 实时扫描逐文件查杀;PS5 无此因素)。 ## 结论