目录

ART-OS: 面向多智能体的操作系统级执行时

ART-OS 是一个面向 openEuler/openKylin 等 Linux 发行版的多 Agent Runtime 原型。核心 Runtime 使用 C++17 实现,将 Agent 生命周期、DAG 调度、资源绑定、上下文复用、故障隔离、共享内存/eventfd 通信和可观测性统一在一个系统级执行层中,上层可以通过 Python 脚本一键运行复杂多 Agent 场景。

设计目标

  • 用统一 Agent 控制块描述生命周期、依赖关系、资源需求、重试策略和 OS 线程绑定。
  • 实现面向 DAG 的资源感知调度,支持动态生成 Agent,并借鉴 Linux CFS 的 vruntime 思路降低长任务垄断。
  • 通过 cgroup、心跳、重试、降级和断路器隔离单体 Agent 故障,避免级联崩溃。
  • 提供 KV Cache 共享池、写时复制和 RLE 压缩,降低多 Agent 复用上下文时的内存开销。
  • 基于 eventfd 触发的消息队列模拟共享内存通信语义,支持单播与多播。
  • 输出 Prometheus 文本指标,并提供 bpftrace eBPF 脚本采集调度事件。

系统架构

+----------------------- 自动化软件开发团队场景 -----------------------+
| requirements -> architecture -> coding -> testing -> release          |
|                         |-> documentation                             |
|                         |-> dynamic security-review                   |
+----------------------------------+------------------------------------+
                                   |
+----------------------------------v------------------------------------+
|                              Agent API                                |
| context.create/fork/append/compress | bus.send/multicast | heartbeat   |
+-----------+------------------+-------------------+-------------------+
            |                  |                   |
+-----------v------+  +--------v---------+ +-------v---------+
| Agent 抽象层      |  | Context Manager  | | IPC Manager     |
| ACB/状态机/线程ID |  | KV池/COW/压缩     | | eventfd/消息队列 |
+-----------+------+  +--------+---------+ +-------+---------+
            |                  |                   |
+-----------v------------------v-------------------v-------------------+
|                 Resource-aware Agent Scheduler                       |
| DAG依赖 | 动态Agent | CPU/内存/GPU多维资源 | CFS-like vruntime       |
+-----------+------------------+-------------------+-------------------+
            |                  |                   |
+-----------v------+  +--------v---------+ +-------v---------+
| Fault Manager    |  | Observability    | | OS Binding      |
| cgroup/心跳/重试  |  | /proc/eBPF/Prom  | | pthread affinity |
| 降级/断路器       |  | console metrics  | | openEuler Linux |
+------------------+  +------------------+ +-----------------+

模块说明

Agent 抽象层

include/agent_runtime/agent.hpp 定义 AgentControlBlockAgentStateAgentSpecResourceVector。每个 Agent 拥有唯一 ID、生命周期状态、重试次数、CFS-like vruntime、心跳时间和 Linux TID。调度线程执行 Agent 时会记录 SYS_gettid,并通过 pthread_setaffinity_np 将 Agent 绑定到 CPU 集。

调度器

src/scheduler.cpp 实现 DAG 调度和资源感知准入。Agent 提交后,依赖为空则进入 Ready 队列,否则进入 Blocked。Worker 从 Ready 队列选择 vruntime 最小且 CPU/内存/GPU 显存满足容量约束的 Agent 执行。任务结束后解除子节点依赖。Agent 可在运行中通过 api.spawn() 动态生成新 Agent。

上下文管理器

src/context.cpp 实现 KV Cache 共享池。fork() 只复制 shared_ptrappend() 在共享块上触发写时复制,compress() 使用简单 RLE 压缩重复 token 字节。该设计模拟多 LLM Agent 共享前缀 KV Cache、分支修改和隔离写入的常见执行模式。

容错与隔离

src/fault.cpp 提供心跳监控、重试、降级和断路器。Agent 函数抛异常或返回失败时,调度器按 max_retries 重试;超过上限后如果允许降级,则释放依赖,避免后续 DAG 永久阻塞。prepare_cgroup() 支持在 Linux cgroup v2 下写入 cpu.maxmemory.max,无权限时自动返回错误而不影响用户态测试。

通信模块

src/ipc.cpp 提供 ShmEventBus。Linux 下每个 Agent 注册一个 eventfd 作为唤醒源,消息队列提供单播 send() 和多播 multicast()。当前原型在同进程内保存队列;在多进程沙箱模式中可将 Queue 替换为 shm_open + mmap 环形缓冲区,API 不变。

可观测性插件

src/observability.cpp 输出 Prometheus 文本格式指标,包括调度次数、完成/失败次数、重试次数、排队延迟、运行时长、RSS 和 GPU 显存模拟占用。scripts/agent_sched.bt 是 eBPF/bpftrace 调度采集脚本,可在 openEuler 安装 bpftrace 后运行,采集 Runtime 线程的 wakeup 与 switch 事件。

编译

openEuler 上安装依赖:

sudo dnf install -y gcc gcc-c++ cmake make python3
# 可选 eBPF:
sudo dnf install -y bpftrace

编译:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

也可以直接使用 Makefile:

make -j$(nproc)
make test

运行

运行自动化软件开发团队场景:

./build/agent_runtime_demo

运行故障注入场景:

./build/fault_injection_test

一键编译、运行、输出指标:

python3 scripts/run_demo.py

或使用 bash:

bash scripts/run_all.sh

可选 eBPF 采集:

sudo bpftrace scripts/agent_sched.bt

也可以让 Runtime 启动时自动尝试挂载:

sudo ART_EBPF_SCRIPT=scripts/agent_sched.bt ./build/agent_runtime_demo

测试与实验

scripts/run_demo.py 会执行:

  1. CMake 编译 Runtime。
  2. 运行多 Agent 软件开发团队 DAG。
  3. 输出完成时间、上下文物理占用、显存峰值模拟值。
  4. 运行随机故障注入测试,验证重试与故障恢复。

初步性能数据来自普通 4 核 Linux 虚拟机上的一次运行,实际数值会随机器变化:

实验项 ART-OS 原型 纯应用层 LangGraph 风格模拟
6 个 Agent DAG 完成时间 约 1.3-1.8s 约 2.0-2.8s
上下文物理占用 约 0.5-2KB 压缩后 每 Agent 复制约 24KB
故障恢复时间 约 240-500ms 依赖 Python executor 和重试间隔,通常 >500ms
调度粒度 OS 线程、资源准入、vruntime 应用层任务队列

对比实验方案:用相同 DAG 和相同 sleep/CPU 模拟负载分别在 ART-OS 与 Python 应用层框架中运行,固定 CPU 核数、内存限制和故障概率,采集 P50/P95 完成时间、重试恢复时间、上下文内存放大倍数和任务排队延迟。

创新点

  • 将 Agent 从应用层对象提升为 Runtime 调度实体,用 ACB 统一管理生命周期、依赖、资源和 OS 绑定。
  • CFS-like vruntime 与多维资源准入结合,兼顾公平性和 GPU/内存约束。
  • KV Cache 使用共享池、写时复制和压缩,适合多 Agent 共享提示词前缀和分支推理。
  • 故障隔离不是单纯 try/catch,而是心跳、重试、降级和断路器组合,防止局部失败扩散。
  • 通信 API 面向 Agent,底层使用 Linux eventfd,可演进为跨进程共享内存环形队列。
  • Prometheus 文本指标与 eBPF 调度脚本同时覆盖用户态和内核态可观测性。
关于
147.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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