这次要你回两件事

1
第 6 条:哪些工具可以并行 有 A / B / C 三个选项,建议 A。看详情 ↓
2
#379 合并时能不能带一个小迁移 Computer 内部新加一张表,不动 D1 和正式环境,建议同意。看详情 ↓
两条一起回,比如:「同意 A,同意迁移」

进展

1第 6 条修改方案:哪些工具可以并行

一句话

读文件这类只读操作改成并行,不再跟着长命令干等;会改东西的操作(bash、write、edit)照旧排队。有 A / B / C 三个选项,建议选 A。

readglobgrep ← 只读,A 方案里可并行
bashwriteedit ← 会改东西,继续排队

问题

现在的设计里,所有工具(bash、write、edit、read、glob、grep)排成一条队,一个一个执行。模型一次发好几个读文件,或者一条长命令(容器里可能跑几分钟)在跑时去读文件,都得干等。你希望读文件这类操作能并行。

现在:模型同时发出 1 条长 bash + 3 个 read
bash
长命令 跑几分钟
read 1
干等
读
read 2
干等
读
read 3
干等
读
开始时间 →全部完成

为什么当初要排队

有三类事不能和别的操作同时做:

①
后台维护:还原被改坏的只读文件、memory 同步、收 outputs。它们要在两条命令之间做,并且要在容器改动确认拉回之后。
②
写操作(write、edit、bash)如果同时改同一个文件,会互相覆盖。
③
容器同步要求同一时刻最多一条命令在跑。
关键:只读操作不改任何东西,本来就不需要排队。

A只读完全并行 推荐

只读工具(read、glob、grep)完全并行,不等正在跑的 bash,只在后台维护那几秒里稍等。bash、write、edit 继续排队。

同样是 1 条长 bash + 3 个 read
bash
长命令
拉回
维护
read 1
读
read 2
读
read 3
读
开始时间 →
好处:读立刻出结果,长命令卡不住读。
代价:命令还在容器里跑的时候去读,读到的是这条命令开始之前的内容。不过同一批里并行发出的调用本来就没有先后保证,CMA 也是这样;命令跑完后再读,就是新内容。

B读写锁

读和读之间并行,但只要 bash 或 write 在跑,读就要等它结束(读写锁)。

同样是 1 条长 bash + 3 个 read
bash
长命令
read 1
等 bash
读
read 2
等 bash
读
read 3
等 bash
读
开始时间 →
好处:读到的内容总是最新的。
代价:长命令会把读卡住,你想解决的问题只解决了一半(读和读之间不用等了,但还得等长命令)。

C全部并行 不推荐

所有操作都并行,包括 bash。

两条 bash 同时改同一个文件
bash 1
改 a.txt
bash 2
也改 a.txt
结果
互相覆盖 / 可能丢文件
read
读
开始时间 →
代价:两条命令同时改文件会互相覆盖,容器同步的前提(同一时刻最多一条命令)也被打破,可能丢文件。

三个选项对比

ABC
读和读并行✅✅✅
长命令在跑时能读✅❌ 要等✅
读到的一定是最新命令跑完后是✅不保证
会丢文件 / 互相覆盖不会不会⚠️ 可能
结论推荐只解决一半不推荐

A 方案执行时的顺序

一回合里的时间线(数字对应下面的步骤)
模型
①
read×3
② 并行读
bash 队列
③ bash 跑
拉回
⑤ 下一个
后台维护
④ 维护
新 read
读
稍等
读
开始时间 →
bash / write / edit(排队) 只读工具 拉回容器改动 后台维护 等待
1
模型同时发出 read×3 + bash。
2
三个 read 立刻并行读,不等 bash。
3
bash 按队列执行,跑完后拉回容器改动。
4
拉回确认完成后,后台维护(还原、同步、收 outputs)只在两条命令之间做;这几秒内新来的 read 稍等。
5
下一个 bash、write、edit 继续排队。

第 1 条怎么回

建议选 A。回「同意 A」,或者回别的字母(B / C)就行。
2#379 合并是否允许带一个小迁移

问题

为了知道哪些只读文件被改了、需要还原,#379 在每台 Computer 自己的小数据库里新加了一张表 mount_file,记录每个拷进来的文件的大小、修改时间和哈希。按规矩,带迁移的 PR 要你批了才合。

每台 Computer 自己的小数据库
① computer_row已有
这台 Computer 自己的记录
② container_run已有
容器运行的记录
③ mount_file#379 新加
每个拷进来的只读文件一行,用来判断要不要还原:
文件路径大小修改时间哈希
D1(共享数据库)
不动
DO 版本标签
仍是 v6-computer
正式环境
没动

范围

选项

同意 建议
第 6 条改完、复测通过后就合。
不同意
换成每回合重算一遍哈希,不建表。
代价:每回合要多读最多 256 MiB,会慢不少。
每回合检查只读文件要花的功夫(示意)
同意·建表
比一下
不建表
重读最多 256 MiB 算哈希

两条一起怎么回

微信回「同意 A,同意迁移」
不同意的话写出来,比如「同意 B,不同意迁移」