目录

AgentSched

AgentSched 是一个面向 AI Agent 工作负载的 Linux phase-aware 资源管控原型。它运行在 openEuler 24.03 LTS SP3 / Linux 6.6 / cgroup v2 / eBPF / sched_ext 环境上,通过应用侧运行时 hint、Sensor 证据和 Decider 策略,把 Agent 当前阶段写入 phase_state BPF map,并广播给 CPU、Resource、Network、Security 四类 Agent。 当前仓库包含核心源码、Shim、BPF 探针、评测脚本和 Grafana dashboard。

功能点

  • 感知或接收 AI Agent 的运行阶段 hint,并形成统一 PhaseState
  • 通过 4-Skill Agent 架构联动 CPU 调度、cgroup 资源控制、网络策略和安全策略。
  • 通过 Shim 支持 LD_PRELOAD 与 CLI/xattr 两条应用侧 hint 路径。
  • 通过 Sec Policy 的 audit / learn / enforce 三模式验证受控安全策略路径。
  • 通过 Prometheus/Grafana 静态面板展示 phase、CPU、Memory、Network 四个维度。
  • 提供完整评测 evidence:位于目录agentsched/experiment下。

架构

Runtime hint / Sensor evidence
        |
        v
agentsched-daemon
        |
        +--> agentsched-decider
        |
        v
/sys/fs/bpf/agentsched/phase_state
        |
        +--> CPU Scheduling Agent
        +--> Resource Control Agent
        +--> Network Policy Agent
        +--> Security Policy Agent

Application side:
  shim/libagentsched_shim.so
  shim/agentsched-shim-cli

Kernel side:
  sched_ext / cgroup v2 / BPF LSM / pinned BPF maps

核心运行链路是:

  1. 应用通过 Shim、CLI、xattr 或 trace replay 提供 phase hint。
  2. daemon 加载配置、Sensor、Decider 和 Skill 动态库。
  3. Decider 生成 PhaseState
  4. daemon 写入 pinned BPF map,并广播 phase change 到 Skill。
  5. 各 Skill 根据 phase/cgroup 执行自己的受控策略。

核心源码

最核心源码位于 crates/shim/

crates/agentsched-daemon/
  src/main.rs                       # 主控 daemon 入口
  src/skill_manager.rs              # dlopen 加载 Skill, 调用 init/on_phase_change/destroy
  src/bpf_map_writer.rs             # 写 phase_state BPF map
  src/metrics_server.rs             # Prometheus metrics endpoint
  examples/w14-t3-xattr-listener.rs # Shim xattr fallback listener

crates/agentsched-skill-sdk/
  src/lib.rs                        # PhaseState v2 68B + SkillVtable v1 40B ABI

crates/agentsched-decider/
  src/lib.rs                        # phase/policy 决策逻辑

crates/agentsched-sensor/
  src/lib.rs, src/main.rs           # Sensor 与 trace replay 支撑

crates/agentsched-skill-cpu-phase/
  src/lib.rs                        # CPU Scheduling Agent 用户态加载入口
  src/bpf/scx_agent_phase.bpf.c      # phase-aware sched_ext 调度器主线

crates/agentsched-skill-resource-ctl/
  src/lib.rs, src/cgroup.rs         # Resource Control Agent, cgroup v2 控制

crates/agentsched-skill-net-policy/
  src/*.rs                          # Network Policy Agent, DNS audit, allowlist, tool profile

crates/agentsched-skill-sec-policy/
  src/*.rs                          # Security Policy Agent, mode/config/hash/resolver
  src/bpf/sec_policy_probe.bpf.c     # Security Policy BPF LSM 探针

shim/
  src/lib.rs                        # LD_PRELOAD runtime hint path
  src/bin/cli.rs                    # CLI/xattr fallback path

如果只看一条主线,建议先读:

  1. crates/agentsched-skill-sdk/src/lib.rs
  2. crates/agentsched-daemon/src/skill_manager.rs
  3. crates/agentsched-daemon/src/main.rs
  4. crates/agentsched-skill-cpu-phase/src/bpf/scx_agent_phase.bpf.c
  5. crates/agentsched-skill-resource-ctl/src/cgroup.rs
  6. crates/agentsched-skill-net-policy/src/lib.rs
  7. crates/agentsched-skill-sec-policy/src/lib.rs

目录结构

.
├── crates/                      # Rust workspace 核心源码
├── docs/                        # 技术文档、策略示例与测评分析报告
├── examples/                    # runtime hint / agent feedback 示例数据
├── experiment/                  # 最终复现实验、结果和可视化材料
├── shim/                        # LD_PRELOAD/CLI hint 注入通路
├── target/                      # Cargo build 输出,不属于源码
├── Cargo.toml                   # workspace 定义
├── Cargo.lock                   # Rust 依赖锁定
├── LESSONS.md                   # 工程经验与 caveat 记录
└── README.md

构建

基础构建:

cargo build --workspace --release

基础测试:

cargo test --workspace --release

构建 Shim:

cd shim
cargo build --release

常用产物:

target/release/agentsched-daemon
shim/target/release/libagentsched_shim.so
shim/target/release/agentsched-shim-cli

运行环境要求

当前运行以及开发环境为:

openEuler 24.03 LTS SP4
Linux 6.6.0-agentsched+
cgroup v2 unified hierarchy
BPF LSM enabled
sched_ext / scx-tools v1.0.4-dirty
clang 17, gcc 12, Rust 1.95
bpftool 7.6, libbpf 1.6

部分评测需要 root 权限、BPF pinned map、cgroup v2、QEMU VM 环境中的 PMU fallback。评测脚本会在结束时确认 sec_policy_mode_map[0]=0 回滚。

完整可复现实验环境

本框架的实验复现依赖 Linux 内核能力、Rust 用户态构建环境、BPF 工具链以及若干 workload 工具。推荐使用与本仓库验证一致的环境;如果环境不同,尤其是内核版本、sched_ext 支持和 BPF LSM 配置不同,CPU 调度与安全策略实验可能会存在问题。

1. 操作系统与内核

已验证环境如下:

操作系统:openEuler 24.03 LTS-SP4,(SP1,SP2,SP3已通过测试验证)
内核:Linux 6.6.0-agentsched+ x86_64
调度扩展:sched_ext / scx 可用
cgroup:cgroup v2 unified hierarchy
安全钩子:BPF LSM enabled
BPF 文件系统:/sys/fs/bpf 可挂载并可写
cgroup 根路径:/sys/fs/cgroup/agentsched

可使用以下命令检查:

cat /etc/os-release
uname -a
mount | grep -E 'bpf|cgroup2'
test -d /sys/fs/bpf && echo "bpffs ok"
test -f /sys/fs/cgroup/cgroup.controllers && echo "cgroup v2 ok"

部分实验会创建或写入 cgroup、加载 BPF 程序、更新 pinned BPF map,因此需要 sudo 权限。若运行 Resource / Network / Security Agent 实验,需要确保:

/sys/fs/bpf/agentsched/ 可创建 pinned map/prog
/sys/fs/cgroup/agentsched/ 可创建子 cgroup
当前内核支持 BPF struct_ops、cgroup-bpf、BPF LSM 相关能力

2. 基础工具链

当前验证过的工具版本如下:

rustc 1.95.0
cargo 1.95.0
clang 17.0.6
gcc 12.3.1
bpftool 7.6.0
libbpf 1.6
Python 3.11.6
numpy 1.26.4

建议安装或确认以下工具存在:

which cargo rustc clang gcc bpftool python3
python3 -c "import numpy; print(numpy.__version__)"

openEuler 上常用依赖可参考:

sudo dnf install -y \
  clang llvm gcc make bpftool libbpf libbpf-devel \
  openssl-devel protobuf protobuf-compiler \
  python3 python3-pip

如果系统使用 yum,可将 dnf 替换为 yum

3. workload 与评测工具

不同实验需要的外部命令不同。推荐提前确认:

which ab nginx iperf3 dig curl jq tar sha256sum

各实验大致依赖如下:

实验目录 主要依赖 说明
experiment/Critical_path_tail_latency_test/ cargo, sudo, python3, sched_ext 默认 EEVDF vs AgentSched CPU phase 调度器对比
experiment/DeepSeek_coding_plan_test/ python3, cargo, sudo, 可选 DeepSeek API DeepSeek 生成计划后,本地工具调用重放对比
experiment/Resource_agent_test/ python3, numpy, bpftool, cgroup v2 memory.high、pids.max、cgroup churn 验证
experiment/Network_agent_test/ iperf3, dig, curl, bpftool DNS、loopback、限速语义 workload proxy 验证
experiment/Security_agent_test/ bpftool, BPF LSM, python3 prompt injection、learn、drift、execve 受控验证

Nginx / ApacheBench 主要用于历史 no-harm HTTP workload 评估。如果需要复查该类实验,可安装:

sudo dnf install -y nginx httpd-tools

4. 构建与基础自检

在项目根目录执行:

cd /home/Dev_CJJ/CJJ/OpenEuler/agentsched
cargo build --workspace --release
cargo test --workspace --release

当前清理后的 workspace 包含 9 个主线 crate:

agentsched-daemon
agentsched-decider
agentsched-proto
agentsched-sensor
agentsched-skill-cpu-phase
agentsched-skill-resource-ctl
agentsched-skill-net-policy
agentsched-skill-sec-policy
agentsched-skill-sdk

如果上述构建和测试通过,说明用户态主控、阶段决策、Skill ABI、Resource / Network / Security crate 以及 CPU phase 调度器 skeleton 构建链路均处于可用状态。

5. 实验复现顺序

推荐按以下顺序复现,先跑无需外部 API 的本地实验,再跑 DeepSeek 场景:

cd /home/Dev_CJJ/CJJ/OpenEuler/agentsched

# 1. 前台关键路径尾延迟实验
sudo bash experiment/Critical_path_tail_latency_test/critical-path-tail-latency.sh

# 2. Resource Control Agent 实验
sudo bash experiment/Resource_agent_test/scripts/w15-t4-resource-ctl-agentcgroup.sh

# 3. Network Policy Agent 实验
sudo bash experiment/Network_agent_test/scripts/w15-t2-net-policy-4-metrics.sh

# 4. Security Policy Agent 实验
sudo bash experiment/Security_agent_test/scripts/w15-t3-sec-policy-5-metrics.sh

# 5. DeepSeek coding-agent 计划重放实验
bash experiment/DeepSeek_coding_plan_test/run-deepseek-coding-agent-critical-path.sh

DeepSeek 实验需要重新调用 API,应在本机环境中配置对应 API Key;如果不配置,也可以使用实验目录中已经冻结的plan和结果进行说明书复核。

6. 复现边界说明

实验结论说明:

  • CPU 性能提升针对后台CPU干扰下的前台Agent关键路径尾延迟。
  • Resource Control 结果证明 cgroup v2 控制链路、软/硬限制语义、进程数边界和生命周期开销。
  • Network Policy 结果包含 workload proxy caveat,非生产级网络监控能力。
  • Security Policy 结果是受控合成 workload,非生产级攻击防护能力。
  • QEMU VM 环境中硬件 PMU 可能不可用,BPF runtime profile 使用 bpftool prog show、系统采样和静态证据作为 fallback。

快速理解评测结果

详细报告见:

docs/agentsched-evaluation-analysis.md

核心结果位于:

experiment/Critical_path_tail_latency_test/
experiment/DeepSeek_coding_plan_test/
experiment/Resource_agent_test/
experiment/Network_agent_test/
experiment/Security_agent_test/

摘要:

实验目录 验证目标 结果
Critical_path_tail_latency_test 后台 CPU 干扰下前台关键路径尾延迟 P95 改善 95.53%, PASS
DeepSeek_coding_plan_test DeepSeek 生成 coding-agent 计划后的本地工具调用重放 P95 改善 43.56%, PASS
Resource_agent_test cgroup v2 内存、进程数和生命周期控制 memory.high、pids.max、cgroup churn evidence
Network_agent_test Network Policy Agent DNS/loopback/限速语义验证 workload proxy evidence, caveat
Security_agent_test Security Policy Agent audit/learn/drift/受控注入验证 learn/drift PASS, controlled workload caveat

实验复现入口

最终可复现实验在目录 experiment/ 下,每个测试目录包含脚本、结果、可视化和 README:

experiment/Critical_path_tail_latency_test/
experiment/DeepSeek_coding_plan_test/
experiment/Resource_agent_test/
experiment/Network_agent_test/
experiment/Security_agent_test/

License / 致谢

AgentSched 使用 openEuler、Linux sched_ext、eBPF、cgroup v2、libbpf-rs 等系统能力构建。AgentCgroup论文相关讨论用于公开描述数字对齐和对比。

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

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