Skip to content

perf(chip): 单核 WCH 口 MAX_HARTS 取 1——READYQ 静态从 4K 缩到 256B - #20

Merged
gqf2008 merged 1 commit into
masterfrom
perf/ch57x-max-harts
Sep 19, 2026
Merged

gqf2008 merged 1 commit into
masterfrom
perf/ch57x-max-harts

Conversation

@gqf2008

@gqf2008 gqf2008 commented Sep 19, 2026

Copy link
Copy Markdown
Owner

问题:READYQ = [[TaskQueue; 16]; MAX_HARTS],而 MAX_HARTS 恒为 16 → 单核口也静态占
16 × 16 × 16B = 4096B(实测符号 READYQ = 0x1000)。CH572 只有 12K RAM,这一项等于
三分之一的 RAM,直接挤掉了应用可用的堆。

改法:MAX_HARTS 移进 src/chip/env.rs 按芯片取值——单核 WCH 口(ch583/ch572)取 1,
其余口(含多核的 qemu_riscv)保持 16;src/port.rs 改为 re-export,既有
crate::port::MAX_HARTS 的引用路径不变(全部调用点沿用 .min(MAX_HARTS-1) 的既有守卫)。

效果(实测符号/段地址)

口 READYQ _sheap 可用堆
ch572 0x1000 → 0x100 0x20001180 → 0x200001B0 7.6K → 11.6K
ch583 0x1000 → 0x100 前移 3.8K 同步 +3.8K

由此把 ch572 示例从"3 个 192 字栈任务 + 5.5K 堆"那种 12K 下的妥协,恢复成
5 个任务用内核默认 256 字栈(1K)+ Queue 演示 + 9.5K 堆——实测账:
5×1.19K + 软件定时器 1.16K + idle 1.16K ≈ 8.3K,余量 ~1.4K(堆顶 0x200027B0,
距中断栈基 0x20002E00 还有 ~1.6K)。

验证

  • bash ci/gate.sh 全绿:host 159 / ISR 向量 / 启动头 ×3 / 乒乓 A×200 B×200 /
    kernel_tests 24-24 ×3 / qemu_smp 9/9——最后一项专门证明多核口未受影响
    (MAX_HARTS 在 qemu_riscv 仍是 16)。
  • 14 口 cargo build --lib 全绿;ch583/ch572 示例构建 + 启动头产物校验 PASS;宿主 82 passed。

Refs #14

问题:`READYQ = [[TaskQueue; 16]; MAX_HARTS]`,而 `MAX_HARTS` 恒为 16 → **单核口**也静态占
`16 × 16 × 16B = 4096B`(实测符号 `READYQ = 0x1000`)。CH572 只有 12K RAM,这一项等于
**三分之一的 RAM**,直接挤掉了应用可用的堆。

改法:`MAX_HARTS` 移进 `src/chip/env.rs` 按芯片取值——单核 WCH 口(ch583/ch572)取 **1**,
其余口(含多核的 qemu_riscv)保持 16;`src/port.rs` 改为 re-export,既有
`crate::port::MAX_HARTS` 的引用路径不变(全部调用点沿用 `.min(MAX_HARTS-1)` 的既有守卫)。

## 效果(实测符号/段地址)

| 口 | READYQ | `_sheap` | 可用堆 |
|---|---|---|---|
| ch572 | 0x1000 → **0x100** | 0x20001180 → **0x200001B0** | 7.6K → **11.6K** |
| ch583 | 0x1000 → 0x100 | 前移 3.8K | 同步 +3.8K |

由此把 ch572 示例从"3 个 192 字栈任务 + 5.5K 堆"那种 12K 下的妥协,恢复成
**5 个任务用内核默认 256 字栈(1K)+ Queue 演示 + 9.5K 堆**——实测账:
5×1.19K + 软件定时器 1.16K + idle 1.16K ≈ 8.3K,余量 ~1.4K(堆顶 0x200027B0,
距中断栈基 0x20002E00 还有 ~1.6K)。

## 验证

- `bash ci/gate.sh` 全绿:host 159 / ISR 向量 / 启动头 ×3 / 乒乓 A×200 B×200 /
  kernel_tests 24-24 ×3 / **qemu_smp 9/9**——最后一项专门证明多核口未受影响
  (`MAX_HARTS` 在 qemu_riscv 仍是 16)。
- 14 口 `cargo build --lib` 全绿;ch583/ch572 示例构建 + 启动头产物校验 PASS;宿主 82 passed。

Refs #14
@gqf2008
gqf2008 merged commit 37142a2 into master Sep 19, 2026
2 checks passed
@gqf2008
gqf2008 deleted the perf/ch57x-max-harts branch September 19, 2026 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant