Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 1 章 · 基础

基础:CAS + CDC + COW

一个文件系统状态在逻辑上应该完整,在物理存储上应该增量。当多个 Agent 从同一环境并行探索时,这不是后续优化,而是基本要求。

为什么存储效率是设计约束

LayerFS 的目标,是让一个环境支撑许多彼此隔离的 Agent 工作区。每个工作区都必须表现为完整文件系统:工具可以修改、创建检查点、派生、恢复、比较或回滚。

最直接的实现,是在 Agent 派生或记录检查点时复制当前文件系统。这样确实实现了隔离,却采用了错误的成本模型:一个工作区中的少量修改,也可能要求再次存储整个工作区。

多 Agent 开发让这种不匹配从偶发问题变成基本矛盾:

  • 共同起点。 Agent 通常从同一个代码库、依赖与已生成环境开始。
  • 稀疏修改。 一次工具调用相对于共享状态,通常只改变少量文件。
  • 高分叉与长历史。 并行尝试、环境实验与 MCTS 式 rollout 会产生大量相关状态,检查点还会保留此前状态。

如果每个逻辑状态都独占自己的字节,存储量就会随着所有工作区的总大小增长。LayerFS 选择另一条不变量:新状态的物理成本应该取决于发生了什么变化,而不是该状态所呈现的完整文件系统有多大。

这个选择决定了文件系统模型。工作区从不可变根开始;读取复用该根可达的对象;写入创建新对象而不修改共享基础;检查点记录一个新根,同时继续引用所有未变化内容。隔离来自每个 Agent 各自演进的根,而不是复制全部字节。

CAS + CDC + COW 如何落实这一选择

结构共享可能在对象、文件或目录树三个层次失效。因此 LayerFS 在三个层次上都实现复用,第 1 章也按同样顺序构建它们:

1.1 · 已发布
CAS:内容寻址存储 对象复用 · CAS 只存储一份相同字节

内容寻址存储从字节导出身份。相同的不可变对象会收敛到同一身份与同一份存储副本。

仍未解决:只改变一个字节,也会让整个文件对象获得新身份。

1.2 · 已发布
CDC:分块与内容定义边界 文件区域复用 · CDC 把局部编辑限制在局部

内容定义分块让未变化区域保持稳定边界,因此少量插入或删除只替换附近数据块,而不是整个文件。

仍未解决:完整文件系统仍需生成新根,但不能复制每个文件与目录。

1.3 · 规划中
写时复制文件系统树 树结构复用 · COW 只重建发生变化的路径

写时复制只创建新的文件清单与已编辑路径上的目录记录,其他文件和子树继续共享。

最终结果:每个检查点都是完整的不可变根,但物理成本取决于修改量,而不是工作区大小。