AI 博客

E2B、Daytona、Modal 与 Northflank:沙箱大部分时间都在闲着

每份推介材料里的冷启动数字——27 毫秒、低于 90 毫秒、约 150 毫秒——描述的都是「一次创建一个沙箱」。而关于「一次创建很多个」,唯一公开过的测量把同一类平台放在了 0.67 秒到 5.06 秒之间;这四家里有两家压根没有公开过突发场景下的数字。与此同时,沙箱一生中的大部分时间是在等模型,而不是在跑代码——所以真正决定你账单的那条轴,是「什么都没执行时计价器在做什么」。请按突发行为与闲置计费来决策;隔离对照表反倒是容易的那部分。

作者 智能体 AI 维基 28 分钟读完

每家沙箱厂商都拿冷启动数字打头阵,而这些数字描述的全都是「一次创建一个沙箱」——那恰恰是智能体集群从不会做的事。关于并发创建,唯一公开过的测量把同一类平台摊在了 0.67 秒到 5.06 秒之间,与营销数字相差一个数量级;而这里的四个平台中,有两个压根没有公开过突发场景下的数字。第二件没人给它定价的事:编码智能体的沙箱,其挂钟时间的大部分是在等模型作答——所以「等待期间计价器跑不跑」这件事,比任何毫秒之争都更值钱。请按突发与闲置来选。隔离对照表反倒是容易的那部分;而到 2026 年 6 月,退出这道门已经窄到只剩四家里的两家。

速览

四个可以让智能体运行不可信代码的平台,而它们并不是同一种产品的四个版本——一个是沙箱公司,一个是带沙箱 API 的算力平台,一个是通用应用平台,还有一个今年改了许可证。

平台隔离边界闲置时计价器自托管或退出路径
E2BFirecracker microVM,每个沙箱独立内核在跑——只要活着就计费开源;支持自托管
Daytona默认容器;可按需换 Kata 或 Sysbox在跑——按秒计,无月度门槛生产代码库自 2026 年 6 月起闭源
ModalgVisor无代码执行时归零仅托管
NorthflankKata Containers、Firecracker、gVisor在跑;无强制会话时长上限自助式 BYOC,跑进你自己的云账号
Where a sandbox's wall-clock goes during one agent turn A timeline of one agent turn inside a sandbox, divided into four bands. A short create band at the start, then a wide band where the sandbox is alive but idle while the model reads the previous tool result and generates the next call, then a narrow band where a command actually executes, then a short teardown band. The idle band is by far the widest and is marked as the segment that E2B, Daytona and Northflank bill in full while Modal's compute charges drop to zero. Below the timeline, two counters contrast alive-seconds against executing-seconds, and a note says the ratio between them decides which billing shape is cheaper. One agent turn, measured on the sandbox create cold start BURST p99 alive, executing nothing — the model is generating the next tool call reasoning tokens, retries, rate-limit backoff, the queue in front of the provider BILLED IN FULL BY E2B / DAYTONA / NORTHFLANK — ZERO ON MODAL execute the command SUB-SECOND destroy teardown WALL CLOCK alive-seconds create → destroy, regardless of what ran the number three of these four platforms bill easy to get: you already log it executing-seconds the sum of command start-to-exit intervals the number Modal bills already in your tool-call spans Ratio above ~5:1 — alive-time billing is charging you mostly for waiting. Close to 1:1 — you are running batch compute, and the per-second rates decide it.
中间那一段,正是定价页面避而不谈的那一段。

有一条前提影响着下文的一切:这个品类里相当一部分公开的对比文章,是 Northflank 发在 Northflank 博客上、拿 Northflank 与其竞品作比较的。那些数字具体且可核对,我也确实用了;但厂商自家的对比是一个有方向的信源,而这里每一个落地页上的「低于 90 毫秒」同样如此。凡是第三方测得的数字,我会注明;凡是厂商自述的,我也会注明——因为在最要紧的那条轴上,这两类数字相差大约十倍。

大家在比的那个冷启动数字,量的是错误的工作负载

Vendor-published sequential cold starts against third-party burst measurements Horizontal bar chart on one shared scale from zero to six seconds. The upper group, vendor-published sequential cold starts, shows Daytona at 0.027 to 0.09 seconds and E2B at about 0.15 seconds, both barely visible at this scale. The lower group, third-party burst cold starts measured under concurrent creates in August 2026, shows Vercel at 0.67 seconds with a 1.12 second p99, Modal at 0.88 seconds, E2B at 1.61 seconds and Cloudflare at 5.06 seconds. A footnote records that Daytona and Northflank do not appear in any published burst measurement. Sandbox create latency (seconds) 0 1 2 3 4 5 VENDOR-PUBLISHED, SEQUENTIAL CREATES Daytona 0.027–0.09 E2B 0.15 THIRD-PARTY MEASURED, CONCURRENT BURST (AUGUST 2026) Vercel 0.67 (p99 1.12) Modal 0.88 E2B 1.61 Cloudflare 5.06 Daytona and Northflank publish no burst figure. E2B appears in both groups, roughly 10× apart.
同一条轴,两个不同的实验。只有下面那一组像是智能体集群在干活。

Daytona 的营销材料给出低于 90 毫秒的冷启动,并称优化配置下可达 27 毫秒;E2B 的默认模板通常被引作 150 毫秒上下。两者都是对一项真实操作的真实测量:创建一个沙箱、等待、再创建下一个。现在看看创建请求一起涌来时会发生什么——那是智能体平台唯一会产生的形状:一个队列被排空、一批运行同时启动、一秒之内有五十个沙箱被申请。2026 年 8 月公布的第三方突发数字是:Vercel 中位数 0.67 秒、p99 为 1.12 秒,Modal 0.88 秒,E2B 1.61 秒,Cloudflare 5.06 秒。这是提供商之间 7 倍的跨度,也是 E2B 自家顺序数字与其被测突发数字之间约 10 倍的落差。

两个数字都不算不诚实。它们量的是不同的东西,而顺序那个更好测——所以它才是被公布出来的那个。对买家的后果很具体:一份按顺序那一列排出来的候选名单,在负载下可能整个颠倒过来;而在这场比较里,冷启动营销最强的那家(Daytona)和隔离栈最强的那家(Northflank),我都找不到任何已公开的突发测量。这并不能证明它们慢,它证明的是:在这个数字对你有意义之前,你得自己按自己的并发度把这个实验跑一遍。

同一列里还有两个坑。Modal 没有原地恢复,所以为它引用的「恢复」数字是快照启动时间,与那些能原地恢复暂停沙箱的平台不可比。另外,冷启动的中位数对一个交互式智能体近乎无用:用户体验到的是 p99,因为一次智能体轮次可能创建好几个沙箱,并且要等最慢的那个。要么按你真实的并发度测 p99,要么干脆别测——这也正是 负载测试 那一页对智能体本身所主张的纪律。

模型在思考时,计价器在跑

Two billing shapes, and what decides between them Three columns. The first, alive-time billing, covers E2B, Daytona and Northflank: the clock runs from create to destroy whether or not code executes, so waiting on the model is billable and the only lever is aggressive teardown, which puts cold start back in the critical path. The second, execution-time billing, covers Modal: compute charges drop to zero when nothing runs, so a sandbox waiting on a model is nearly free, and the platform charges a per-core-second rate while active. The third column says the decision belongs to your workload, not to the platforms: measure alive-seconds against executing-seconds over a week of real runs, because that ratio, not the published rate, decides which column is cheaper. Alive-time create → destroy is the meter waiting on the model is billable only lever: tear down sooner E2B / DAYTONA / NORTHFLANK and tearing down puts cold start back in every turn Execution-time compute drops to zero when idle a waiting sandbox is near free per-core-second while active MODAL no floor to carry, and the only GPU-in-sandbox path Your ratio decides alive-seconds ÷ executing-seconds one week of real runs, not a bench above ~5:1 the meter wins the case NOT A PROPERTY OF THE VENDORS no pricing page can do this arithmetic on your behalf
哪一栏更便宜,是你这个智能体的属性,不是这些平台的属性。

给一次智能体轮次计个时。沙箱被创建出来,然后它就在那儿待着——模型正在读上一次的工具结果、生成下一次调用;接着某条命令跑了不到一秒;然后它又在那儿待着。在编码智能体上,真正执行的部分通常只占沙箱生命周期的个位数百分比,其余都在等推理,而且越来越多是在等一个要先思考好几秒才吐字的推理模型。E2B 自己的文档对这在它的计价器上意味着什么直言不讳:这个时钟并不区分活跃执行与闲置,只要沙箱存在,你就在付钱。Daytona 与 Northflank 用的是同一种「按存活时长」的形状。Modal 是那个异类——无代码执行时算力费用归零——这把「一个长期等模型的沙箱」从最大的一笔开销变成了几乎为零。

这并不是判 Modal 胜诉,因为费率不同、门槛也不同。E2B 的 Pro 档每月 150 美元、含 500 小时,超出后按秒计——那是一笔无论用不用都要背的固定成本,也是低用量用户会多付钱的原因。Daytona 没有月度门槛,从免费额度起按秒计,对间歇性负载更有利。Northflank 公开的价格是每 vCPU 小时 0.01667 美元、每 GB 小时 0.00833 美元,并且是四家里唯一提供自助式「自带云」的:沙箱改为记在你自己的云账号上——它自己的数字是 200 个沙箱在 BYOC 上花 2,060 美元、在其托管平台上花 7,200 美元;那是一家厂商谈自家产品的数字,但论证的形状是对的。

所以在你把任何东西列进候选名单之前,先算这一笔:给一周的真实智能体运行装上仪表,记两个数——沙箱存活秒数,和沙箱执行秒数。如果这个比值高于大约 5:1,那么按存活时长计费的平台主要是在向你收「等待费」,在开始比较费率之前,按执行时长计费就已经在价格上赢了。如果比值接近 1:1,你跑的其实是批处理算力而不是交互式智能体,那就由费率来定胜负。没有人能从一个定价页面替你算出这笔账——而这恰恰是那些定价页面被排布成那个样子的原因。这个陷阱的一般形式在 预测智能体开支 里:均值什么都说明不了,账单的形状是由「有意思的时刻之间发生了什么」决定的。

隔离那一列是真的,但它不是难做的那个决定

智能体写出的代码是不可信代码——不是因为模型心怀恶意,而是因为它的输入受攻击者影响;这正是 沙箱与代码执行 长篇论证的那件事。所以边界是要紧的。它同时也是这四家最容易排出高低、而排出高低之后改变最小的那条轴。

E2B 跑的是 Firecracker microVM,每个沙箱一个独立内核——这是这一组里最强的边界,也是能扛住「容器逃逸」那一类漏洞的那种。Northflank 通过 Kata Containers 与 Firecracker 提供 microVM,另有 gVisor,并称每月在这些之上处理超过两百万个隔离工作负载。Modal 用 gVisor,一种系统调用拦截式的边界:明显强于普通容器,也明显弱于一个独立内核。Daytona 默认跑容器,Kata 或 Sysbox 作为可配置项——这是这里最弱的默认值,也最可能被某个「读完冷启动数字就没往下看」的团队原样部署上线。

为什么这条轴的分量比看上去要轻:隔离边界约束的是「代码执行逃逸」的爆炸半径,而代码执行逃逸并不是常见的失败。常见的失败是沙箱一丝不苟地做了被要求做的事,然后碰到了它本不该碰到的东西——一个内部元数据端点、一条没被过滤的出站连接、一份图省事挂进环境变量的凭据。那是网络与能力的问题,不是内核的问题,而这里每一个平台都把其中大部分留给了你。如果你还没定下出站策略,那么把 gVisor 升级成 Firecracker 买到的东西非常有限;参见 智能体的出站控制沙箱与隔离模式

有一项能力确实会封死选择,而且方向与隔离相反:Modal 是这四家里唯一能让沙箱持有 GPU 的——H100、H200、A100、B200、L4、T4——与 CPU、内存一并按秒计费。如果你的智能体需要在「跑工具调用的那同一个隔离进程」里做推理、微调或处理图像,那就是一条硬性要求,它自己就把选择定在了 Modal。在别处的变通办法是从沙箱内部调用外部推理 API,那要多付一跳网络和第二份账单。

2026 年 6 月,退出这道门变窄了

Daytona 在 2026 年 6 月把生产代码库转为闭源,理由是「AI 辅助的漏洞发现」让一个开放的沙箱仓库成了负债。原来的仓库仍然公开、仍可使用,但不再有任何更新、修复或发布,而完整自托管这个平台已不再可能。无论你怎么看这套理由——它其实比多数许可证变更所得到的评价要更值得琢磨——实际效果是:「如果厂商在定价、可用性或路线图上让你失望,就自己跑一套」这个选项被拿掉了。

于是这四家里只剩两条退路。E2B 开源且可自托管,这在如今这个品类里已属罕见。Northflank 的那条退路性质不同:它并不开源,但提供跨 AWS、GCP、Azure、Oracle、Civo、CoreWeave、本地机房与裸金属的自助式 BYOC,工作负载跑在你本就掌控的基础设施里,账单落在你自己的云账号上。Modal 只做托管,并且对此毫不含糊。

沙箱值得当作一个「切换成本」决策而非「功能」决策来对待,因为它垫在一切之下:智能体的文件系统约定、进程模型、网络形状与失败语义,全都是对着某一家提供商的 SDK 表达出来的。迁移不是改个配置。如果你的组织对「厂商退出」有政策——在智能体基础设施这个品类过完这一年之后,它理应有——那么许可证与部署这一列是第一道筛子,不是最后一道。

什么时候选哪个

情形因为
智能体需要在沙箱内用 GPUModal四家里唯一能让沙箱持有 GPU 的;其余都要求一次外部推理调用和第二份账单
沙箱长期存活,且大部分时间在等模型Modal无代码执行时算力费用归零,而那正是编码智能体沙箱生命周期的绝大部分
要跑不可信的第三方代码,隔离是硬要求E2BFirecracker microVM、每个沙箱独立内核,而且开源——边界是可查验的,不是被断言的
有合规或数据驻留约束,或有真正的退出政策Northflank跨八种目标的自助式 BYOC,跑进你自己的云账号,并可选 microVM 隔离;工作负载从不离开你掌控的基础设施
间歇性、低用量、对成本敏感Daytona没有月度门槛,从免费额度起按秒计——代价是接受容器作为默认边界,以及自 2026 年 6 月起没有自托管路径
高突发并发,且处在一次轮次的关键路径上先自己测每一个公开的顺序数字量的都是你并不会跑的负载,而这四家里有两家根本没有公开的突发数字

不该由它来定的:落地页上的冷启动数字,以及某篇对比博客把谁排在第一——当那篇博客本身属于其中一个平台的时候。该由它来定的:你自己的「存活比执行」之比、你自己在自己并发度下的 p99 创建延迟,以及你走不走得掉。

常见问题

为什么突发冷启动和顺序冷启动差这么多?

一次只创建一个,提供商可以从热池里取,而每一个共享组件——调度器、镜像缓存、网络挂载——都在无竞争状态下工作。一次创建五十个会耗尽热池并在这些共享组件上排队,所以你测到的是这个平台的容量,而不是它的创建路径。智能体负载几乎只产生第二种形状,因为运行是成批派发的,而一次轮次可能同时需要好几个沙箱。

microVM 真的必要吗,还是 gVisor 就够了?

对于「你自己的智能体针对你自己的仓库生成的代码」,gVisor 是一个合理的边界,实际风险在别处——出站、挂进去的凭据,以及沙箱在你网络里够得着什么。「每个沙箱一个独立内核」值回成本的场景,是代码来自你的信任边界之外:客户的一段代码、运行时装上来的一个包,任何攻击者可以直接(而不是经由你的提示词)影响的东西。按代码从哪儿来决定,别按哪个听起来更强决定。

在工具调用之间把沙箱拆掉,能不能绕开闲置计费?

能绕开一部分,而代价是你原本要优化的那个东西。每条命令之后就销毁沙箱,意味着后续每一次调用都要付一次完整的创建,于是突发冷启动被放回到每一轮的关键路径上,智能体攒下的文件系统状态也丢了。在支持原地暂停/恢复的平台上,暂停与恢复是中间那条路。诚实的说法是:按存活时长计费与创建延迟是彼此对冲的,而选一个「计价器会停下来」的平台,是一种不必去做这笔取舍的办法。

如果我反正要用托管产品,开源在这里还重要吗?

它对两件不是「我要自托管」的事很重要。第一,隔离边界成了一项你可以读的安全声明,而不是一项你只能接受的安全声明——这与一页合规说明是不同质量的保证。第二,它是那条约束着这段关系的可信退路——这也正是「即便对那些本来就不打算自己跑代码的客户来说,一次许可证变更依然算新闻」的原因。

「存活比执行」这个比值到底怎么测?

在任何已经记录你的运行的地方,给每个沙箱打两个时间戳:创建与销毁得出存活秒数,命令「开始到退出」区间之和得出执行秒数。在一周的真实流量上做聚合,而不是在一次基准测试上。如果你的追踪里已经为每次工具调用带了一个 span——那正是 智能体可观测性 的用途——第二个数你已经有了,只需要把沙箱生命周期挂到同一条追踪上。

延伸阅读

本站相关:

项目来源: