目录

# openEuler 自适应资源管控 Agent

作品简介

本作品面向 openEuler 24.03-LTS-SP4,设计并实现了一个用户态自适应资源管控 Agent 原型系统。系统以 oe-agentd 守护进程为核心,通过 workload 感知、策略路由、sched_ext/scx 调度策略集成、cgroup 资源控制和 eBPF hook 扩展,实现“感知 → 决策 → 执行 → 回退 → 验证”的资源管控闭环。

项目针对赛题要求重点实现:

  • 用户态 Agent 框架:oe-agentd + oe-agentctl + Unix Domain Socket JSON-RPC 控制面。
  • Workload 感知:采集 /proc、cgroup、sched_ext 状态、CPU 利用率、系统 load、延迟探针等指标。
  • 自适应策略路由:内置 baseline、latency、throughput、isolation 四类 expert,支持规则决策和滞回控制。
  • sched_ext/scx 集成:对接 scx_layered,提供 latency、throughput、isolation 三类 JSON 策略配置。
  • cgroup/eBPF 扩展:实现 resource-control 样例,并提供 network/security agent 模板。
  • Skills 扩展接口:通过 skill.yaml 标准化 sensor、policy、actuator、benchmark 能力。
  • 可复现实验:提供环境检查、构建、BPF 编译、安全演示、benchmark 与 VM 验证文档。

当前代码已在 openEuler 24.03 LTS-SP4 x86_64 VMware 虚拟机上完成编译和安全演示验证。当前验证 VM 的内核未启用 CONFIG_SCHED_CLASS_EXT,因此真实 sched_ext 调度器加载需要切换到启用 sched_ext 的内核;Agent 框架、scx 配置集成、Skills 接口、eBPF 样例编译和 cgroup 资源控制闭环均已实现并验证。

运行说明

1. 环境检查

cd ~/system
./scripts/check_env.sh || true

2. 编译项目

cd ~/system
cargo build --release --workspace
make -C bpf

3. 推荐演示方式:安全模式

当前验证 VM 未启用 sched_ext,录屏和答辩推荐使用安全模式,临时关闭真实 scx 加载:

cd ~/system
sudo pkill -f oe-agentd || true
sudo rm -f /run/oe-agentd.sock
cp config/default.toml /tmp/oe-agent-video.toml
sed -i 's/enable_scx = true/enable_scx = false/' /tmp/oe-agent-video.toml
sudo nohup ./target/release/oe-agentd --config /tmp/oe-agent-video.toml > /tmp/oe-agentd-video.log 2>&1 &
sleep 2
sudo chmod 666 /run/oe-agentd.sock

查看状态和执行策略切换:

./target/release/oe-agentctl status
./target/release/oe-agentctl profile
./target/release/oe-agentctl apply latency
./target/release/oe-agentctl apply throughput
./target/release/oe-agentctl apply isolation
./target/release/oe-agentctl rollback

展示 Skills 与 benchmark:

./target/release/oe-agentctl skill list
./target/release/oe-agentctl skill run workload-profiler
./target/release/oe-agentctl benchmark

4. 支持 sched_ext 内核下的真实 scx 模式

如果系统内核启用了 CONFIG_SCHED_CLASS_EXT=y 且已安装 scx_layered,可以使用默认配置真实加载 scx 调度器:

cd ~/system
sudo ./target/release/oe-agentd --config config/default.toml
sudo ./target/release/oe-agentctl apply latency
sudo ./target/release/oe-agentctl apply throughput
sudo ./target/release/oe-agentctl apply isolation
sudo ./target/release/oe-agentctl rollback

1. 项目亮点

  • 用户态 Agent 框架:实现 oe-agentd 守护进程和 oe-agentctl 控制命令,通过 Unix Domain Socket + JSON-RPC 管理本机资源策略。
  • Workload 感知:周期性采集 /proc、cgroup、sched_ext 状态、CPU 利用率、load、runnable 数量和延迟探针结果。
  • Mixture-of-Schedulers 策略路由:内置 baseline、latency、throughput、isolation 四类 expert,使用规则 + 滞回避免策略震荡。
  • sched_ext/scx 集成:对接 scx_layered,支持 file:config/scx_*.json 方式加载 latency、throughput、isolation 调度配置。
  • cgroup 资源控制 Agent:根据策略动态调整 service/batch cgroup;同时支持 cgroup v2 与 openEuler 当前环境常见的 cgroup v1 fallback。
  • eBPF 扩展样例:提供 resource-control eBPF 程序,以及 network/security audit-only 模板,默认不启用高风险拦截策略。
  • 标准化 Skills 接口:通过 skill.yaml 定义 sensor、policy、actuator、benchmark 能力,支持快速扩展 Agent 能力。
  • 可复现实验脚本:提供环境检查、构建、BPF 编译、安全演示和混部 benchmark 脚本。

2. 总体架构

flowchart LR
  W["Workloads\nHTTP/Redis/Batch/Stress"] --> S["Sensors\n/proc + cgroup + eBPF"]
  S --> M["Metrics Snapshot\n1s aggregation"]
  M --> P["Policy Router\nMoS rules + hysteresis"]
  P --> A["Actuators"]
  A --> SCX["sched_ext / scx_layered\nlatency / throughput / isolation"]
  A --> CG["cgroup control\ncpu.weight/cpu.max or v1 fallback"]
  SCX --> W
  CG --> W

核心闭环:

  1. oe-agentd 周期采集 workload 指标。
  2. PolicyEngine 判断当前 workload 类型和压力状态。
  3. SchedulerManager 调用 scx_layered 切换或回退调度策略。
  4. CgroupController 动态调整 service/batch cgroup CPU 配额和权重。
  5. oe-agentctl 对外提供 status、profile、apply、rollback、benchmark、skill 等操作。

3. 目录结构

.
├── bpf/                         # eBPF 程序:resource-control、network/security 模板
├── config/                      # Agent 配置和 scx_layered JSON 策略
│   ├── default.toml
│   ├── scx_latency.json
│   ├── scx_throughput.json
│   └── scx_isolation.json
├── crates/
│   ├── oe-agent-core/           # 指标采集、策略路由、调度器、cgroup、skills、RPC 类型
│   ├── oe-agentd/               # 用户态守护进程
│   └── oe-agentctl/             # 命令行客户端
├── docs/                        # 架构、验证、演示、提交说明
├── scripts/                     # 环境检查、构建、演示、benchmark、依赖安装脚本
├── skills/                      # 标准化 Skill manifest 和入口脚本
└── packaging/                   # systemd/package 相关文件

4. 环境要求

推荐环境:

  • OS:openEuler 24.03-LTS-SP4 x86_64
  • Kernel:建议启用 CONFIG_SCHED_CLASS_EXT=y、CONFIG_BPF=y、CONFIG_DEBUG_INFO_BTF=y
  • 工具链:Rust、Cargo、clang、bpftool、make、libbpf-devel、kernel-devel、stress-ng
  • cgroup:支持 cgroup v2;如果系统为 cgroup v1,本项目已提供 CPU 控制 fallback

检查环境:

cd ~/system
./scripts/check_env.sh || true

安装常用依赖:

cd ~/system
sudo ./scripts/install_deps_openeuler.sh

如系统未提供 scx_layered,可从 sched-ext/scx 构建安装:

cd ~/system
./scripts/install_scx_from_source.sh

5. 构建

Rust workspace:

cd ~/system
cargo build --release --workspace

或使用项目脚本:

cd ~/system
./scripts/build.sh

eBPF 样例:

cd ~/system
make -C bpf

6. 快速运行

6.1 安全演示模式

该模式不依赖真实 sched_ext 内核,适合当前 openEuler VM 和答辩现场快速展示:

cd ~/system
./scripts/demo_safe.sh

该脚本会启动本地 latency probe 和混部压力,展示 Agent CLI、Skills、benchmark 和 cgroup 控制能力。

6.2 启动 Agent daemon

cd ~/system
sudo ./target/release/oe-agentd --config config/default.toml

另开终端查看状态:

cd ~/system
./target/release/oe-agentctl status
./target/release/oe-agentctl profile

6.3 手动切换策略

cd ~/system
sudo ./target/release/oe-agentctl apply latency
sudo ./target/release/oe-agentctl apply throughput
sudo ./target/release/oe-agentctl apply isolation
sudo ./target/release/oe-agentctl rollback

6.4 Skills 接口

cd ~/system
./target/release/oe-agentctl skill list
./target/release/oe-agentctl skill run workload-profiler
./target/release/oe-agentctl skill run scx-policy-router
./target/release/oe-agentctl skill run cgroup-resource-control

6.5 benchmark

cd ~/system
./target/release/oe-agentctl benchmark --duration 10
# 或
./scripts/benchmark_mixed.sh

7. 内置策略说明

Expert 目标场景 动作
baseline 默认系统状态或异常回退 停止 scx,恢复 cgroup 默认配置
latency HTTP/Redis 等延迟敏感服务 使用 latency scx profile,提高服务 cgroup 权重
throughput 编译、批处理、stress-ng 等吞吐任务 使用 throughput scx profile,降低迁移和调度开销
isolation noisy neighbor 或服务 p99 恶化 限制 batch cgroup,保护 service cgroup

策略路由采用滞回机制:只有连续多个窗口满足条件才切换策略;当检测到 BPF/scx 异常、指标采集失败或用户执行 rollback 时,会回退到 baseline。


8. Skills/Tools 扩展接口

每个 Skill 使用 skill.yaml 描述:

name: cgroup-resource-control
type: actuator
inputs:
  - expert
outputs:
  - applied_limits
permissions:
  - cgroup.write
entrypoint: ./run.sh
rollback: ./rollback.sh

当前内置 Skills:

  • workload-profiler:采集和输出 workload profile。
  • scx-policy-router:执行调度策略路由逻辑。
  • cgroup-resource-control:根据策略调整 cgroup CPU 资源。
  • mixed-workload-benchmark:运行混部场景 benchmark。

新增能力时,只需在 skills/ 下增加目录和 skill.yaml,即可通过 oe-agentctl skill list/run 暴露给 Agent。


9. eBPF 扩展

bpf/ 目录包含:

  • resource_control.bpf.c:资源控制观测样例,用于采集调度和 cgroup 相关事件。
  • network_template.bpf.c:network policy agent 模板,预留 tc/cgroup socket 观测接口。
  • security_audit.bpf.c:security policy agent 模板,默认 audit-only,避免演示时误拦截。

编译:

cd ~/system
make -C bpf

可选加载:

cd ~/system
sudo ./scripts/load_bpf.sh load
sudo ./scripts/load_bpf.sh unload

10. 已验证结果

验证环境:

  • OS:openEuler 24.03 LTS-SP4
  • Kernel:6.6.0-159.4.3.154.oe2403sp4.x86_64
  • Rust:rustc 1.96.0、cargo 1.96.0
  • 虚拟化:VMware Workstation x86_64 VM

已通过:

  • cargo build --release --workspace
  • make -C bpf
  • ./scripts/demo_safe.sh
  • oe-agentctl status/profile/skill/benchmark
  • scx_layered --print-and-exit file:config/scx_latency.json
  • cgroup v1 fallback 写入和 rollback 验证

示例安全演示结果见:

requests=2671, errors=0, qps≈890, p99≈2.23ms

详细记录见:

  • docs/vm-validation.md
  • docs/demo-script.md
  • docs/submit-checklist.md

11. 当前 VM 的已知限制

当前验证 VM 的 openEuler SP4 内核配置显示:

# CONFIG_SCHED_CLASS_EXT is not set

并且:

/sys/kernel/sched_ext 不存在

因此该 VM 不能真实加载 sched_ext 调度器。本项目已经完成 Agent 框架、scx 配置解析、调度器管理接口、cgroup 资源控制和安全演示;若要现场展示真实 sched_ext,需要启动一个启用了以下选项的内核:

CONFIG_SCHED_CLASS_EXT=y

切换到支持 sched_ext 的内核后,可执行:

cd ~/system
sudo ./target/release/oe-agentd --config config/default.toml
sudo ./target/release/oe-agentctl apply latency
sudo ./target/release/oe-agentctl apply throughput
sudo ./target/release/oe-agentctl apply isolation
sudo ./target/release/oe-agentctl rollback

12. 赛题要求对应关系

赛题要求 本项目实现
基于用户态调度的资源管控 Agent 框架 oe-agentd + oe-agentctl + JSON-RPC 控制面
标准化工具和 Skills 能力接口 skills/*/skill.yaml + skill list/run
感知 workloads /proc、cgroup、sched_ext 状态、延迟探针、eBPF 模板
基于 sched_ext 调整 CPU 调度策略 SchedulerManager 集成 scx_layered file:config/*.json
优化 workload 性能 latency/throughput/isolation expert + benchmark 脚本
eBPF hook 扩展 resource-control 样例 + network/security 模板
可复现实验环境 scripts/check_env.sh、demo_safe.sh、benchmark_mixed.sh、docs/vm-validation.md
异常回退 rollback、baseline expert、cgroup 恢复、scx 进程管理

13. 提交物

压缩包:

system-final.tar.gz

提交归档文件:system-final.tar.gz

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

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