docs: 重写 README 为项目介绍,订正性能结论口径 README 原先是部署与演示步骤的流水账,且大量内容已由控制台承载。改为 面向最终交付的项目介绍:从「不存在全能调度器」的实验结论切入说明设计 动机,再讲架构、能力边界、实测数据与复现方式。 性能结论按统计显著性重新表述:7 项显著优势 + 2 项统计持平,替代原先 「9 项指标全部优于」的说法;如实标注满核混部落后 EEVDF 约 13%、以及 scx_bpfland 在三项指标上优于 scx_aura。
docs: 重写 README 为项目介绍,订正性能结论口径
README 原先是部署与演示步骤的流水账,且大量内容已由控制台承载。改为 面向最终交付的项目介绍:从「不存在全能调度器」的实验结论切入说明设计 动机,再讲架构、能力边界、实测数据与复现方式。
性能结论按统计显著性重新表述:7 项显著优势 + 2 项统计持平,替代原先 「9 项指标全部优于」的说法;如实标注满核混部落后 EEVDF 约 13%、以及 scx_bpfland 在三项指标上优于 scx_aura。
AURA(Adaptive Userspace Resource-control Agent)把 Linux 的 CPU 调度决策 从固定策略变成一个可观测、可干预、可回滚的自主控制过程。
系统由自研 sched_ext 用户态调度器 scx_aura 执行策略,由 aurad 完成 workload 感知、决策、安全校验与执行,并通过声明式 Skills 与 MCP 工具接口对外扩展。所有 高风险动作强制经过白名单、参数校验、快照、金丝雀验证、自动回滚与审计。
scx_aura
aurad
第三届中国研究生操作系统开源创新大赛 · 系统创新赛道 · 社区赛题 目标平台:openEuler 24.03-LTS-SP4(x86_64 已完成实机验证)
我们在同一台 openEuler 虚拟机上对四个调度器做了完整对照实验,得到一个明确结论: 不存在全能调度器。
scx_bpfland
scx_rustland 与 scx_bpfland 把唤醒延迟压到 EEVDF 的一半,代价是 schbench 请求 P99 恶化近 4 倍、吞吐下降 42%。反过来,专为吞吐优化的策略在延迟敏感负载上 同样吃亏。
scx_rustland
固定选择任何一个调度器,都会在另一类负载上付出代价。这正是 AURA 的立足点: 由 Agent 感知当前负载特征,在策略与调度器之间做出选择,并对每次变更负责。
┌─ 感知 ────────────────────────────────────────────────┐ │ PSI · procfs · cgroup v2 · scx_stats · eBPF CO-RE hook │ └───────────────────────┬───────────────────────────────┘ ↓ WorkloadProfile ┌─ 决策(双时间尺度)───────────────────────────────────┐ │ 快路径:Reflex 规则引擎(毫秒级,投票 + 冷却防抖) │ │ 慢路径:LLM 规划(DeepSeek,仅在快路径无解时介入) │ │ 复用层:策略仓库最近邻检索 + 指令缓存 │ └───────────────────────┬───────────────────────────────┘ ↓ ActionProposal ┌─ 安全流水线(强制,不可绕过)─────────────────────────┐ │ 工具白名单 → 参数范围校验 → 后端快照 → 执行 │ │ → 金丝雀指标比对 → 提交 或 自动回滚 │ │ → 连续 3 次失败熔断 10 分钟 → SQLite 审计 │ └───────────────────────┬───────────────────────────────┘ ↓ ┌─ 执行 ────────────────────────────────────────────────┐ │ scx_aura(fair / interactive / batch / quota 热切换) │ │ cgroup v2 权重与配额 · 专家调度器切换 │ └───────────────────────────────────────────────────────┘
LLM 不进入调度快路径。 慢路径只产出「提案」,且必须通过与规则路径完全相同的 校验器。模型不能引入新工具、越过参数范围,也不能生成并加载任意 BPF 代码。这样 既获得自然语言目标到调度动作的映射能力,又不把不确定性放进内核路径。
决策来源多样,校验路径唯一收口。 Reflex、LLM、策略仓库三条来源产生的提案, 都汇聚到同一个 ActionValidator 与 SafetyPipeline。新增决策来源不需要新增 安全代码。
ActionValidator
SafetyPipeline
能力通过声明式 Skill 扩展。 一个 Skill 用 YAML 声明它感知哪些指标、用哪条 决策路径、允许调用哪些工具、参数上下界、金丝雀指标与熔断阈值。新增能力不改核心 代码。
基于 scx_rustland_core 的用户态调度器,BPF 侧调度骨架来自上游,本项目实现其上 的策略决策层与运行时控制面:
scx_rustland_core
fair
interactive
batch
quota
任务在入队时按执行时长、唤醒率与 cgroup 归属被分类为 interactive / batch / latency_critical,供各策略打分。策略与时间片支持毫秒级热更新,无需重启调度器。
/proc/pressure/cpu
cpu.pressure
/proc/stat
/proc/loadavg
raw_tp/sched_switch
/run/aura/app-metrics.json
cpu-sched
cgroup-qos
network-policy
security-policy
template: true
.bpf.c
system.slice
控制台围绕真实使用流程组织,数据全部来自运行中的系统或归档证据,不含静态示意图。
http://<虚拟机IP>:8080
使用者不需要理解 fair/interactive/batch/quota —— 这些是 Agent 的执行 手段,不是产品输入。在「调度任务」中描述目标(例如「优先保障在线服务 P99,批处理 至少保留 20% CPU,P99 恶化超 15% 自动回滚」),Agent 会在下一周期接管。
测试环境:openEuler 24.03-LTS-SP4,6.6.0-...oe2403sp4-aura 内核, 8 vCPU / 8 GiB 虚拟机。同一台机器顺序测试,所有调度器均为 1 次预热 + 5 次正式 重复,报告 mean ± sample stddev。
6.6.0-...oe2403sp4-aura
7 项核心指标在 Welch t 检验(n=5)下显著优于默认 EEVDF:
Redis 基线的标准差偏大(EEVDF QPS 变异系数约 29%),该轮测试环境噪声高于其他 场景;scx_aura 在同轮的变异系数为 6%,增益方向明确但绝对幅度应结合方差解读。
以下两项虽为正向,但在 n=5 下 Welch t 检验不显著,如实标注为持平而非提升:
Redis 与混部两个场景存在两套矩阵,口径不同,页面与本文均分别标注:
interactive/750µs
bench/scenarios/*-autonomous.yaml
aura_decided_policy
两者不混用:自主场景在参数层面拒绝与预设策略共存,由测试保证。
sudo systemctl enable --now \ scx-aura aura-cgroup-agent aurad aura-mcp aura-console sudo bash /opt/aura/deploy/verify-stack.sh
验收通过时应看到 11 行 [PASS],并以 sched_ext_state=enabled、 sched_ext_ops=aura_...、failures=0 结束。随后打开 http://<虚拟机IP>:8080。
[PASS]
sched_ext_state=enabled
sched_ext_ops=aura_...
failures=0
sudo bash /opt/aura/deploy/demo.sh # 需要外网调用 DeepSeek sudo bash /opt/aura/deploy/demo.sh --offline # 无外网
依次完成:服务启动 → 11 项验收 → 策略热更新与恢复 → MCP 握手 → 调度器切换与 内核安全回退 → 真实 CPU 推理 → LLM 生成建议(不执行)→ 输出控制台地址。异常 退出时会自动恢复 scx_aura。
cd /path/to/aura sudo bash deploy/setup-runtime.sh --install-deps
若官方内核未启用 sched_ext,用正式签名 source RPM 构建独立 -aura 内核(保留 原内核与 rescue 启动项):
-aura
sudo bash deploy/build-kernel-official.sh --source-rpm <kernel-src.rpm> --install sudo bash deploy/enable-cgroup-v2.sh sudo bash deploy/rebuild-kernel-syscall-kfuncs.sh sudo reboot
内核补丁、上游提交与 SHA256 记录见 /var/log/aura/kernel-build-manifest.txt 与 docs/dependency-provenance.md。
/var/log/aura/kernel-build-manifest.txt
docs/dependency-provenance.md
$env:PYTHONPATH = "src" python -m uvicorn aura.console:create_app --factory --port 8090
# 准备固定版本 workload sudo bash deploy/prepare-benchmark-workloads.sh sudo bash deploy/prepare-llama-workload.sh # 四调度器正式矩阵(1 次预热 + 5 次重复,约 5 小时) sudo bash deploy/run-technical-matrices.sh # Agent 自主决策矩阵 sudo bash deploy/run-autonomous-matrices.sh # 单独运行某个场景 sudo env AURA_BENCH_SCENARIO=bench/scenarios/redis.yaml \ AURA_ARTIFACT_ROOT=artifacts/redis-rerun \ bash deploy/run-benchmark-matrix.sh # 由归档 CSV 重新生成控制台展示数据 PYTHONPATH=src python -m aura.bench.dashboard
展示数据由归档 CSV 统一计算增益方向与统计量,不经人工抄录。
src/aura/ Agent 编排、感知、画像、决策、安全、MCP、控制台、基准 ├── agent.py 四角色编排与控制循环 ├── perception.py PSI / procfs / cgroup 采集 ├── profile.py workload 画像 ├── reflex.py 规则快路径 ├── llm.py LLM 慢路径(DeepSeek 兼容) ├── repository.py 策略仓库与相似度检索 ├── safety.py 校验、快照、金丝雀、回滚、熔断 ├── tools.py MCP 工具白名单 └── backends/ mock 与真实 Unix 后端 scheds/scx_aura/ 自研用户态调度器(四策略 + 控制面) skills/ cpu-sched、cgroup-qos、network、security ebpf/ cgroup runtime CO-RE hook 与扩展模板 bench/scenarios/ 可复现基准场景定义 deploy/ 内核构建、运行时、systemd、演示与基准脚本 artifacts/ 正式矩阵原始 JSON、汇总 CSV 与门禁日志 console/static/ 控制台前端 tests/ 39 项自动化测试 docs/ 环境验证、依赖来源与验证报告
ruff
cargo fmt --check
cargo clippy -D warnings
/etc/aura/deepseek.key
更多材料:方案设计 · 验证报告 · 落地状态 · 依赖来源
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
AURA — 面向 openEuler 的自适应资源管控 Agent
AURA(Adaptive Userspace Resource-control Agent)把 Linux 的 CPU 调度决策 从固定策略变成一个可观测、可干预、可回滚的自主控制过程。
系统由自研 sched_ext 用户态调度器
scx_aura执行策略,由aurad完成 workload 感知、决策、安全校验与执行,并通过声明式 Skills 与 MCP 工具接口对外扩展。所有 高风险动作强制经过白名单、参数校验、快照、金丝雀验证、自动回滚与审计。1. 为什么需要自适应调度
我们在同一台 openEuler 虚拟机上对四个调度器做了完整对照实验,得到一个明确结论: 不存在全能调度器。
scx_aurascx_bpflandscx_aurascx_bpflandscx_bpflandscx_rustland与scx_bpfland把唤醒延迟压到 EEVDF 的一半,代价是 schbench 请求 P99 恶化近 4 倍、吞吐下降 42%。反过来,专为吞吐优化的策略在延迟敏感负载上 同样吃亏。固定选择任何一个调度器,都会在另一类负载上付出代价。这正是 AURA 的立足点: 由 Agent 感知当前负载特征,在策略与调度器之间做出选择,并对每次变更负责。
2. 系统架构
四类协作角色
关键设计取舍
LLM 不进入调度快路径。 慢路径只产出「提案」,且必须通过与规则路径完全相同的 校验器。模型不能引入新工具、越过参数范围,也不能生成并加载任意 BPF 代码。这样 既获得自然语言目标到调度动作的映射能力,又不把不确定性放进内核路径。
决策来源多样,校验路径唯一收口。 Reflex、LLM、策略仓库三条来源产生的提案, 都汇聚到同一个
ActionValidator与SafetyPipeline。新增决策来源不需要新增 安全代码。能力通过声明式 Skill 扩展。 一个 Skill 用 YAML 声明它感知哪些指标、用哪条 决策路径、允许调用哪些工具、参数上下界、金丝雀指标与熔断阈值。新增能力不改核心 代码。
3. 已实现能力
CPU 调度(
scx_aura)基于
scx_rustland_core的用户态调度器,BPF 侧调度骨架来自上游,本项目实现其上 的策略决策层与运行时控制面:fairinteractivebatchquota任务在入队时按执行时长、唤醒率与 cgroup 归属被分类为 interactive / batch / latency_critical,供各策略打分。策略与时间片支持毫秒级热更新,无需重启调度器。
感知
/proc/pressure/cpu、cpu.pressure)/proc/stat、/proc/loadavg)raw_tp/sched_switch)/run/aura/app-metrics.json注入标准化接口
cpu-sched、cgroup-qos为完整实现;network-policy、security-policy为扩展模板(template: true,已在页面与配置中如实标注).bpf.c+ 用户态消费程序 + Makefile);XDP 包计数与 execve 审计为可编译的扩展模板安全
system.slice4. 控制台
控制台围绕真实使用流程组织,数据全部来自运行中的系统或归档证据,不含静态示意图。
使用者不需要理解
fair/interactive/batch/quota—— 这些是 Agent 的执行 手段,不是产品输入。在「调度任务」中描述目标(例如「优先保障在线服务 P99,批处理 至少保留 20% CPU,P99 恶化超 15% 自动回滚」),Agent 会在下一周期接管。5. 实测结果
测试环境:openEuler 24.03-LTS-SP4,
6.6.0-...oe2403sp4-aura内核, 8 vCPU / 8 GiB 虚拟机。同一台机器顺序测试,所有调度器均为 1 次预热 + 5 次正式 重复,报告 mean ± sample stddev。统计显著的优势项
7 项核心指标在 Welch t 检验(n=5)下显著优于默认 EEVDF:
Redis 基线的标准差偏大(EEVDF QPS 变异系数约 29%),该轮测试环境噪声高于其他 场景;
scx_aura在同轮的变异系数为 6%,增益方向明确但绝对幅度应结合方差解读。与 EEVDF 统计持平的项
以下两项虽为正向,但在 n=5 下 Welch t 检验不显著,如实标注为持平而非提升:
已知短板
scx_aura的 QPS 仍落后 EEVDF 约 13%。诊断结论是瓶颈来自高频用户态调度往返;增大时间片到 10000µs 可将 P99 改善至优于 EEVDF 2.8%,但吞吐差距未消除。该场景的历史矩阵 因未固定时间片、且 quota 用量账本跨样本继承,已判定为配置异常并从正式结论中 隔离,页面保留原始证据但不计入摘要。scx_bpfland在唤醒延迟、推理吞吐与编译耗时上优于scx_aura。 AURA 的定位不是在单一负载上击败所有专家调度器,而是在负载变化时选对策略。关于测试口径
Redis 与混部两个场景存在两套矩阵,口径不同,页面与本文均分别标注:
interactive/750µs),用于验证scx_aura在给定参数下的性能上限。上表 Redis 数据来自该矩阵。bench/scenarios/*-autonomous.yaml):aurad全程运行, 由 Agent 自行感知并决策,每个样本记录其实际选择的策略(aura_decided_policy)。 这是「自主控制」的直接证据。两者不混用:自主场景在参数层面拒绝与预设策略共存,由测试保证。
6. 快速开始
已部署的比赛虚拟机
验收通过时应看到 11 行
[PASS],并以sched_ext_state=enabled、sched_ext_ops=aura_...、failures=0结束。随后打开http://<虚拟机IP>:8080。一条命令完整演示
依次完成:服务启动 → 11 项验收 → 策略热更新与恢复 → MCP 握手 → 调度器切换与 内核安全回退 → 真实 CPU 推理 → LLM 生成建议(不执行)→ 输出控制台地址。异常 退出时会自动恢复
scx_aura。从全新 openEuler 环境部署
若官方内核未启用 sched_ext,用正式签名 source RPM 构建独立
-aura内核(保留 原内核与 rescue 启动项):内核补丁、上游提交与 SHA256 记录见
/var/log/aura/kernel-build-manifest.txt与docs/dependency-provenance.md。仅预览界面(无需虚拟机)
7. 复现实验
展示数据由归档 CSV 统一计算增益方向与统计量,不经人工抄录。
8. 项目结构
9. 赛题要求对照
scx_aura+aurad,实机运行10. 质量与工程约束
ruff、cargo fmt --check、cargo clippy -D warnings全通过/etc/aura/deepseek.key,不进入仓库、日志与命令历史11. 尚未完成
参考
更多材料:方案设计 · 验证报告 · 落地状态 · 依赖来源