-
Notifications
You must be signed in to change notification settings - Fork 0
Dual Execution Domain
中文 | English
维护版本:v0.51.2 | 最后更新:2026-07-06
电力系统对实时性有刚性需求——继电保护动作必须在毫秒级完成,开关操作指令必须在确定时限内下发。通用 OS 内核无法提供硬实时保证,而纯实时系统又难以承载 AI 推理与 Agent 编排。EnerOS 的回答是双执行域。
详见 ADR-0015 与 README §实时双执行域。
| 维度 | 通用执行域 (General) | 实时执行域 (Real-Time) |
|---|---|---|
| 内核模式 | 标准内核 | 实时扩展内核 |
| 调度策略 | 公平调度 | SCHED_FIFO 优先级抢占 |
| 典型任务 | Agent 编排、AI 推理、潮流计算 | 继电保护、开关操作、故障隔离、频率调节 |
| 响应时延 | 秒级 ~ 分钟级 | 微秒级 ~ 毫秒级(P99 < 1ms) |
| 内存 | 可堆分配 | 禁止堆分配(NoAlloc) |
| 锁 | 可用 Mutex/RwLock | 禁用(clippy::disallowed_types) |
| IPC | 任意 | 无锁 SPSC 通道 |
- 安全域不可被通用域阻塞 — RT 任务拥有最高优先级,通用域不得影响 RT 确定性
- 单向信任 — RT 域可读通用域决策指令;通用域不可直接干预 RT 调度
- 跨域通过 SafetyGateway — 所有通用域 → RT 域指令必须经网关约束校验 + 优先级仲裁
- 故障降级 — 通用域异常时,RT 域自动切换本地保护逻辑,电网安全不依赖 AI
RT 域的安全规则从"文档约定"升级为编译期 + 运行时双重保证:
SafetyGateway 在类型层不可绕过:
// 编译期保证:execute_validated 仅接受 Validated<Command>
pub fn execute_validated(&self, cmd: &Validated<Command>) -> Result<()>;
// Validated::new 是 pub(crate),外部 crate 无法直接构造
// 必须通过 gateway.validate(&cmd)? 拿到 Validated<Command>外部 crate 直接调用 Validated::new 触发编译错误 error[E0624]: associated function 'new' is private。trybuild compile_fail/bypass_safety_gateway.rs 锁定错误形态。
crates/eneros-gateway/clippy.toml 在 crate 级声明 Mutex/RwLock 为 RT 禁用,rt.rs 模块通过 #![cfg_attr(feature = "rt_check", deny)] 强制。
CI rt-check job 以 --features rt_check 在每次提交强制验证。
eneros-perf/src/no_alloc.rs:
-
NoAllocmarker trait(v0.50.0 迁入eneros-core::no_alloc) -
AllocTrackerGlobalAlloc 包装 - RT 线程通过
RtThreadGuard在堆分配时 panic - 通过
#[cfg(feature = "rt_check")]启用
SafetyGateway::new() 默认启用 lockfree;v0.49.0 BREAKING:移除 with_lockfree_state(),新增 with_locking_state() 作为 opt-out。
pub struct RtTask {
command: Validated<Command>,
budget: WcetBudget,
}
// execute_with_wcet 预算约束
// - 超预算:告警
// - 2× 超预算:报错 + 触发看门狗 fallbackWCET 违规写入审计:AuditAction::WcetViolation(v0.50.0)。
AuditSinkFactory::from_config() 支持 "memory" / "repository" 两种 sink。RepositoryAuditSink 通过 tokio::spawn 异步写入 AuditRepository,HMAC 链由 AuditRepository 维护。
| 技术 | 作用 |
|---|---|
| SCHED_FIFO | 优先级抢占调度 |
| isolcpus | CPU 隔离,避免被通用任务抢占 |
| mlockall | 内存锁定,禁止换页 |
| 无锁 SPSC IPC | 跨域通信无锁竞争 |
| 硬件看门狗(/dev/watchdog) | 超时复位 |
| huge pages | 减少 TLB miss |
eneros-os::rt 模块封装上述能力,HardwareWatchdog(v0.51.0 接入实际 /dev/watchdog)。
.github/workflows/ci.yml 的 rt-check job:
rt-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: RT clippy + test
run: |
cargo clippy --workspace --features rt_check -- -D warnings
cargo test --workspace --features rt_check每次提交都会强制验证 RT 类型层规则。
- Safety Gateway — Validated 完整工作流
- ADR-0015 — 完整 RT 类型层决策记录
- README §实时双执行域
EnerOS Wiki | v0.51.2