docs(build): 修正三处「文档说法与实测不符」的注释(M96 复审 P2-1/2/3)
只改措辞与注释,**profile 数值一个没动**(release.package 仍是 opt-level="z" + cu16, fast 仍是 opt-2/thin/cu16/unwind)。 P2-1 `panic = "unwind"` 的理由原本写错了:原注释说「漏了这一行 `cargo test --profile fast` 起不来(test harness 依赖 unwind)」。实测三连否掉:`cargo build --profile release -v` 的 rustc 参数里**有** `panic=abort`、`--profile fast` 里没有(这行确实生效,可作证据);但 `cargo test --profile release -p unlucky-i18n --no-run`(abort 档)照样 Finished 并产出测试 二进制,`-v` 里 test 单元**没有** `-Cpanic=`,真跑 23 个测试全过 —— cargo 对 test 目标自己强制 unwind。所以理由改成「让 fast 档编出来的**二进制**走 unwind」,并把「能跑 cargo test」明确标为 **没有区分度**的证据。顺带记下 fast 继承 `strip="symbols"` ⇒ 能 unwind 但没有符号回溯。 P2-2 `[profile.fast.package."*"]` 的注释把机制说反了:原注释说「package 覆盖按 profile 分别 生效,release 的不影响 fast」。实测删掉这块后,fast 档的**外部依赖**直接变成 `opt-level="z"` (`slotmap`:1 那次 3 个单元 opt-2 → 删除后 3 个单元 opt-z),说明 `inherits` 会把 release 的 package 覆盖一起带过来。所以这块是**承重墙**,删了依赖会静默退回 z。注释按实测重写。 P2-3 「收益全在 `codegen-units = 16`」删掉:三组数据的唯一自变量是 opt-level(两臂都是 cu16), cu1→cu16 的收益本轮**没有同条件对照**,已明确标成未测、留待后续归因。同时补一句:GUI 相对旧 基线 +12.9% 里「代码增长」与「依赖 cu16」未分离(ull 只 +1.7%,在 +1~3% 口径内)。 注:P2-1 那条原始错误表述来自 tower 的 mission 任务书,不是 worker 的臆造。 验证:`cargo build --release --bins` rc=0(16m21s,产物字节与 §7.1 记录完全一致: 6,256,128 / 13,910,528 / 16,479,232),`cargo metadata` 通过,README 仍为 400 行(未破门禁)。
This commit is contained in:
1 parent
b9eae2bb73
commit
f6e55c5c7e
2 files changed
+31
-26
No files matched your search
+14
-9
@@ -116,8 +116,12 @@ strip = "symbols"
|
||||
# 全程序串行链接(375 个 crate 排队),一次性吃掉十几分钟。
|
||||
# - codegen-units = 16:给 codegen 留并行度,不再把整个 crate 挤成一个 CGU。
|
||||
# - opt-level = 2:介于 "z" 与 3 之间,"z" 会为了体积关掉一批循环/内联优化,代价是运行期。
|
||||
# - panic = "unwind":**必须显式写**。release 是 panic = "abort",inherits 会照抄下来,
|
||||
# 而 test harness 依赖 unwind —— 漏了这行 `cargo test --profile fast` 直接起不来。
|
||||
# - panic = "unwind":release 是 panic = "abort",inherits 会照抄。留着它是为了让 fast 档编出来的
|
||||
# **二进制**走 unwind(panic 会栈展开,不是直接 abort)。
|
||||
# ⚠️ 理由不是「不写就跑不了测试」:`cargo test` **不**依赖这一行 —— cargo 对 test 目标自己强制
|
||||
# unwind。实测 `cargo test --profile release -p unlucky-i18n`(release = abort 档)照跑,23 个
|
||||
# 测试全过,且 test 单元的 rustc 参数里**没有** `-Cpanic=`。别拿「cargo test 能跑」当这行生效的证据;
|
||||
# 要看就用 `cargo build --profile {fast,release} -v` 比 rustc 参数:release 有 `panic=abort`,fast 没有。
|
||||
#
|
||||
# ⚠️ 定位(实测,别误读):本机(12 核 + 机械盘源码盘 + -j 4)冷编译 fast = 24m27s,
|
||||
# **比 release 的 16m01s 还慢**,体积是 2.3 倍(36.41 vs 15.72 MiB GUI)。瓶颈在两个大
|
||||
@@ -132,19 +136,20 @@ panic = "unwind"
|
||||
|
||||
# P6(M96):依赖不需要为体积做极致优化,但**实测结论与直觉相反**——把依赖的 opt-level 从
|
||||
# release 的 "z" 抬到 3(本档最初就是这么定的)会让冷编译**更慢**、体积还更大:
|
||||
# 同机冷编译 opt-3 = 22m45s / 19.46 MiB(GUI),opt-"z" = 16m01s / 15.72 MiB。
|
||||
# 真正的收益全在 `codegen-units = 16`(并行 codegen),与 opt-level 无关;抬等级是在拿编译时间
|
||||
# 和体积换运行期。所以这里**只放宽并行度,opt-level 保持 "z"**,workspace 自己的 crate 仍吃
|
||||
# opt-level = "z" / 单 CGU。
|
||||
# 同机冷编译 opt-3 = 22m45s / 19.46 MiB(GUI),opt-"z" = 16m01s / 15.72 MiB(两臂同为 cu16)。
|
||||
# 所以这里**opt-level 保持 "z",只把并行度放到 16**;workspace 自己的 crate 仍吃 "z" / 单 CGU。
|
||||
# ⚠️ **未测**:cu1 → cu16 的收益本轮没有同条件对照(两臂都是 cu16,唯一自变量是 opt-level),
|
||||
# 所以「cu16 才是收益来源」不是实测结论,要归因得单独跑一轮 cu1 对照。另:GUI 体积相对旧基线
|
||||
# 涨了 12.9%(13.92 → 15.72 MiB),其中「代码增长」与「依赖 cu16」也没分离。
|
||||
# **只调优化强度**:panic 与 strip 绝不写进这里。那两项改变的是整个二进制的运行时行为
|
||||
# (panic 策略决定能否 unwind 出栈、strip 决定符号表留不留),不是「给依赖放宽」的范畴。
|
||||
[profile.release.package."*"]
|
||||
opt-level = "z"
|
||||
codegen-units = 16
|
||||
|
||||
# 快档的依赖覆盖单独写一遍:package 覆盖是按 profile 分别生效的(`[profile.release.package."*"]`
|
||||
# 只作用在 release 档),显式写出来就不必赌 `inherits` 会不会连 package 覆盖一起继承。
|
||||
# 值与 fast 档自身一致——依赖编得快是快档的目的,不是再抬一档优化强度。
|
||||
# `inherits = "release"` 会把 `[profile.release.package."*"]` **一起继承过来**(实测:删掉下面这块,
|
||||
# fast 档的外部依赖就从 opt-level 2 退回 `"z"`;workspace 成员不受 `*` 覆盖、仍是 fast 自己的 2)。
|
||||
# 所以这块**必须存在**,它是承重墙不是冗余兜底 —— 删掉会让 fast 档的依赖静默退回 `"z"`。
|
||||
[profile.fast.package."*"]
|
||||
opt-level = 2
|
||||
codegen-units = 16
|
||||
Reference in new issue
Block a user