docs: replace decorative figures with academic charts
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 核心零第三方运行时依赖
1.0.0-rc2
图形化驾驶舱把“看懂系统、看见动作、相信结果”压缩到同一块 16:9 画布:先解释跨子系统瓶颈和动作资格,再展示 Observe → Diagnose → Qualify → Canary → Commit/Abstain/Rollback,最后用 Baseline、AegisSCX、样本量、95% CI、Run ID 与 SHA-256 闭合证据链。
混合业务运行时,系统瓶颈会在 CPU、内存、I/O 和锁之间迁移。单看 CPU 利用率或运行队列,容易把“系统很忙”误判为“CPU 调度有问题”;即使 CPU 确实是瓶颈,同一个调度动作也可能提升吞吐、同时恶化尾延迟。
AegisSCX 因此把一次调度优化拆成五个连续问题:
同一种 CPU 动作在三类场景中产生了完全不同的结果:
这三组结果共同说明:调度系统的价值不只来自“找到一个表现好的策略”,更来自知道何时可以用、何时不该用,以及用错以后如何恢复。
业务意图 │ 延迟、吞吐、错误率、后台进度、公平性 ▼ 多源观测 ──→ 跨子系统归因 ──→ 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。
TelemetrySnapshot
ABSTAIN
cpu.weight
这些场景使用同一条 Observe → Diagnose → Qualify → Canary → Commit/Rollback 控制链,不为单个演示场景复制一套独立逻辑。
所有展示数据均从归档结果和机器可读证据索引生成,不在控制台或文档中手工改写。
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
aegis-agent-tools
chmod +x demo/run-showcase.sh ./demo/run-showcase.sh
演示依次回放:
演示为确定性离线回放,不依赖网络,也不会重做耗时性能实验。
cd dashboard pnpm install pnpm dev
控制台集中展示工作负载、跨子系统观测、瓶颈判断、动作资格、Canary 结果、cgroup / sched_ext 执行状态、Kernel Guard 恢复和证据文件。生产检查命令:
pnpm lint pnpm test
驾驶舱不是静态数字大屏,而是把一条可复核控制链压缩到同一视图:
现场演示时,浏览器与 openEuler 终端使用同一个 Run ID:浏览器发起注册实验,终端查看对应 systemd 单元和运行日志;完成后由页面读取新生成的 summary.json,终端执行 sha256sum -c SHA256SUMS。因此页面展示的是本次实验结果,而不是预置数字。
summary.json
sha256sum -c SHA256SUMS
驾驶舱包含两个明确隔离的工作区:
从项目根目录启动现场桥接:
./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 使用说明。
127.0.0.1:8765
results/live-ab/<run-id>/
下面的示例只计算诊断、资格与证据,不修改当前机器资源:
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
JSON-RPC stdio 服务支持:
initialize
tools/list
tools/call
resources/list
resources/read
系统级 eBPF、sched_ext、内核构建、一次性启动和回滚流程见本地环境搭建指南。
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
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
发布冻结结果:
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/ 单元、契约、故障注入和回归测试
本项目采用 Apache License 2.0,第三方组件与声明见 NOTICE。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
AegisSCX — 面向 openEuler 混合负载的证据驱动调度 Agent
AegisSCX 不是一个只追求“更快”的固定调度器,而是一套面向混合负载的安全自适应调度系统:它先用 CPU、内存、I/O、锁、PSI、cgroup 与 eBPF 信号判断真实瓶颈,再决定 CPU 动作是否具备执行资格;动作只在短窗口 Canary 中试运行,由真实业务指标决定提交或回滚;当 sched_ext 调度器停止推进时,内核级 Progress Guard 自动恢复默认调度。
初赛提交材料
图形化驾驶舱把“看懂系统、看见动作、相信结果”压缩到同一块 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.2 系统最终只产生三类动作结果
1.3 四项核心结果
2. 为什么固定调度策略不够
同一种 CPU 动作在三类场景中产生了完全不同的结果:
这三组结果共同说明:调度系统的价值不只来自“找到一个表现好的策略”,更来自知道何时可以用、何时不该用,以及用错以后如何恢复。
3. 一次完整闭环如何运行
TelemetrySnapshotABSTAIN或有资格候选4. 系统架构
cpu.weight、sched_ext 专家、状态快照、有限租约四条不可绕过的控制契约
5. 核心创新与竞争优势
5.1 从“选择调度器”升级为“管理动作生命周期”
ABSTAIN,不写资源5.2 七项工程创新
6. 赛题场景覆盖
这些场景使用同一条 Observe → Diagnose → Qualify → Canary → Commit/Rollback 控制链,不为单个演示场景复制一套独立逻辑。
7. 实验结果
7.1 性能、安全与恢复
7.2 常驻开销与观测质量
7.3 如何理解这些数字
所有展示数据均从归档结果和机器可读证据索引生成,不在控制台或文档中手工改写。
8. 运行项目
8.1 环境要求
8.2 安装 Python 控制面
Linux / openEuler:
Windows PowerShell:
安装后提供两个入口:
aegis:诊断、资格判断、Canary、执行、恢复和证据生成;aegis-agent-tools:面向 Agent 客户端的 JSON-RPC stdio 能力服务。8.3 五分钟离线闭环演示
演示依次回放:
演示为确定性离线回放,不依赖网络,也不会重做耗时性能实验。
8.4 启动 16:9 决策与证据控制台
控制台集中展示工作负载、跨子系统观测、瓶颈判断、动作资格、Canary 结果、cgroup / sched_ext 执行状态、Kernel Guard 恢复和证据文件。生产检查命令:
驾驶舱不是静态数字大屏,而是把一条可复核控制链压缩到同一视图:
现场演示时,浏览器与 openEuler 终端使用同一个 Run ID:浏览器发起注册实验,终端查看对应 systemd 单元和运行日志;完成后由页面读取新生成的
summary.json,终端执行sha256sum -c SHA256SUMS。因此页面展示的是本次实验结果,而不是预置数字。驾驶舱包含两个明确隔离的工作区:
从项目根目录启动现场桥接:
桥接只监听
127.0.0.1:8765,远端身份不进入浏览器;新结果写入results/live-ab/<run-id>/。完整说明见 Dashboard 使用说明。8.5 按控制链逐步运行
下面的示例只计算诊断、资格与证据,不修改当前机器资源:
8.6 启动 Agent Tools 服务
JSON-RPC stdio 服务支持:
initialize:协议初始化;tools/list:列出 7 个注册 Tools;tools/call:调用观测、策略评估、证据校验和影子学习;resources/list:列出正式实现与证据资源;resources/read:读取机器可读发布身份和证据索引。系统级 eBPF、sched_ext、内核构建、一次性启动和回滚流程见本地环境搭建指南。
9. 测试、复现与证据
9.1 运行核心回归
运行完整测试:
9.2 验证离线发布包
发布冻结结果:
9.3 机器可读证据入口
10. 项目结构
11. 文档导航
第一次了解项目
复核工程实现
运行与展示
12. 实验设计与数据口径
License
本项目采用 Apache License 2.0,第三方组件与声明见 NOTICE。