跳到主内容

v0.41.0 版本说明

版本说明

EnerOS v0.41.0 版本说明

  • 发布日期:2026-06-22
  • 版本代号:Bench
  • 支持状态:稳定(Stable)
  • Crate 总数:48
  • 测试用例数:6100+
  • 贡献者:24 人

版本概述

EnerOS v0.41.0 是「成熟优化」阶段(阶段五)的开篇版本,标志着项目从「功能完备」正式迈入「性能可度量、回归可感知」的工程化阶段。本版本围绕性能基准测试体系构建了一条从「标准用例 → 自动执行 → 报告生成 → 回归检测」的完整闭环,为后续每个版本的性能演化提供了可量化、可对比、可追溯的基线。

在 v0.40.0 确立架构基线后,EnerOS 已完成 Power-Native 内核、双执行架构、约束引擎、Agent 运行时等核心能力的搭建,但在性能层面始终缺乏一套统一、权威、可复现的度量体系。不同团队、不同 PR 中引用的延迟数据往往基于各自的测试方法与硬件环境,难以横向比较,也无法在 CI 中自动捕获性能退化。v0.41.0 通过引入 IEEE 标准测试用例集与自研基准框架,彻底解决了这一问题。

本版本同时建立了性能回归检测机制:每次提交到 main 分支的代码都会触发基准套件运行,与上一基线进行统计显著性比对,若关键指标退化超过 5% 则自动阻断合并。这一机制使性能不再是一个事后关注的指标,而是融入开发流程的一等公民。

关键数据

指标数值说明
Crate 数量48全部用 Rust 实现
代码行数21 万不含生成代码
测试用例6100+单元 + 集成 + 端到端
基准套件数38覆盖五大内核域
标准用例10IEEE + PEGASE
CI 回归检测覆盖率92%关键路径全覆盖

新特性

1. 标准化基准测试套件

新增 eneros-benchmark crate,提供统一的基准测试框架。该框架基于 criterion 二次封装,针对电力领域场景做了深度定制:支持拓扑规模参数化、潮流计算冷热启动分离、约束批量校验、时序写入吞吐统计等电力特有的度量维度。

基准套件架构

eneros-benchmark/
├── src/
│   ├── harness/          # 测试运行框架
│   │   ├── runner.rs     # 调度器与采样器
│   │   ├── sampler.rs    # 高精度时间采样(rdtsc)
│   │   └── reporter.rs   # 报告生成器
│   ├── suites/           # 内置基准套件
│   │   ├── topology/     # 拓扑操作基准
│   │   ├── powerflow/    # 潮流计算基准
│   │   ├── constraint/   # 约束校验基准
│   │   ├── timeseries/   # 时序存储基准
│   │   └── agent/        # Agent 运行时基准
│   └── fixtures/         # 测试数据装载
└── benchmarks/           # 外置脚本

使用示例

use eneros_benchmark::{BenchmarkSuite, BenchmarkConfig, TopologyFixture};
use std::time::Duration;

// 创建一个拓扑加载基准
let suite = BenchmarkSuite::new("topology_load")
    .config(BenchmarkConfig {
        warmup_time: Duration::from_secs(3),
        measurement_time: Duration::from_secs(10),
        sample_size: 100,
        noise_threshold: 0.03,
    })
    .param("nodes", vec![118, 300, 1000, 3000, 10000])
    .fixture(TopologyFixture::IEEE118);

// 运行并产出报告
let report = suite.run(|ctx| {
    let nodes = ctx.param("nodes");
    let graph = eneros_topology::load_benchmark_graph(nodes);
    ctx.measure("load_time", || {
        eneros_topology::NetworkGraph::from_raw(graph.clone())
    });
});

report.save("reports/topology_load.json")?;

度量维度

维度单位说明
延迟 P50/P95/P99微秒 / 毫秒单次操作耗时分布
吞吐量ops/s每秒操作数
抖动微秒P99 与 P50 之差
内存峰值MB峰值常驻内存
分配次数次/操作堆分配计数
系统调用次数次/操作syscall 计数

2. IEEE 标准测试用例

内置 IEEE 标准测试系统作为性能基准的黄金参考,确保所有性能数据可复现、可对比。目前支持 IEEE 9/14/30/39/57/118/300 节点系统,以及 PEGASE 1354/9241/13659 节点欧洲电网模型。

用例节点数支路数来源适用场景
IEEE 999Anderson单元测试、快速验证
IEEE 141420IEEE中小规模潮流
IEEE 303041IEEE标准调度问题
IEEE 393946New England动态稳定
IEEE 575780IEEE中等规模
IEEE 118118186IEEE标准基准
IEEE 300300411IEEE大规模潮流
PEGASE 135413541991PEGASE欧洲输电网
PEGASE 9241924116049PEGASE大型互联电网
PEGASE 136591365920467PEGASE超大规模压力测试
use eneros_benchmark::fixtures::ieee;

// 加载 IEEE 118 节点系统
let case = ieee::IEEE118.load()?;
println!("母线数: {}", case.buses.len());
println!("支路数: {}", case.branches.len());

// 加载 PEGASE 9241 节点系统(欧洲电网)
let pegase = ieee::PEGASE9241.load()?;

3. 性能回归检测

基准套件与 CI 流水线深度集成。每次提交到 main 分支的代码都会触发基准套件运行,与上一基线进行统计显著性比对。检测算法基于 Welch t 检验,对样本分布无等方差假设,能有效区分真实退化与噪声波动。

回归检测配置

use eneros_benchmark::regression::{RegressionGate, Threshold, Severity};

let gate = RegressionGate::new()
    .baseline("reports/baseline.json")
    .threshold(Threshold {
        max_regression_pct: 5.0,      // 退化超过 5% 即告警
        max_regression_severity: Severity::Warn,
        critical_paths: vec![
            "topology_load.118",
            "powerflow.newton.118",
            "constraint.check.single",
            "timeseries.write.50k",
        ],
    })
    .statistical_test("welch_t")
    .significance_level(0.01);

let result = gate.compare(&new_report)?;
if result.has_regressions() {
    for reg in &result.regressions {
        eprintln!("回归: {} 退化 {:.1}%", reg.benchmark, reg.delta_pct);
    }
    std::process::exit(1); // 阻断合并
}

回归检测策略

指标变化判定CI 行为
改善 > 2%改进通过,更新基线
变化在正负 2% 内噪声通过
退化 2% - 5%警告通过但标记
退化 5% - 10%回归阻断合并
退化 > 10%严重回归阻断并通知

4. 基准报告生成

每次基准运行后自动生成多格式报告,支持 JSON、HTML、Markdown 三种输出,并提供与历史基线的对比视图。HTML 报告内置交互式图表,可在线查看延迟分布直方图、吞吐趋势曲线与回归热力图。

use eneros_benchmark::report::{Report, ReportFormat, CompareView};

let report = suite.run(|ctx| { /* ... */ });

// 多格式输出
report.save("reports/topology_load.json", ReportFormat::Json)?;
report.save("reports/topology_load.html", ReportFormat::Html)?;
report.save("reports/topology_load.md", ReportFormat::Markdown)?;

// 与历史基线对比
let compare = CompareView::new()
    .current(&report)
    .baseline("reports/baseline.json")
    .history(vec!["reports/v0.40.json", "reports/v0.39.json"]);

compare.render("reports/compare.html")?;

5. 与竞品对比

基准套件内置与同类产品的对比测试,在相同硬件、相同输入数据下横向比较。对比对象包括开源潮流计算库(Pandapower、PyPSA)与商用 SCADA 平台。

操作EnerOSPandapowerPyPSA商用平台
拓扑加载(118 节点)0.8ms120ms95ms15ms
潮流计算(118 节点)2.7ms45ms38ms8ms
约束校验(单条)8微秒N/AN/A50微秒
时序写入(万点/秒)501.20.812
内存占用(118 节点)12MB180MB150MB45MB

注:对比数据在相同硬件(Intel Xeon 8358, 2.6GHz, 64GB RAM)下测得,Pandapower/PyPSA 基于默认 Python 运行时。

改进优化

潮流求解器基准化

eneros-powerflow 的 Newton-Raphson 求解器引入稀疏 LU 分解的预排序缓存。在 IEEE 300 节点标准测试系统上,单次潮流求解从 4.2ms 降至 2.7ms。

拓扑快照零拷贝

eneros-topology 的快照读取改为 CoW(Copy-on-Write)实现,读取延迟从 12微秒 降至 1.2微秒,且不会因拓扑规模增大而退化。

Agent 上下文构建优化

Agent 上下文构建从全量拷贝改为引用快照,构建延迟从 50微秒 降至 8微秒。

Bug 修复

  • BG-201:基准套件在 Windows 上时间采样精度不足,已改用 QueryPerformanceCounter
  • BG-205:PEGASE 13659 加载时内存峰值过高,已引入流式加载路径
  • BG-209:回归检测在样本量 < 30 时误报率高,已增加最小样本量校验
  • BG-213:HTML 报告在 Safari 下图表渲染异常,已修复

破坏性变更

BC-201:BenchmarkSuite::run 闭包签名变更

闭包参数从 &mut Context 改为 &BenchmarkContext,并新增 measure 方法。

// v0.40.0(旧)
suite.run(|ctx| {
    let result = operation();
    ctx.record("time", start.elapsed());
});

// v0.41.0(新)
suite.run(|ctx| {
    ctx.measure("time", || operation());
});

依赖升级

依赖旧版本新版本说明
criterion0.50.5.1统计检验增强
plotters0.30.3.5图表渲染
serde_json1.0.1081.0.111性能优化

升级指南

从 v0.40.0 升级

rustup default 1.75.0
cargo update
cargo test --workspace

Cargo.toml 中添加基准依赖:

[dev-dependencies]
eneros-benchmark = "0.41"

运行内置基准套件:

cargo bench --workspace

相关文档