6.4 KiB
表达式上下文性能验收
范围
本轮优化 FIDC 引擎的逐股票表达式上下文,不修改策略、因子值、窗口、时间可见性、
选股/订单规则、费用、成交价、风控或公司行为。Source 保持 d5b682c6d097,
研究和信号保持暂停。其他用户任务只读观察,不更改其进程、亲和性或配置。
已完成编译、回归、正式回放与177发布验收,不能据此关闭整个目标。
重复开销
- DataSet 已采用
NumericFactorMap,但StockExpressionState仍把数值因子 重建为BTreeMap<String, f64>,增加树节点和字符串分配。 - 每日可用因子名集合先为每个证券复制名称,再由集合丢弃重复名称。
候选在表达式上下文延续紧凑数值存储。每日名称仍按当日真实字段生成完整集合,
仅改为先对借用名称去重,再为唯一名称分配字符串;文本因子同理。
没有用全局/未来日期目录替代当日字段,没有缓存选股结果或账户状态。
Rhai factors[...]、缺失、NaN、负零、别名、覆盖顺序与已完成交易日可见性保持原行为。
CPU 计时
Runner 新增以下运行计时,HTTP benchmark 同样保留:
engineTaskWallSeconds:实际引擎同步任务的墙钟耗时,包含其同步数据读取等待。engineThreadCpuSeconds:LinuxCLOCK_THREAD_CPUTIME_ID实测的引擎调用线程CPU时间。 不包含其他并行线程、I/O等待或未被调度的时间;不可当作整个进程总CPU时间。 读取不可用、跨线程或时钟异常保持null,不填0。engineTaskCount:实际执行引擎的次数,包含原有修复循环的重放。
这些是 engineSeconds 的子指标,禁止再次加到总耗时。正常耗时与诊断运行分开保存。
计时不改写历史制品,旧记录缺少该指标时保持未知。
验收设置
- 固定引擎基线
fe7243b;候选为177的07b7b18,对应本地df1862e。 - 两边使用同一计时版service
a9df11a;b5d22ff仅补充benchmark字段读取。 - 2021-08-23至2025-11-17、初始1000万、原冻结runtime与策略,1025个执行交易日。
- 保留原
session_capacity_audit,不能当作实际开盘流动性验证。 - 官方benchmark入口、Boris执行、同CPU资源与Source版本、新进程、相同数据缓存副本、 新结果目录,不复用回测结果。
- 引擎780项、runner408项、API113项、脚本10项通过;9/8/3项手动或外部环境用例分别忽略。
- 专项延伸验证紧凑因子的克隆、Rhai映射暴露、缺失、NaN及负零;CPU计时验证睡眠和跨线程边界。
证据根:/srv/fidc/canonical/run/research/engine-context-20260913。
独立进程对照
| 次序 | 样本 | 完整墙钟 | Source校验 | 数据准备 | 引擎墙钟 | 引擎线程CPU |
|---|---|---|---|---|---|---|
| 1 | control-1 | 31.234s | 11.202s | 8.393s | 10.461s | 10.458s |
| 2 | candidate-1 | 17.002s | 0.004s | 8.404s | 7.406s | 7.404s |
| 3 | candidate-2 | 18.203s | 0.003s | 8.371s | 7.411s | 7.408s |
| 4 | control-2 | 22.983s | 0.004s | 8.323s | 13.401s | 13.398s |
| 5 | control-3 | 30.714s | 0.005s | 15.318s | 13.999s | 13.990s |
| 6 | candidate-3 | 25.336s | 0.005s | 13.524s | 10.471s | 10.468s |
首个基线的Source校验等待原样保留,不事后改称预热,不把11.202秒归因于引擎改动。 后段样本出现主机负载/缓存竞争变化,数据准备也变慢,不能直接用全组平均墙钟夸大提速。 相邻低负载对照的引擎线程CPU为10.458至7.404秒,后段为13.990至10.468秒。 CPU计时与任务墙钟非常接近,证明样本主要在执行CPU工作,而不是等待HTTP; 这不代表没有SMT、内存带宽或其他用户CPU竞争。
六次均为21,393笔成交,账户、权益、委托、成交、持仓和风控canonical及结果制品完全一致。 每份63个数据缓存文件经完整SHA核对相同,没有复制或读取旧回测结果。
HTTP 对照
| 状态 | 版本 | 运行ID | 总耗时 | 引擎耗时 |
|---|---|---|---|---|
| 清DataSet,磁盘/Source保持 | 原版 | btr_1789232559582_3166774_4 | 21.987s | 11.328s |
| 清DataSet,磁盘/Source保持 | 原版 | btr_1789232585690_3166774_5 | 21.684s | 11.259s |
| 复用DataSet | 原版 | btr_1789232669598_3166774_6 | 11.820s | 11.031s |
| 复用DataSet | 原版 | btr_1789232684861_3166774_7 | 11.857s | 11.067s |
| 清DataSet,磁盘/Source保持 | 新版 | btr_1789232818009_3320588_0 | 17.296s | 7.537s |
| 清DataSet,磁盘/Source保持 | 新版 | btr_1789232839269_3320588_1 | 17.413s | 7.627s |
| 复用DataSet | 新版 | btr_1789232898983_3320588_2 | 8.549s | 7.738s |
| 复用DataSet | 新版 | btr_1789232910904_3320588_3 | 8.586s | 7.784s |
同状态HTTP均值:重建DataSet从21.836至17.355秒,减少约20.5%; 复用DataSet从11.839至8.568秒,减少约27.6%。两种状态分开比较, 没有把8.568秒当作Source冷启动成绩。与上一轮不同时间的15/17秒样本不作直接百分比对比。
原版API没有线程CPU字段,保持null;新版本每次实际执行引擎一次, 两次重建的线程CPU为7.535/7.624秒。没有用新版本计时回填旧记录。 八次HTTP和六次独立回放的canonical及结果制品SHA全部相同,终态审计clean。
发布状态
177通过官方安装器发布 engine 07b7b181b60138c6ef1c965543c0e3192ac65903、
service b5d22ffab16f851eced3028e12fa02627ee4c399。
运行身份 fdd8652a47a5935be4d891beb3b8b0f3e19a468be166a902a2a97b85a9c9e01e。
- API SHA:
bf22f58946c3fa495161eb381a400d4e28d7c8d327ee46f5645d83a8308117cf。 - Runner SHA:
7b3849cd8af33d650db242add80c49cfdd32e8cc8686a614da7b3b4016ce2a60。 - 生产在用构建根:
/srv/fidc/canonical/build/engine-context-candidate-20260913,禁止清理。 - 原生因子能力目录发布前后字节相同,SHA为
cec37331a476bc39bdea32c308581b8ac2f86d005d8dd4cc7ba228c5d9dc9a2e。 - API PID3320588,Boris、active、NRestarts=0;Source仍为PID1700096/d5,研究未恢复。
完整结构化验收证据,
SHA256 f526950e018354c1305922beebf4063ae3823004f8c5ab20510a452f98b7b7ea。
边界
本轮真实长区间案例含一个原生扩展因子,动态映射、缺失及多字段语义另由引擎回归覆盖; 不宣称所有策略都具有相同比例提速。Source冷路径仍受独立冻结约束, 信号闭环和全部策略/分钟区间/财务PIT不在本轮通过范围内。