ADD file via upload
ART-OS 是一个面向 openEuler/openKylin 等 Linux 发行版的多 Agent Runtime 原型。核心 Runtime 使用 C++17 实现,将 Agent 生命周期、DAG 调度、资源绑定、上下文复用、故障隔离、共享内存/eventfd 通信和可观测性统一在一个系统级执行层中,上层可以通过 Python 脚本一键运行复杂多 Agent 场景。
+----------------------- 自动化软件开发团队场景 -----------------------+ | 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 | +------------------+ +------------------+ +-----------------+
include/agent_runtime/agent.hpp 定义 AgentControlBlock、AgentState、AgentSpec 和 ResourceVector。每个 Agent 拥有唯一 ID、生命周期状态、重试次数、CFS-like vruntime、心跳时间和 Linux TID。调度线程执行 Agent 时会记录 SYS_gettid,并通过 pthread_setaffinity_np 将 Agent 绑定到 CPU 集。
include/agent_runtime/agent.hpp
AgentControlBlock
AgentState
AgentSpec
ResourceVector
vruntime
SYS_gettid
pthread_setaffinity_np
src/scheduler.cpp 实现 DAG 调度和资源感知准入。Agent 提交后,依赖为空则进入 Ready 队列,否则进入 Blocked。Worker 从 Ready 队列选择 vruntime 最小且 CPU/内存/GPU 显存满足容量约束的 Agent 执行。任务结束后解除子节点依赖。Agent 可在运行中通过 api.spawn() 动态生成新 Agent。
src/scheduler.cpp
api.spawn()
src/context.cpp 实现 KV Cache 共享池。fork() 只复制 shared_ptr,append() 在共享块上触发写时复制,compress() 使用简单 RLE 压缩重复 token 字节。该设计模拟多 LLM Agent 共享前缀 KV Cache、分支修改和隔离写入的常见执行模式。
src/context.cpp
fork()
shared_ptr
append()
compress()
src/fault.cpp 提供心跳监控、重试、降级和断路器。Agent 函数抛异常或返回失败时,调度器按 max_retries 重试;超过上限后如果允许降级,则释放依赖,避免后续 DAG 永久阻塞。prepare_cgroup() 支持在 Linux cgroup v2 下写入 cpu.max 与 memory.max,无权限时自动返回错误而不影响用户态测试。
src/fault.cpp
max_retries
prepare_cgroup()
cpu.max
memory.max
src/ipc.cpp 提供 ShmEventBus。Linux 下每个 Agent 注册一个 eventfd 作为唤醒源,消息队列提供单播 send() 和多播 multicast()。当前原型在同进程内保存队列;在多进程沙箱模式中可将 Queue 替换为 shm_open + mmap 环形缓冲区,API 不变。
src/ipc.cpp
ShmEventBus
eventfd
send()
multicast()
Queue
shm_open + mmap
src/observability.cpp 输出 Prometheus 文本格式指标,包括调度次数、完成/失败次数、重试次数、排队延迟、运行时长、RSS 和 GPU 显存模拟占用。scripts/agent_sched.bt 是 eBPF/bpftrace 调度采集脚本,可在 openEuler 安装 bpftrace 后运行,采集 Runtime 线程的 wakeup 与 switch 事件。
src/observability.cpp
scripts/agent_sched.bt
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 会执行:
scripts/run_demo.py
初步性能数据来自普通 4 核 Linux 虚拟机上的一次运行,实际数值会随机器变化:
对比实验方案:用相同 DAG 和相同 sleep/CPU 模拟负载分别在 ART-OS 与 Python 应用层框架中运行,固定 CPU 核数、内存限制和故障概率,采集 P50/P95 完成时间、重试恢复时间、上下文内存放大倍数和任务排队延迟。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
ART-OS: 面向多智能体的操作系统级执行时
ART-OS 是一个面向 openEuler/openKylin 等 Linux 发行版的多 Agent Runtime 原型。核心 Runtime 使用 C++17 实现,将 Agent 生命周期、DAG 调度、资源绑定、上下文复用、故障隔离、共享内存/eventfd 通信和可观测性统一在一个系统级执行层中,上层可以通过 Python 脚本一键运行复杂多 Agent 场景。
设计目标
系统架构
模块说明
Agent 抽象层
include/agent_runtime/agent.hpp定义AgentControlBlock、AgentState、AgentSpec和ResourceVector。每个 Agent 拥有唯一 ID、生命周期状态、重试次数、CFS-likevruntime、心跳时间和 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_ptr,append()在共享块上触发写时复制,compress()使用简单 RLE 压缩重复 token 字节。该设计模拟多 LLM Agent 共享前缀 KV Cache、分支修改和隔离写入的常见执行模式。容错与隔离
src/fault.cpp提供心跳监控、重试、降级和断路器。Agent 函数抛异常或返回失败时,调度器按max_retries重试;超过上限后如果允许降级,则释放依赖,避免后续 DAG 永久阻塞。prepare_cgroup()支持在 Linux cgroup v2 下写入cpu.max与memory.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 上安装依赖:
编译:
也可以直接使用 Makefile:
运行
运行自动化软件开发团队场景:
运行故障注入场景:
一键编译、运行、输出指标:
或使用 bash:
可选 eBPF 采集:
也可以让 Runtime 启动时自动尝试挂载:
测试与实验
scripts/run_demo.py会执行:初步性能数据来自普通 4 核 Linux 虚拟机上的一次运行,实际数值会随机器变化:
对比实验方案:用相同 DAG 和相同 sleep/CPU 模拟负载分别在 ART-OS 与 Python 应用层框架中运行,固定 CPU 核数、内存限制和故障概率,采集 P50/P95 完成时间、重试恢复时间、上下文内存放大倍数和任务排队延迟。
创新点
vruntime与多维资源准入结合,兼顾公平性和 GPU/内存约束。