01

不可变历史,私有未来。

层栈(LayerStack)让多个智能体从同一份文件系统真值开始,而无需克隆。每个会话租借稳定历史,记录私有的写时复制增量,并且只在发布时进行协调。

第01节·层栈写时复制

分享历史。分离突变。在发布进行协调。

名称描述了该结构:不可变的层堆栈。 写时复制描述了执行规则:代理读取共享堆栈,但只写入自己的临时层。

Layer + Stack

有序的不可变历史

manifest 按从新到旧的顺序指向可见层。读取采用每条路径最先出现的可见版本;压缩可以缩短旧层区段,而不改变这一逻辑视图。

复制 + 写入时

私人突变表面

每个会话挂载在新的 upperdir 下具有相同的只读较低历史记录。仅当会话第一次改变它时,内核才会复制较低的文件。

层栈
该商店订购了 manifest 的不可变文件系统层。 manifest 是最新优先的,因此第一个包含路径的层获胜。
Base · B*
内容寻址起始工作区。每个分支都可以引用相同的物理负载,而不是克隆它。
已发布层·L*
从已解析的发布创建的不可变增量。成功的提交将其添加到 manifest 之前。
upperdir
一个会话的私有可写覆盖目录。新文件、副本和删除标记一直保留在这里,直到捕获。
租约
固定的 manifest 快照,使会话的下部层保持活动状态并使其执行视图稳定。
whiteout
覆盖元数据意味着“此较低路径已删除”。它允许增量删除文件而不改变旧的层。

系统故障

写操作向前传送;发布循环回到历史。

已发布堆栈

L000042

最新已发布三角洲

S000041

压缩的历史

B000001-base

一个共享的基础有效负载

会话叠加

upperdir/ws-17rw

私人写入+whiteout

联合视图
lowerdir+ro

lease · newest-first · pinned

发布闸门

  1. 1捕获upperdir 变化
  2. 2比较路径指纹
  3. 3合并或拒绝冲突
  4. 4fsync、重命名、前置 manifest
结果 → 下一个 L*
01

租约

固定当前的 manifest 及其有序的较低路径。

02

Mount

在冻结视图上方附加一个新的 upperdir 和 workdir。

03

执行

阅读工会;将每个突变引导到私有 upperdir 中。

04

捕获

将 upperdir 扫描为写入、符号链接、删除和不透明目录。

05

解决

将路径 指纹 与 head 进行比较并合并符合条件的文本。

06

提交

前置一个不可变的层,或者拒绝整个 更改集。

空间+时间复杂度

恒定的基本有效负载,成比例的私有状态。

层栈删除了昂贵的 N × B 克隆。它不使总存储或每个操作恒定时间。诚实模型将共享历史与每个会话状态分开。

存储模型

模式A S(N) = B + P + ΣΔᵢ + N·Msandbox

模式B S(N) = B + P + 1 个沙箱 + ΣΔᵢ + N·Msession

B
一个物理基础有效负载
P
保留共享 已发布历史记录
Δᵢ
在私人 COW 字节中推出
M
特定于拓扑的元数据

随着 N 的增长

物理基础有效载荷Θ(1)
私有元数据θ(N)
私有 COW 字节ΣΔᵢ

微小的逻辑编辑仍然可以复制整个文件,因此 Δᵢ 可能大于用户可见的差异。

运行时间模型

B = 基本字节 · L = 可见层· P = 路径组件 · R = 返回字节 · F = 复制文件 · W = 写入 · C = 已捕获路径 · H = 散列/合并字节 · K = 压缩字节

操作时间为什么
建造或填充基地θ(B) 一次在共享之前读取并具体化 B 字节工作区。
创建一台工作区会话θ(L)构建租约和有序lowerdir列表;无 θ(B)工作区副本。
从路径读取 R 字节O(L·P + R) 最坏情况查找可能会跨越 L层和 P 路径组件,然后返回文件字节。
首先写入仅低层文件O(F+W)覆盖复制可以在应用 W 字节写入之前复制完整的 F 字节文件。
后来写在同一个会话氧(W)该文件已存在于私有 upperdir 中。
捕获和发布≈ O(C log C + C·L·P + H)对 C 已捕获路径进行排序,通过堆栈解析它们,并对 H 受影响的字节进行散列或合并。
压缩选定的层区段好的)实现 K 个压缩字节以缩短未来的 lowerdir 链。
运行时隔离+冲突检测

让特工广泛开展。坐标在狭窄的闸门。

代理不会争夺一项可写结账。每个都在 holder 拥有的挂载命名空间中执行,并具有私有 upperdir;隔离网络可以添加单独的网络边界。并发控制转移到短发布事务。

agent-a

Δ src/auth.ts

不相交的路径

agent-b

Δ 自述文件.md · 大块 1

可合并文本

agent-c

Δ 自述文件.md · 大块 1

重叠编辑

OCC发布闸门

根据当前 head 重新检查每个源路径。尝试对符合条件的文本进行三向合并。提交每个原子解析路径,或提交无。

base · head · command
disjoint → clean
mergeable → merged
overlap → rejected

策略忽略的路径故意位于此每路径验证过程之外。

层栈可实现更高的实用上限;它没有设置一个。 通过删除完整的工作区副本和共享写入竞争,它使更广泛的并发更安全、更便宜。 命令 执行仍然具有配置的限制(当前默认为 256)以及操作系统和资源上限。

N

并发执行通道

受 CPU、内存、命名空间和挂载容量的影响。

0

共享可写工作树

未发布的写入保留在其原始会话中。

1

原子发布边界

协调将被推迟,直到代理得到结果为止。

文件-操作怪

发布记录线路所有权。

这不是 Git 的责任。在冲突解决期间,层栈记录每个最终行是来自 命令 还是活动文件。在提交之后,文件域将该结构映射到不透明的运行时所有者。

归因管道

  1. 1

    解决

    来源::命令 或来源::Active(i)

  2. 2

    Map

    薄荷workspace_session:<id>或操作:<id>

  3. 3

    附加

    在层提交之后写入一个审核事件

  4. 4

    询问

    file_blame 的平铺和合并所有者范围

file_blame

$ file_blame src/auth.ts

1–8original

9workspace_session:ws-17

10–12original

13–14operation:req-91

仅已发布

实时 upperdir 编辑在提交之前保持不可见。

Squash-safe

可审计性存储在压缩的层栈外部。

Best-effort

删除的提交审核后附加将未覆盖的行解析为未知。

两种扇出模式

选择隔离边界,保持共享不变。

扇出可能发生在具有 N 个沙箱的运行时外部,也可能发生在具有 N 个工作区会话的一个运行时内部。两者都避免了碱基的N个完整副本;它们的故障边界和私有开销是不同的。

这里,并行描述了生成的执行通道。当前的沙箱批量创建和工作区-会话设置会在这些环境同时运行之前序列化其设置调用。

共享基础配置·每个摘要写入一次有效负载
  1. 01

    哈希输入

    导出内容寻址的工作区身份。

  2. 02

    私人建造

    填充随机数缓存条目而不暴露部分状态。

  3. 03

    推广或重用

    原子安装摘要,或重复使用比赛的获胜者。

  4. 04

    租约只读

    每个沙箱都指向相同的不可变的基本有效负载。

O(1) 基本有效负载 意味着存储由摘要共享,而不是所有设置工作都是恒定时间的。 N 个沙箱仍然需要 N 个私有运行时记录、可写树和命名空间生命周期。

模式A·隔离优先

N 个同时运行的沙箱

沙盒1
沙盒2
沙箱N

Docker 镜像层和内容寻址的工作区基础是共享的。容器可写状态、暂存、层栈元数据和 COW 增量保持私有。

最适合:不可信、异构或对故障敏感的部署。

模式B·密度优先

N会话在一个沙箱中

沙盒一台·层栈一台

会话1
会话2
会话N

会话共享相同的较低路径和守护程序,同时每个都拥有 upperdir、workdir、holder、租约和 COW 增量。

最适合:密集、均匀的推出批次。

B000001-base

相同内容摘要 · 一个物理负载

推出计数 N 中的 θ(1)

为什么这自然地映射到强化学习的推出

廉价的分叉、孤立的轨迹、可归因的工件。

  1. 01

    checkpoint + task

  2. 02

    分叉环境

  3. 03

    观察·行动·使用工具

  4. 04

    verify + reward

  5. 05

    收集轨迹

  6. 06

    更新政策

快速重置语义

放弃私有状态并将下一次部署指向相同的基础摘要。

泄漏变得可测试

由一个卷展栏写入的标记绝不能出现在另一视图中。

结果仍然可以解释

基础摘要、私有字节、工具痕迹和 已发布所有者随轨迹旅行。

仔细界定索赔范围: 层栈使 N. 私有增量中的不可变基本有效负载 θ(1) 、控制元数据、轨迹、模型权重和计算仍然随着批量推出而扩展。