Notist
On this page
  1. native 直接发射后的求值图
  2. 测量对象
  3. 已消除的工作
  4. 更新后的求值 CPU 图数据
  5. 时间参考与限制
  6. 现在的路径与剩余问题
  7. 证据与复现

native 直接发射后的求值图

测量对象

本图比较 01649b4 与仅包含 native 直接发射的提交 3089d1f0239850a1c6454ea94b9169de8f4328c1。没有混入 d89fb08 的出版系统重构;开始测量时 HEAD 为 49a643a,但工作区未提交的 eval.rs 改动移除了直接发射路径,所以本图明确不代表该未提交工作区。没有更改或覆盖这些未提交改动。

使用相同 51,739 页冻结站点、独立输入和输出目录;28 次完整构建,78,004 项产物、451,812,631 字节逐次长度与 SHA-256 全部一致。普通 native 二进制来自已有冻结实验,先核对摘要,再将全部 Rust/Cargo 文件与提交归档逐字节核对。新的 frame-pointer 与计数诊断版本分别使用独立 Cargo target 构建,jobs=2。

已消除的工作

两次计数运行完全一致。实际函数调用、表达式数量和最终节点数均保持不变。

操作

发射前

native 直接发射后

Content::one

4,065,251

513

present 调用

8,440,426

4,375,688

Element 计划分支

4,219,447

154,709

native 直接发射

0

4,064,738

最终节点

4,219,447

4,219,447

函数调用

6,073,286

6,073,286

前两项各减少 4,064,738 次,与 native 直接发射的次数相等。Code 和其他真正需要第一类 Content 值的路径仍保留可复用计划,不能将上述下降解释为跳过执行或缓存挂载结果。

同一站点路径、同一包装器、新旧 frame-pointer 二进制的成功 API 对照:

API

发射前

发射后

malloc

102,965,311

90,925,806

realloc

10,287,923

10,287,923

calloc

37

37

malloc 减少 12,039,505 次,约 11.69%。与旧证据的个别 API 总数不同,因此这里另跑相同当前站点路径的基线,避免将路径长度引起的扩容差异混入效果。两侧记录丢失均为 0。API 次数不是存活对象数,峰值 RSS 仍约 2.71 GiB。

更新后的求值 CPU 图数据

两侧各六次 499 Hz 用户空间栈采样,仅统计文档 run 内的样本;旧侧 7,978 个,新侧 7,914 个。继续采用最内层 Evaluator 方法互斥归因:新 execute_inner 与 execute 合并,新 present_element 与 present/present_call/present_piece 合并。旧分析中的源码行号区域不适用于新实现,未据旧行号生成 native 分段结论。

互斥职责,占求值 CPU

发射前

发射后

调用执行本地工作

37.5%

39.7%

挂载与发射本地工作

24.4%

20.8%

内容绑定

7.8%

7.9%

表达式本地工作

6.9%

7.0%

已有实现查询

6.7%

7.9%

数据读取与 native 数据操作

8.4%

8.9%

入口、校验和收尾

5.6%

5.1%

其他

2.7%

2.6%

互斥叶子操作,占求值 CPU

发射前

发射后

分配器自身

28.8%

30.1%

drop/引用计数释放自身

13.5%

11.4%

clone 自身

11.2%

10.9%

memcpy/memmove 自身

2.3%

2.1%

其他执行位置

44.3%

45.6%

表内各类别互斥,两张表不能相加。占比是相对于各自求值总 CPU,不是绝对耗时变化率;整体变快后剩余职责的占比可以增加。不能据 allocator 占比增加说分配优化失败,也不能据 implementation 占比变化断言实现查询发生回归。

native 的六次 CPU 采样中,前五次整站 wall 为 7.49~7.55 秒,最后一次为 12.64 秒,user/system CPU 也较高。所有六次保留在主图。采样折算求值 CPU 全六次约 2.643 秒/构建,前五次敏感性视图约 2.540 秒;前五次不是用于替代主图的事后筛选结果。旧侧约 2.665 秒,但两侧 CPU 采样不是交错实验,不据这些差值计算精确 native 求值加速比例。

时间参考与限制

计数关闭、只保留边界计时的三次 native 诊断运行,run.total 为 2.541/2.550/2.565 秒,中位数 2.550 秒。其中 run.present 中位数 2.393 秒,来源视图与校验约 0.118 秒;首次绑定和 Evaluator 初始化合计约 0.014 秒。旧诊断 run 中位数为 2.749 秒。可将其作为前后过程参考,但这是非交错、带探针的测量,不声称它就是 native 的精确求值收益。

本轮五组普通 release 交错 A/B 均更快,配对 wall 变化为 -0.71%、-13.63%、-5.55%、-2.97%、-1.78%,中位数 -2.97%。两组 wall 中位数为 7.819/7.446 秒;简单相除与配对统计不是一个量。有明显机器波动,全部保留,因此不承诺固定百分比;已有独立 native 实验的五对中位数为 -2.53%,方向一致。计数关闭探针控制也有明显波动,不据诊断版本偶尔更快宣称探针无开销。

现在的路径与剩余问题

立即挂载 native 构造的通路为:

present_call
  → execute_inner:实参、字段、实现查询和校验
  → Execution::Element
  → present_element:子内容、结构校验、来源链
  → 写入调用者 out

原先 Content::one 的单元素计划及其外层 present/临时节点 Vec 已省去。子内容仍需求值与发射;通用实参字段、共享 children、实例元数据、数据 API 及对象生命周期仍有成本。因此原图中这条中间计划往返不再是待修问题,剩余优化应聚焦参数/字段装配、空子内容以及共享容器的构造与销毁。当前剩余 present 输入中,空片段约 49.4%,单元素约 29.5%;比例变化主要因为 native 的 406 万个单元素包装已被去掉,不能继续沿用旧图的 89.0%。

证据与复现

证据目录:/tmp/opencode/notist-native-chart-3089d1f-20261109。run.py 冻结并验证 native-only 源码、运行控制/交错对照/计数/CPU;analyze.py 合并新旧职责、保留全部样本并生成 native-focus-summary.json。evidence 内保留 manifest、原始 .prof、inline 符号、完整日志、计数、普通 A/B、分配记录、汇总和输出摘要。另一次同路径基线分配诊断保存在 baseline-allocation-sample.json 及对应原始记录中。本轮仅更新分析与图,没有修改生产实现,也没有重跑所有 Rust 功能回归;不外推为未提交工作区、serve 编辑或其他站点的结果。