5 项实测、12 组数据:Cube Sandbox 核心操作性能基准测试公开 ◆一、前言◆CubeSandbox 面向 AI Agent 代码执行场景设计极速冷启动和高并发是最关键的两项指标。本文给出在腾讯云标准型 CVM运行 PVM 内核上测量的性能基准数据分为两大部分第三章基于Template创建沙箱— 启动延迟、并发扩展能力、单机部署密度第四章Snapshot相关操作— Snapshot 制作、基于 Snapshot 启动沙箱、Rollback、Clone每节均附有完整的测试命令读者可直接照步骤在自己的环境中复现。重要说明所有测试数据与测试环境、测试场景高度相关。影响因子包含但不限于Host 的 CPU、内存、IO 性能以及 Sandbox 内部负载例如 Sandbox 中运行的程序越复杂、脏页越多Snapshot 制作耗时也随之上升。实际部署时请结合自身硬件和负载情况进行评估。更极致的性能要求推荐使用裸金属机器部署对应裸金属版性能测试报告可查看https://cubesandbox.com/zh/blog/posts/2026-06-01-cubesandbox-perf-benchmark.html。◆二、测试环境◆2.1硬件信息项目详情机器类型腾讯云标准型云服务器 SA9.4XLARGE32可在腾讯云控制台购买同款可用区—OSOpenCloudOS 9.4内核6.6.69-cube.pvm.host.005.xCPU 型号AMD EPYC 9K65 —CPU 配置1 Socket × 16 Core × 1 Thread 16 逻辑核NUMA 节点1node0: 0-15内存总量32 GiB系统盘/dev/vda 200 GiB 增强型 SSD 云硬盘格式化为 XFS挂载至 /SA9.4XLARGE32 是腾讯云标准型第九代实例搭载 AMD EPYC 9K65 处理器适合通用计算场景。本文运行 PVMParallel Virtual Machine内核支持嵌套虚拟化可在普通云服务器上运行 CubeSandbox。如需复现本文测试可前往腾讯云 CVM 购买页选购同款。Cube Sandbox 部署请参考Cubesandbox Github主页或官网「Quick Start」章节。2.2沙箱规格与模板制作所有测试统一使用以下规格的沙箱项目详情规格2 vCPU / 2 GiB 内存测试镜像cube-sandbox-cn.tencentcloudcr.com/cube-sandbox/sandbox-code:latest存储CoW reflinkXFS/data/cubelet/storage/内存追踪soft-dirty/proc/PID/clear_refs测试前需先制作模板国内使用 cn 镜像仓库境外使用 intcubemastercli tpl create-from-image \--image cube-sandbox-cn.tencentcloudcr.com/cube-sandbox/sandbox-code:latest \--writable-layer-size 1G \--expose-port 49999 \--expose-port 49983 \--probe 49999等待构建完成后记录模板 ID# 查看模板列表取第一行 tpl- 开头的 IDcubemastercli tpl list2.3指标说明所有时间单位均为毫秒ms。每轮测试开始前执行Warm-up首轮结果丢弃消除 page cache 冷读干扰并发测试的各轮次之间串行发起无交叉并发。◆三、基于 Template 创建沙箱◆本章测试「从零启动一个可用沙箱」的端到端耗时即调用 POST /sandboxes指定 template_id到沙箱进入 running 状态的时间。这是最常见的使用场景。3.1环境准备与验证第一步安装Python SDK并设置环境变量​​​​​​​pip install e2b-code-interpreterexport CUBE_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000 # 本地部署填任意非空字符串export CUBE_TEMPLATE_IDyour-template-id # 上一步 cubemastercli tpl list 查到的 IDexport SSL_CERT_FILE/root/.local/share/mkcert/rootCA.pem # mkcert 证书路径第二步跑一个Hello World验证环境正常在执行任何基准测试前先运行以下脚本确认沙箱可以正常创建和执行代码​​​​​​​import osfrom e2b_code_interpreter import Sandboxwith Sandbox.create(templateos.environ[CUBE_TEMPLATE_ID]) as sandbox:result sandbox.run_code(print(Hello from Cube Sandbox, safely isolated!))print(result)print(✅ 环境验证通过可以开始基准测试)保存为 hello.py 并执行python hello.py看到 ✅ 环境验证通过 字样即说明 CubeSandbox 部署正常可继续后续测试。如果报错请先参考Quick Start 排查环境问题。3.2启动延迟与并发扩展使用cube-bench工具测量不同并发度下的沙箱创建延迟。cube-bench 用 Go 协程并发驱动 CubeAPI测量结果包含完整百分位统计。编译工具需要Go 1.21cd examples/cube-benchmake# 产出: ./bin/cube-bench执行测试# 设置环境变量export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 1 并发共 20 次创建后立即删除./bin/cube-bench -c 1 -n 20 -w 3# 10 并发共 200 次./bin/cube-bench -c 10 -n 200 -w 3# 20 并发共 300 次./bin/cube-bench -c 20 -n 300 -w 3-w 3 表示先做 3 轮热身热身结果不计入统计。测试数据腾讯云SA9.4XLARGE32 PVM2 vCPU / 2 GiB沙箱各档均独立测试档间清空所有沙箱并留出资源池恢复时间避免相互干扰。所有档位成功率均为 100%。关键结论单并发创建延迟约67 msmin 55.9 / P95 78.2延迟极低且非常稳定10 并发 avg 171 ms均摊单沙箱仅 17.1 ms并发扩展势头良好20 并发 avg 365 ms均摊单沙箱18.2 msP99 674 ms 显示少量长尾请求受队列压力影响3.3单机部署密度内存开销CubeSandbox 通过内核共享与写时复制CoW将自身额外开销压缩到极低水平。本节通过「清空机器 → 分批启动沙箱 → 记录内存变化」的方式实测单实例净开销。⚠️⚠️⚠️ 重要安全提醒每次启动沙箱前务必先用 free -h 确认机器剩余内存充足每次只启动少量边启动边观察内存余量确认安全后再继续下一批切勿一次性启动过多 内存耗尽会触发 OOM Killer轻则进程被杀重则损坏运行环境需重新部署。请根据自己机器的实际内存容量决定每批启动的数量。第一步记录基线空机内存export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 确保没有残留沙箱cubemastercli list# 记录空机内存用量free -h# 同时记录 shim 进程数应为 0ps --no-headers -C containerd-shim-cube-rs | wc -l第二步分批启动沙箱每批结束后用free -h记录当前已用内存用 cube-bench 的 create-only 模式批量创建并保持沙箱存活。# 设置环境变量与 §3.2 一致换新终端窗口需重新 exportexport E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000 # 本地部署填任意非空字符串export CUBE_TEMPLATE_IDyour-template-id # cubemastercli tpl list 查到的 ID./bin/cube-bench -c 1 -n 1 -m create-only free -m # 累计 1./bin/cube-bench -c 4 -n 4 -m create-only free -m # 累计 5./bin/cube-bench -c 5 -n 5 -m create-only free -m # 累计 10./bin/cube-bench -c 10 -n 10 -m create-only free -m # 累计 20第三步计算单实例开销单 VM 均摊开销 (当前 used - 基线 used) ÷ VM 数量测试数据腾讯云SA9.4XLARGE32 PVM2 vCPU / 2 GiB规格沙箱实测单 VM 均摊开销约 2734 MBCoW 按需分配效果显著——2 GiB 规格的沙箱空载时实际仅占用约 30 MB。单机可运行实例数估算SA9.4XLARGE3232 GiB内存总内存 32768 MB系统基线占用实测 7198 MB 32768 - 25570空机 available 实测值安全水位预留10% 3276 MB可分配给沙箱 22294 MB 32768 - 7198 - 3276空载/轻载场景CoW 按需分配均摊 ~30 MB/个22294 ÷ 30 ≈ 743 个满载场景每沙箱实际写满 2 GiB22294 ÷ (2048 30) ≈ 10 个◆四、Snapshot 相关操作◆Snapshot 是 CubeSandbox 的核心功能之一支持在运行中的沙箱上制作内存 文件系统快照后续可基于快照极速恢复Clone / Rollback。安装依赖cd examples/snapshot-rollback-clonepip install -r requirements.txt # 安装 cubesandbox SDK# 以下环境变量为所有 4.x 压测脚本的前置每个新 shell 都需先 export或写入 env.sh 后 sourceexport E2B_API_URLhttp://your-server-ip:3000export CUBE_API_URLhttp://your-server-ip:3000 # 与 E2B_API_URL 保持一致export E2B_API_KEYe2b_000000 # 本地部署填任意非空字符串export CUBE_TEMPLATE_IDyour-template-id # cubemastercli tpl list 查到的 ID下文 4.1~4.5 各节命令块默认你已在当前 shell 完成上述 export脚本通过 env.py 读取这些变量。换新终端窗口请重新 export。4.1 Snapshot制作耗时与并发的关系测试方式在运行中的沙箱上调用 POST /sandboxes/{id}/snapshotsN 并发时同时对 N 个沙箱各发起一次快照请求测量整批完成的 wall time。CubeSandbox 对同一个沙箱的快照请求内部串行化因此并发测试中每个沙箱对应独立的快照请求实际成功数等于并发数。执行命令脚本地址https://github.com/TencentCloud/CubeSandbox/blob/master/examples/snapshot-rollback-clone/bench_snapshot_concurrency.pycd examples/snapshot-rollback-clone# 若是新开的终端先设置环境变量同 4.0 安装依赖一节export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 脚本只提供单档机制并发档位在命令行控制逐档串行调用python bench_snapshot_concurrency.py -c 1 -n 5python bench_snapshot_concurrency.py -c 5 -n 5 --no-headerpython bench_snapshot_concurrency.py -c 10 -n 5 --no-header测试数据全新沙箱原样打快照实测脏页约8 MB由 /data/log/CubeVmm/vmm.log 中 PagemapAnon snapshot saved 记录确认该值为沙箱基线匿名内存页大小本节不作为变量串行单 Snapshot 约41 ms5 并发时整批 wall 约58 msper-snapshot 均摊降至约11.6 ms10 并发时整批 wall 约114 ms均摊进一步降至约11.4 ms并发摊薄效果显著。4.2 Snapshot制作耗时与Dirty Page的关系背景CubeSandbox 使用 soft-dirty 机制只保存自上次 Snapshot 以来被修改过的内存页。实际写入量 脏页数 × 4 KiB通常远小于沙箱总内存2 GiB。测试通过在 /dev/shmtmpfs预先写入数据来精确控制脏页大小。Dirty Page 列为从 /data/log/CubeVmm/vmm.log 读取到的实际写入量与理论值因 Guest OS 自身活动存在差异。执行命令脚本地址https://github.com/TencentCloud/CubeSandbox/blob/master/examples/snapshot-rollback-clone/bench_snapshot_dirty.pycd examples/snapshot-rollback-clone# 若是新开的终端先设置环境变量同 4.0 安装依赖一节export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 脚本只提供单档机制脏页大小在命令行控制-d 即写入量 MB按需逐档调用python bench_snapshot_dirty.py -d 0 -n 3python bench_snapshot_dirty.py -d 10 -n 3 --no-headerpython bench_snapshot_dirty.py -d 50 -n 3 --no-headerpython bench_snapshot_dirty.py -d 100 -n 3 --no-headerpython bench_snapshot_dirty.py -d 200 -n 3 --no-headerpython bench_snapshot_dirty.py -d 500 -n 3 --no-headerpython bench_snapshot_dirty.py -d 800 -n 3 --no-headerpython bench_snapshot_dirty.py -d 1024 -n 3 --no-header测试在串行模式下进行每个数据点先预热丢弃首次结果再正式测量 3 次取均值。create sandbox avg 列为基于该 Snapshot 创建新沙箱的耗时反映 Dirty Page 大小对恢复速度的影响。测试数据关键结论Snapshot制作耗时与Dirty Page大小近线性相关基线8.3 MB 脏页约 42 ms每增加 100 MB 脏数据约增加 22 ms1024 MB 时约 258 ms。基于Snapshot创建新沙箱的耗时与Dirty Page大小无关恢复耗时稳定在54–83 ms因为恢复采用 CoW写时复制按需加载不依赖 Dirty Page 的大小。4.3基于Snapshot启动沙箱测试方式先制作一个快照然后并发调用 POST /sandboxes指定 snapshot_id测量从请求发出到所有沙箱进入 running 的端到端 wall time。执行命令脚本地址https://github.com/TencentCloud/CubeSandbox/blob/master/examples/snapshot-rollback-clone/bench_create_concurrency.py​​​​​​​cd examples/snapshot-rollback-clone# 若是新开的终端先设置环境变量同 4.0 安装依赖一节export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 脚本只提供单档机制档位在命令行控制按需逐档调用python bench_create_concurrency.py -c 1 -n 3python bench_create_concurrency.py -c 10 -n 3 --no-headerpython bench_create_concurrency.py -c 20 -n 3 --no-header测试数据单沙箱启动约67ms10 并发时 wall 约 388ms均摊仅38.8ms/个20 并发时 wall 约701ms均摊仅35.1ms/个展现出良好的并发扩展能力。4.4 Rollback测试方式对运行中的沙箱调用 POST /sandboxes/{id}/rollback将沙箱内存和文件系统状态原地恢复至指定 Snapshot无需重建沙箱。快照所有权约束 CubeSandbox 只允许沙箱回滚到自己创建的 checkpoint每个并发沙箱均需独立完成「打快照 回滚」全流程。执行命令脚本地址https://github.com/TencentCloud/CubeSandbox/blob/master/examples/snapshot-rollback-clone/bench_rollback_concurrency.py​​​​​​​cd examples/snapshot-rollback-clone# 若是新开的终端先设置环境变量同 4.0 安装依赖一节export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 脚本只提供单档机制档位在命令行控制按需逐档调用python bench_rollback_concurrency.py -c 1 -n 5python bench_rollback_concurrency.py -c 5 -n 5 --no-headerpython bench_rollback_concurrency.py -c 10 -n 5 --no-header测试数据单次 Rollback 流程create_snapshot打点 →rollback回滚到自身 checkpoint约90 ms5 并发时整批 wall 约326 msper-rollback 均摊降至约65 ms10 并发时整批 wall 约821 ms均摊约82 ms/次。注因 CubeSandbox 要求沙箱只能回滚到自己创建的 checkpoint故无法复用共享快照每个并发沙箱均需独立完成「打快照 回滚」全流程。4.5 Clone测试方式调用 POST /sandboxes/{id}/clone从一个运行中的沙箱派生出 N 个新沙箱完整保留源沙箱的内存和文件系统状态包含脏页。说明 本次 Clone 测试涉及磁盘文件时相关数据均已在 Page Cache 中测试结果不含冷读 IO 开销。执行命令脚本地址https://github.com/TencentCloud/CubeSandbox/blob/master/examples/snapshot-rollback-clone/bench_clone_concurrency.py​​​​​​​cd examples/snapshot-rollback-clone# 若是新开的终端先设置环境变量同 4.0 安装依赖一节export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 脚本只提供单场景机制n/并发/轮数在命令行控制按需逐场景调用python bench_clone_concurrency.py -n 1 -c 1 --rounds 5python bench_clone_concurrency.py -n 10 -c 5 --rounds 3 --no-headerpython bench_clone_concurrency.py -n 20 -c 10 --rounds 3 --no-header测试数据源沙箱脏页约10 MBClone 单沙箱约271 ms10 沙箱 5 并发时整批 wall 约542 msper-clone 均摊降至约54 ms20 沙箱 10 并发时整批 wall 约790 ms均摊进一步降至约40 ms/个并发摊薄效果显著。4.6 Pause / Resume测试方式创建 concurrency 个沙箱并发调用 POST /sandboxes/{id}/pause 暂停全部再并发调用 POST /sandboxes/{id}/resume 恢复全部分别记录 pause 和 resume 的 wall time 与均摊耗时。⚠️ 当前实现说明 Pause 当前采用 full-memory-copy 模式——暂停时会将沙箱的全部匿名内存页写入持久化存储耗时与沙箱总内存量线性相关2 GiB 规格约 371 ms/个。后续版本将升级为 soft-dirty 增量模式仅保存自上次 checkpoint 以来被修改的脏页空载沙箱的 pause 耗时预计将大幅降低。执行命令脚本地址https://github.com/TencentCloud/CubeSandbox/blob/master/examples/snapshot-rollback-clone/bench_pause_resume_concurrency.py​​​​​​​cd examples/snapshot-rollback-clone# 若是新开的终端先设置环境变量同 4.0 安装依赖一节export E2B_API_URLhttp://your-server-ip:3000export E2B_API_KEYe2b_000000export CUBE_TEMPLATE_IDyour-template-id# 脚本只提供单档机制档位在命令行控制按需逐档调用python bench_pause_resume_concurrency.py -c 1 -n 5python bench_pause_resume_concurrency.py -c 10 -n 5 --no-headerPause测试数据Resume测试数据关键结论Resume极快且并发扩展良好单次约 19 ms10 并发时均摊仅 2.7 ms/个恢复速度不受 full-copy 影响Pause是当前瓶颈full-copy 模式下单次约 371 ms10 并发均摊 158.6 ms/个soft-dirty版本上线后pause 耗时预计大幅降低◆附录测试脚本索引◆本文涉及的所有测试脚本均位于仓库目录examples/cube-bench/— 基于 Template 的并发创建基准工具Gohttps://github.com/TencentCloud/CubeSandbox/tree/master/examples/cube-benchexamples/snapshot-rollback-clone/— Snapshot / Rollback / Clone / Pause-Resume 相关 Python 脚本https://github.com/TencentCloud/CubeSandbox/tree/master/examples/snapshot-rollback-clone