506eccc68f
本次会话先后销项与关闭: - E-61 SD2506 清 INTAF:原实现只读取 CTR1,而按手册 ARST=0 时读操作 不清标志,属空操作;改为读-改-写 CTR1,并按手册订正 CTR1 位宏 (INTAF/INTDF/BLF 位置,ARST 归 CTR3) - E-16 cfg_file:新增 CFG_FILE_MAX_NAME_LEN(段名/键名 ≤15),注册时 拒绝超长键名;s_gen_document 两处 snprintf 改检查式;补 TC-CFG-024 用例(主机单测 149→151 PASSED) - E-23 TC704:PHASE7_MULTI_COUNT 8→5(并发上限 = 8 − 3 个常驻监听), accept 失败分支加网络代次检查(网络重建即重建监听) - E-26(UDP)按“保留 API + 文档定案”关闭;E-30 评估为不必要后关闭; N-4(ACCEPT 决定不实施)关闭 审计文档剩余 5 项 P2 + 2 项监督,经用户裁定“都不重要”后整体删除: - 删除 docs/问题记录/错误码传播审计.md(634 行) - 九类缺陷模式表迁入 docs/编号规范.md §4.2.1(PAT-01~09) - E-xx 转为纯历史编号族:编号规范 §4.1 属主改“无(原属主已删除)”, §4.3 保持冻结;全仓 26 处引用按“保留编号、去悬空文档名”处理 - 顺带修正 N-4 收口遗留:排期详述 C1 才是 E-25/E-27/E-28 的承载处 (审计 §4 曾误写为登记簿);README 两处 C1 旧名改回“net 层跨上下文收口” 一并提交此前遗留的体系层评审报告 2026-10-14 复核 WIP(六维评分复核、 未闭环 Top 5→3、三区水位实测刷新)。 校验:Keil 构建 0 错误 0 警告(Code=212344);check_doc_links --sections-strict 与 --all(142 文档)通过;内存双台账刷新后均 PASS。
6.2 KiB
6.2 KiB
存储栈 RAM 优化调研
版本 v1.1 日期 2026-09-21 作者 AI 辅助调研 数据来源:
data/ram_report_20260921.md(.map 静态占用)+ 逐行代码核验(nand_ftl.c/gd5f2gq5ue.c/Lib/dhara/Lib/FatFs/ffconf.h/lftpd*) 定位:RAM使用分析与优化方案.md的存储专项补充;优化项编号 P0/P1/P2,与docs/内存管理/RAM使用分析与优化方案.md§6 的 S 序号在"规划"一节对齐 v1.1 清理(2026-09-21 同日):移除已落地的 P0-1 BBT 页缓冲收缩(−1,776B,commitbe1a30a)与编程回读校验整体移除的实施记录(详见 GD5F TRAP-GD5F-05),以及过期逐模块基线表;仅保留未实施项与回归要求
1. 现状约束(不变,是下述全部方案的依据)
- 存储栈静态 RAM 全在 RW_IRAM1(主 SRAM 128KB);页缓冲(nand_ftl 3×2KB + gd5f 页缓冲/位图)走 SPI1 DMA(阈值 >1024B),DMA1/DMA2 物理不可达 CCM → 不能直迁 CCM(唯一途径:迁移 +
gd5f_dma_buf_ok()运行时守卫自动回落 CPU 轮询(2026-09-21 加固),不会静默失败,代价仅每页零点几 ms CPU) - 3×2KB 页缓冲是结构成本不可直缩:dhara journal 要求整页 checkpoint(
journal.c:196整页 memset);512B 扇区落 2KB 页必须整页 RMW;可动的只有s_copy_buf(→ P0-2) - CPU-only 缓冲(lftpd static ~3.6K / cfg_file 0.7K / FATFS win 0.6K / lftpd_io 0.6K)迁 CCM 零代价(→ P1-5①)
- 栈上 FIL 重复占深链:syslog 两处、cfg 存储两处、开机探针各一个局部
FIL(每个含 512B 私有 buf,≈552B),全压在 defaultTask 最坏链 2,776B 内(→ P1-4 靶点) - FatFs 配置已低 RAM 取向:
FF_MAX_SS=512、FF_USE_LFN=0、FF_VOLUMES=1、FF_FS_LOCK=0;FF_FS_REENTRANT=1为 defaultTask/ftpTask 并发访问必需,勿动 - 教训(2026-09-21):任何比对式校验必须在两份独立副本间进行(U-Boot
sf test双缓冲形态)——旧 GC 拷贝自比对缺陷已随回读校验整体移除而消失;若未来测试构建恢复回读诊断,勿重蹈此坑
2. 方案清单(未实施)
| # | 方案 | 省 RAM | 区域 | 风险 | 验证 |
|---|---|---|---|---|---|
| P0-2 | s_copy_buf 2048→512:GC 拷贝改分段 read→program_load(program_load/read_from_cache 支持列地址);纯 RAM 优化(GC 拷贝暂存减半) |
−1,536B(可选,不计入当前预期) | SRAM1 | 低(仅动拷贝机制) | 待 RAM 余量需要时再议 |
| P0-3 | lftpd 缓冲收紧:response 512→256、read_buffer 512→256、arg_buf 512→256、name 256→128 ×2(本卷仅 8.3 短名,路径深度浅);数据块 2×1024 与 message 不动 | −1,024B | SRAM1 | 低(FTP 客户端实测行长远低于新值) | @build + FTP 上传/下载/LIST 闭环 + @test |
| P1-4 | FF_FS_TINY=1:删每 FIL 私有的 512B buf,文件数据走 FatFs->win 共享窗 |
静态 −528B;且栈上每处 FIL 峰值 −528B(defaultTask 最坏链 2,776→~2,250,实测峰 2,136→~1,600) | SRAM1 + CCM 栈 | 中(所有文件 I/O 经 512B 窗 bounce,FTP 吞吐 −20~40%;LIST 与文件读交错只影响速度) | 存储套件 + FTP 吞吐实测 + 日志/配置闭环;与 S7 缩栈捆绑(直接支撑 defaultTask 降档) |
| P1-5 | APP_CCM_ENABLE 门(与 S6 同宏):①CPU-only 缓冲迁 CCM——lftpd static 3.6K + cfg_file 0.7K + FATFS win 0.6K + lftpd_io ≈ −4.9K 零代价;②DMA 页缓冲(nand_ftl 4.6K + gd5f 位图/页 0.8K)迁 CCM 走轮询 ≈ −5.4K,需实测吞吐 |
−10.3K | SRAM1→CCM | 低①/中② | 分段实施;每步跑 ram_report.py + @test + FTP 吞吐 |
| P2-6 | NAND copy-back 命令(0x15→0x10)替代主机搬页:省 s_copy_buf 的拷贝用途 + 减半 SPI 流量 |
−512B(P0-2 后) | SRAM1 | 高(片上 ECC 在 copy-back 下的语义须台架实证) | 仅评估,暂缓 |
| P2-7 | lftpd 数据块 2×1024→512 | −1,024B | SRAM1 | 吞吐 −~30% | RAM 仍紧时才做 |
| P2-8 | syslog/cfg 共享一个静态 FIL(同任务串行) | 净≈0(静态+528/栈−528) | — | 不推荐:P1-4 已覆盖同一收益面 | — |
明确不做:移除 dhara(丢掉电一致性与坏块重映射,代价不对称);journal checkpoint 分片(违反 dhara 协议);调 gc_ratio(无 RAM 收益);FF_FS_REENTRANT=0(defaultTask+ftpTask 并发访问 FatFs 必需)。
3. 分阶段规划(与 RAM使用分析与优化方案.md §6 S 序号对齐)
| 阶段 | 内容 | 收益 | 前置 |
|---|---|---|---|
| 第一步(独立小批) | P0-3(P0-2 搁置,待 RAM 余量需要时再议) | −1,024B | 无 |
| 第二步(并入 S7 缩栈批) | P1-4 FF_FS_TINY=1 → 复跑 stack_report.py → defaultTask 降档(最坏链 ~2,250 支撑 3,584B 配置,余量 37%)+ 其余任务按 S7 目标 |
−528B 静态 + 栈档下调释放 CCM 堆 | 第一步合入 |
| 第三步(与 S6/S8 同批) | 先 S8 堆 48K→32K(CCM 释放 ~16K),再 P1-5 ①→② 分批迁 CCM | SRAM1 再 −10.3K;CCM 占用 +10.3K(由 S8 腾挪覆盖) | S8 或同批评估 CCM 水位 |
全部落地后存储栈预期:SRAM1 常驻降至 ~1.9KB(现 13.7KB,其中 P0-1 已省 1,776B 不重复计;余下仅小状态量),页缓冲驻 CCM(轮询),未实施项合计换回 SRAM1 ≈ −11.9K(P0-2 搁置,其 −1,536B 不计);叠加 S5(LVGL 40K→16K)后 SRAM1 余量 >65KB。
4. 回归与基线
- FTP 吞吐基线(2026-09-21 实测,4MB 文件,端到端含网络;瓶颈在存储侧,100M 网络非瓶颈):STOR 126.9 KB/s(32.3s)/ RETR 321.4 KB/s(12.7s),回传逐字节 MATCH(测试文件已自清理)→ P0-3/P1-4 前后各留一轮实测对比(P1-4 预期吞吐降幅 20~40%)
- P1-4 前后各跑一次
stack_report.py+ram_report.py(AGENTS.md 门禁) - P1-5 的 ②(页缓冲入 CCM 走轮询)须以实测吞吐定去留:若 NAND 读吞吐降幅 >30%,则只迁 CPU-only 侧(①)
- P0-2/P2-x:待 RAM 余量需要时再议
- 下次存储改动照常执行台架破坏性套件 + 掉电 resume
- 基线数字可用
data/ram_report_20260921.md(P0-1 前快照)复核;实施后重生成基线报告并回填总方案