目录

AegisSCX — 面向 openEuler 混合负载的证据驱动调度 Agent

AegisSCX 不是一个只追求“更快”的固定调度器,而是一套面向混合负载的安全自适应调度系统:它先用 CPU、内存、I/O、锁、PSI、cgroup 与 eBPF 信号判断真实瓶颈,再决定 CPU 动作是否具备执行资格;动作只在短窗口 Canary 中试运行,由真实业务指标决定提交或回滚;当 sched_ext 调度器停止推进时,内核级 Progress Guard 自动恢复默认调度。

目标平台:openEuler 24.03-LTS-SP4 · Linux 6.6 · sched_ext · cgroup v2 · eBPF CO-RE
发布身份:AegisSCX 1.0.0-rc2 · Apache-2.0 · Python 核心零第三方运行时依赖

初赛提交材料

材料 内容
项目说明书 系统定位、技术路线、实现难点、实验协议、正式结果与复现方法
详细设计说明书 六平面架构、核心对象、状态机、执行边界与异常恢复
技术报告 对照实验、样本规模、置信区间、结果边界与证据索引
演示 PPT 从问题、闭环、创新、结果到图形化驾驶舱的完整叙事
演示视频 3 分 22 秒,展示驾驶舱、真实 A/B、同 Run ID 终端核验与结果回写
作品原创承诺书 初赛作品原创承诺材料

图形化驾驶舱把“看懂系统、看见动作、相信结果”压缩到同一块 16:9 画布:先解释跨子系统瓶颈和动作资格,再展示 Observe → Diagnose → Qualify → Canary → Commit/Abstain/Rollback,最后用 Baseline、AegisSCX、样本量、95% CI、Run ID 与 SHA-256 闭合证据链。

1. 一分钟理解项目

1.1 项目解决什么问题

混合业务运行时,系统瓶颈会在 CPU、内存、I/O 和锁之间迁移。单看 CPU 利用率或运行队列,容易把“系统很忙”误判为“CPU 调度有问题”;即使 CPU 确实是瓶颈,同一个调度动作也可能提升吞吐、同时恶化尾延迟。

AegisSCX 因此把一次调度优化拆成五个连续问题:

  1. 当前瓶颈在哪里:CPU、内存、I/O、锁,还是证据仍不充分;
  2. CPU 动作是否匹配根因:支持证据、反证、数据新鲜度和动作边界是否同时满足;
  3. 候选动作是否真的改善业务:吞吐、P99、错误率和后台进度是否达到意图;
  4. 动作有害时如何恢复:恢复快照、撤销租约并进入冷却;
  5. 调度器本身停滞时如何自救:内核绕过用户态 Agent,禁用 sched_ext 并回到 fair scheduler。

1.2 系统最终只产生三类动作结果

结果 触发条件 系统行为
COMMIT 根因匹配、资格通过,且 Canary 业务收益达标 提交有限动作,记录状态与收益证据
ABSTAIN 证据不足、存在反证、根因不匹配或动作越界 不进入资源写入路径,保留诊断和弃权原因
ROLLBACK 候选使 SLO、错误率、公平性或后台进度恶化 恢复动作前快照,终止租约并记录失败证据

1.3 四项核心结果

系统能力 实验结果 说明
正确优化 SQLite WAL KV 吞吐 +36.14% 10/10 trials,5 个配对区组方向一致
避免误优化 非 CPU 根因错误动作 15/15 → 0/15 内存、同步 I/O、锁竞争各 5 次
有害动作恢复 SLO 违规率 -61.17% 10/10 匹配区组受益,候选 5/5 自动回滚
调度器停滞自愈 6.228 s → 1.909 s,终局恢复 768 ms 15/15 正式 trials;健康窗口误触发 0/5

2. 为什么固定调度策略不够

同一种 CPU 动作在三类场景中产生了完全不同的结果:

场景 只执行候选动作会发生什么 AegisSCX 如何处理
SQLite WAL KV 与 CPU 干扰混部 CPU 根因成立,目标 cgroup 获得更多调度份额后吞吐提高 证据匹配,Canary 达标,提交动作
HTTP 延迟服务 吞吐提高 9.52%,但 P99 恶化 31.30% 业务目标冲突,5/5 次回滚
内存回收、同步 I/O、锁竞争 真正瓶颈不在 CPU,无门控方案错误执行 15/15 次 反证成立,0/15 CPU 动作,主动 ABSTAIN

这三组结果共同说明:调度系统的价值不只来自“找到一个表现好的策略”,更来自知道何时可以用、何时不该用,以及用错以后如何恢复。

3. 一次完整闭环如何运行

业务意图
  │  延迟、吞吐、错误率、后台进度、公平性
  ▼
多源观测 ──→ 跨子系统归因 ──→ Evidence Gate ──→ 有界候选动作
procfs          CPU / 内存       支持证据          cgroup cpu.weight
PSI             I/O / 锁         反证检查          sched_ext 专家
cgroup          置信度           新鲜度/来源       快照 + 有限租约
eBPF/SLO                         动作资格
                                      │
                    ┌─────────────────┴─────────────────┐
                    ▼                                   ▼
                ABSTAIN                            短窗口 Canary
                                                   │
                                   ┌───────────────┴───────────────┐
                                   ▼                               ▼
                                COMMIT                         ROLLBACK
                                   └───────────────┬───────────────┘
                                                   ▼
                                      审计账本 + SHA-256 证据索引

并行兜底:Kernel Progress Guard 持续观察 runnable task 进展;
调度器停滞时直接禁用 sched_ext,让任务回到默认 fair scheduler。
阶段 输入 关键处理 输出
1. Observe 主机、cgroup、PSI、eBPF、应用 SLO 形成带时间戳和来源的 TelemetrySnapshot 当前系统事实
2. Diagnose 多源观测与业务意图 识别 CPU / 内存 / I/O / 锁瓶颈并搜索反证 根因、置信度、支持证据和反证
3. Qualify 诊断、策略矩阵、动作白名单 检查新鲜度、风险预算、幅度、租约和禁止条件 ABSTAIN 或有资格候选
4. Snapshot 候选动作与当前系统状态 保存 cgroup、sched_ext、服务和业务基线 可恢复状态
5. Canary 有限动作与固定观察窗口 比较吞吐、P99、错误率、公平性和后台进度 提交或回滚判定
6. Recover 有害候选、超时或执行异常 撤销动作、恢复快照、校验最终状态 可证明的恢复结果
7. Audit 全部阶段的输入与输出 串联请求、诊断、动作、内核曝光和结果 JSONL 账本与 SHA-256 清单

4. 系统架构

层级 主要组件 职责
感知层 procfs、PSI、cgroup v2、eBPF CO-RE、应用 SLO 获取 CPU 调度、内存压力、I/O 等待、锁竞争、队列和业务指标
归因层 Bottleneck Diagnosis、Evidence Graph 联合支持证据与反证,区分 CPU 与非 CPU 根因
资格层 Evidence Gate、Action Eligibility Matrix 将“诊断结果”与“执行授权”解耦,统一限制动作类型、幅度和风险
执行层 cgroup cpu.weight、sched_ext 专家、状态快照、有限租约 执行有界动作并保留确定性恢复入口
验证层 Counterfactual Canary、SLO Evaluator 由真实业务收益决定 COMMIT 或 ROLLBACK
恢复层 用户态 Rollback、Kernel Progress Guard 处理有害动作、Agent 失活和调度器停滞
Agent 层 7 Tools、6 Skills、JSON-RPC stdio、Shadow LinUCB 提供可演进能力接口,候选建议仍受统一安全闭环约束
证据层 审计账本、实验注册、统计结果、SHA-256 目录 将项目主张映射到协议、原始数据、结果与系统终态

四条不可绕过的控制契约

  1. 一个热点指标不授权动作:CPU 利用率高不等于 CPU 根因成立;
  2. 判断不等于授权:诊断、规则或学习器只能生成候选,资格矩阵决定是否允许执行;
  3. 业务结果决定提交:CPU 指标用于归因,吞吐、P99、错误率和公平性决定 Canary 结果;
  4. 恢复路径独立存在:用户态负责动作回滚,内核 Guard 负责调度器停滞自愈。

5. 核心创新与竞争优势

5.1 从“选择调度器”升级为“管理动作生命周期”

能力维度 固定调度策略 规则 / 分类路由 直接式 AI Agent AegisSCX
瓶颈判断 单一局部指标 规则或分类结果 依赖上下文与模型输出 跨子系统证据图与反证
证据不足 继续执行 阈值兜底 输出不确定 明确 ABSTAIN,不写资源
动作授权 策略直接生效 路由后直接生效 工具调用即执行 Evidence Gate 与资格矩阵
上线验证 运行后观察 可选脚本 依赖外部流程 反事实 Canary 硬门
有害候选 人工回退 脚本回退 外部监督 状态快照、有限租约、自动回滚
调度器停滞 进程退出或 watchdog 用户态守护 外部监督 Kernel Progress Guard 内核自愈
结果复核 日志 决策日志 对话或工具记录 请求—动作—内核曝光—结果证据链

5.2 七项工程创新

创新点 实现方式 直接价值
跨子系统瓶颈归因 联合 CPU、内存、I/O、锁、PSI、cgroup 和 eBPF 避免把非 CPU 问题错误交给 CPU 调度解决
Evidence Gate 支持证据、反证、新鲜度、来源、SLO 和白名单统一收口 证据与动作不匹配时不进入资源写入路径
动作资格矩阵 根因、动作、幅度、租约、风险预算显式建模 策略新增后仍遵守同一套执行契约
反事实 Canary 动作前快照,同窗口比较吞吐、尾延迟、错误率和公平性 防止“吞吐变好但业务目标变坏”的错误提交
双层恢复 用户态回滚 + 内核 Progress Guard 同时覆盖有害候选和调度器停滞
Agent 能力接口 7 Tools / 6 Skills / JSON-RPC / 环境绑定影子学习 允许系统演进,同时隔离建议权与执行权
可复核证据链 预注册、原始数据、统计脚本、系统终态和 SHA-256 每项结果都可定位到确定实验和文件

6. 赛题场景覆盖

官方场景 已接入的真实工作负载 观测内容 可执行或验证的动作
AI 推理 Qwen3-1.7B + llama.cpp CPU 推理 请求生命周期、TTFT、token、queue、cgroup CPU、调度曝光 admission、cgroup 权重、专家选择、Canary 与回滚
内核编译 openEuler SP4 同源内核构建 构建阶段、CPU/PSI、sched_ext、Guard 和核心服务 构建资源控制、一次性启动、post-boot 核验与回滚
压缩 gzip / xz 后台压缩线程 吞吐、最长无进展时间、CPU 使用和后台服务比 后台权重、公平性保护和进度门控
网络压测 HTTP 前台服务与请求驱动器 QPS、错误率、P50/P95/P99、SLO 违规率 短窗动作、业务 SLO 判定和自动回滚
数据库混部 SQLite WAL KV + CPU 干扰 事务吞吐、尾延迟、cgroup CPU 和调度曝光 正向 Canary 与策略提交
非 CPU 负例 内存回收、同步 I/O、锁竞争 PSI、缺页/回收、iowait、锁等待和运行队列 撤销 CPU 动作资格并 ABSTAIN

这些场景使用同一条 Observe → Diagnose → Qualify → Canary → Commit/Rollback 控制链,不为单个演示场景复制一套独立逻辑。

7. 实验结果

7.1 性能、安全与恢复

能力 对照组 AegisSCX 改进 实验规模与统计口径
SQLite WAL KV 吞吐 归一化 100% 136.14% +36.14% 10/10 trials,5 个配对区组;95% CI [+29.19%, +43.09%],Cohen dz 6.455
非 CPU 根因错误动作 15/15 0/15 -100% 内存、I/O、锁各 5 次;三类负载方向一致
自动回滚后的 SLO 违规率 归一化 100% 38.83% -61.17% 10/10 匹配区组受益;95% CI [-64.94%, -57.40%]
停滞调度器恢复时间 6.228 s 1.909 s -69.34% 15/15 正式 trials;95% CI [-69.52%, -69.16%];健康窗口误触发 0/5
Kernel Canary 终局恢复 — 768 ms 自动禁用 sched_ext 正常 Canary 0 误触发;SIGSTOP 后 Guard 0→1,故障 PID 保留,核心服务 3/3 active

7.2 常驻开销与观测质量

指标 结果 实验规模
被动常驻 Agent CPU 0.6234% 单核 5 次独立进程、60 个控制周期;95% CI [0.6040%, 0.6427%]
RSS 峰值 43.207 MiB 覆盖 Observe、Diagnose 与 Evidence Gate
eBPF wakeup 接纳 19,687,755 10 个 15 秒窗口
map / histogram 处理失败 0 全部正式观测窗口
保守未解析比例 0.03750% 95% CI [0.03665%, 0.03837%]

7.3 如何理解这些数字

  • +36.14% 证明根因与动作匹配时,系统能够保留实质性能收益;
  • 15/15 → 0/15 证明跨子系统反证可以阻止方向错误的 CPU 动作;
  • -61.17% 证明回滚不只是“恢复配置”,而是显著减少有害策略持续暴露的业务时间;
  • -69.34% 与 768 ms 证明调度器停滞时存在独立于用户态 Agent 的恢复路径;
  • 0.6234% CPU 说明常驻判断链可以在低开销下持续运行。

所有展示数据均从归档结果和机器可读证据索引生成,不在控制台或文档中手工改写。

8. 运行项目

8.1 环境要求

  • Python 3.9 或更高版本;
  • 本地演示与控制面核心无第三方 Python 运行时依赖;
  • Dashboard 使用 Node.js 22.13+ 与 pnpm;
  • eBPF、sched_ext 和 Kernel Guard 系统级验证使用 openEuler 24.03-LTS-SP4。

8.2 安装 Python 控制面

Linux / openEuler:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .

Windows PowerShell:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e .

安装后提供两个入口:

  • aegis:诊断、资格判断、Canary、执行、恢复和证据生成;
  • aegis-agent-tools:面向 Agent 客户端的 JSON-RPC stdio 能力服务。

8.3 五分钟离线闭环演示

chmod +x demo/run-showcase.sh
./demo/run-showcase.sh

演示依次回放:

  1. SQLite CPU 根因成立,候选通过并提交;
  2. 内存、I/O、锁负例撤销 CPU 动作资格;
  3. HTTP 候选吞吐上升但 P99 恶化,触发回滚;
  4. Kernel Guard 处理 sched_ext 停滞;
  5. 对正式结果、manifest 和 SHA-256 进行校验。

演示为确定性离线回放,不依赖网络,也不会重做耗时性能实验。

8.4 启动 16:9 决策与证据控制台

cd dashboard
pnpm install
pnpm dev

控制台集中展示工作负载、跨子系统观测、瓶颈判断、动作资格、Canary 结果、cgroup / sched_ext 执行状态、Kernel Guard 恢复和证据文件。生产检查命令:

pnpm lint
pnpm test

图形化驾驶舱:看懂系统、看见动作、相信结果

驾驶舱不是静态数字大屏,而是把一条可复核控制链压缩到同一视图:

  1. 看懂系统:先看到工作负载、CPU/内存/I/O/锁证据、瓶颈归因与动作资格,回答“当前是否值得动 CPU”;
  2. 看见动作:按照 Observe → Diagnose → Qualify → Canary → Commit/Abstain/Rollback 展示每次状态转换,并回读 cgroup、sched_ext、lease 与 Guard;
  3. 相信结果:Baseline、AegisSCX、区组效应、95% CI、样本量、Run ID 和 SHA-256 同屏对应,方向不佳、主动弃权和回滚同样留存。

现场演示时,浏览器与 openEuler 终端使用同一个 Run ID:浏览器发起注册实验,终端查看对应 systemd 单元和运行日志;完成后由页面读取新生成的 summary.json,终端执行 sha256sum -c SHA256SUMS。因此页面展示的是本次实验结果,而不是预置数字。

驾驶舱包含两个明确隔离的工作区:

  • 正式结果归档:重新计算并核验已完成实验,不启动新负载;
  • 现场 A/B:通过本机回环桥接调用 openEuler 上的注册 SQLite smoke,Baseline、AegisSCX 和提升值在新实验完成前保持为空。

从项目根目录启动现场桥接:

./scripts/dashboard/start-live-ab-bridge.ps1 `
  -Target OPEN_EULER_SSH_ALIAS `
  -RemoteUser root `
  -IdentityFile PATH_TO_LOCAL_PRIVATE_KEY

桥接只监听 127.0.0.1:8765,远端身份不进入浏览器;新结果写入 results/live-ab/<run-id>/。完整说明见 Dashboard 使用说明。

8.5 按控制链逐步运行

下面的示例只计算诊断、资格与证据,不修改当前机器资源:

aegis intent validate configs/examples/latency-intent.json

aegis diagnose \
  --telemetry configs/examples/cpu-contention-telemetry.json

aegis recommend \
  --telemetry configs/examples/cpu-contention-telemetry.json \
  --intent configs/examples/latency-intent.json \
  --matrix configs/policies/action-eligibility.json

aegis evidence \
  --telemetry configs/examples/cpu-contention-telemetry.json \
  --intent configs/examples/latency-intent.json \
  --matrix configs/policies/action-eligibility.json

8.6 启动 Agent Tools 服务

aegis-agent-tools

JSON-RPC stdio 服务支持:

  • initialize:协议初始化;
  • tools/list:列出 7 个注册 Tools;
  • tools/call:调用观测、策略评估、证据校验和影子学习;
  • resources/list:列出正式实现与证据资源;
  • resources/read:读取机器可读发布身份和证据索引。

系统级 eBPF、sched_ext、内核构建、一次性启动和回滚流程见本地环境搭建指南。

9. 测试、复现与证据

9.1 运行核心回归

PYTHONPATH=src python -m unittest \
  tests.test_capabilities \
  tests.test_shadow_learning \
  tests.test_evidence_catalog \
  tests.test_agent_tools -v

运行完整测试:

PYTHONPATH=src python -m unittest discover -s tests -v

9.2 验证离线发布包

python scripts/release/offline-bundle.py build \
  --version 1.0.0-rc2 \
  --output dist/AegisSCX-1.0.0-rc2-offline.zip

python scripts/release/offline-bundle.py verify \
  --archive dist/AegisSCX-1.0.0-rc2-offline.zip \
  --rehearse \
  --run-tests

发布冻结结果:

验收项 结果
离线包内部 SHA-256 9,046 / 9,046 通过
fresh extraction 测试 306 / 306 passed,zero skips
两次确定性构建 字节一致
断网离线演示 通过
净机生命周期 构建、bootstrap、自动重启续行、post-boot、恢复、卸载完成

9.3 机器可读证据入口

  • 正式实现清单:定义唯一竞赛实现、入口和版本身份;
  • 核心证据索引:将每项主张绑定到指标、协议、文件和 SHA-256;
  • 实验报告:记录负载、对照、样本量、置信区间和结果解释;
  • 测试报告:记录单元、契约、故障、系统集成和发布验收;
  • 录屏脚本:按统一数字口径演示完整闭环。

10. 项目结构

src/aegisscx/          观测、归因、资格判断、执行、Canary、恢复与审计
bpf/                   CO-RE 调度延迟观测与 sched_ext 调度专家
native/                Progress Canary 等原生组件
patches/               openEuler sched_ext 与 Kernel Progress Guard 补丁
configs/               意图、策略、实验注册、能力清单和正式发布身份
schemas/               Agent 能力、证据索引、动作与运行结果契约
scripts/               部署、实验、报告、恢复、卸载和发布自动化
benchmarks/            CPU、内存、I/O、锁、HTTP、SQLite、推理和压缩负载
dashboard/             16:9 决策与证据控制台
demo/                  离线闭环演示与证据校验入口
docs/                  中文设计、实验、测试、部署和演示文档
results/               原始与处理后的实验归档
reports/               统计汇总、技术报告和终局机制报告
tests/                 单元、契约、故障注入和回归测试

11. 文档导航

第一次了解项目

  1. 概要设计说明书:问题、目标、总体架构和核心创新;
  2. 术语表:sched_ext、cgroup、PSI、Canary 等概念;
  3. 实验报告:核心数据、实验规模与统计结果。

复核工程实现

  1. 详细设计说明书:模块、数据结构、状态机和异常路径;
  2. Evidence Gate 控制链:证据、资格、执行和恢复契约;
  3. BPF 调度延迟观测:CO-RE 程序、事件语义和质量指标;
  4. 测试报告:测试分层与发布验收。

运行与展示

  1. 本地环境搭建指南:Windows、Linux 与 openEuler 复现步骤;
  2. Dashboard 使用说明:控制台架构、启动和数据来源;
  3. 离线演示说明:四条闭环路径与证据校验;
  4. 录屏脚本:演示顺序、画面重点与统一讲解口径。

12. 实验设计与数据口径

  • 性能结果来自固定 openEuler 节点、指定负载、参数和预注册协议;
  • 正式结果报告重复次数、随机/交错/配对设计、置信区间和效应量;
  • 正式性能实验、校准试验、机制 smoke 和故障注入分别归档;
  • AI 推理场景已接入真实模型、请求级观测和控制链,性能主张按对应注册协议单独使用;
  • Dashboard 只回放已归档数据,所有核心数字均可追溯到证据索引和 SHA-256;
  • 历史失败试验保留用于工程追溯,不进入核心结果表。

License

本项目采用 Apache License 2.0,第三方组件与声明见 NOTICE。

关于
225.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号