Detox 对争用很诚实:多 Simulator 同启会先打满 APFS 元数据 IO,CPU 曲线仍可很平;多作业共写同一 DerivedData 暖树而无晋升门闩,则易「编译过、手势半路挂」。1TB 上设备集叠 Metro/SPM 缓存常早于预期撞墙。原生 xcodebuild 见 《Xcode Parallel Testing 与模拟器并发、磁盘验收》;监听节流见 《Watchman/Git 与磁盘水位矩阵》。
并发上限
下表作移动端平台、CI 与 FinOps 的合同:在 M4 上「再加一条并联车道」的代价写进列里。
| 形态 | 并行 Simulator 预算 | DerivedData 策略 | 跨区 / 链路 | 磁盘档位提示 |
|---|---|---|---|---|
| 单区突发 | 16GB 档先验证 2~4 路并发 Simulator 尾延迟,再抬上限。 | 按作业划目录;并发 Detox 父进程禁止共写同一 DerivedData 根。 | 产物拉取尽量走内网;避免跨区强依赖暖缓存。 | 1TB 可行:周轮换缓存、合并后硬修剪。 |
| 多应用队列 | Runner 内按 app id 串行;总启动运行时硬帽,队列可等。 | 编译后晋升只读快照;测试只读冻结树。 | 队列溢出多区时,为 Detox 启动探针加 RTT 余量。 | 三台及以上大应用同机倾向 2TB。 |
| 跨区扇出 | 降低每节点并发;优先加 M4 节点而非单机英雄主义。 | 源区编译后 rsync 增量;消费端校验后再 boot。 | 量 RTT,对 WAN 设 --bwlimit,避免挤占 Simulator IO。 |
WAN 拷贝与 Simulator 同卷时默认 2TB。 |
产物 rsync 参数
从消费方视角,暖缓存应原子到达:先落到带版本号的暂存目录,rsync 用归档语义、开启断点续传,稳定硬链后再压缩;WAN 腿加带宽上限,让 Simulator 启动 IO 优先。
共享根上优先 mtime/校验和增量,避免盲删。传输完成后一次 symlink 交换或目录重命名,杜绝 Detox 打开半填充树。车队级范式与 flock 示例见 《集群制品 rsync 矩阵》。
锁与队列
每条晋升路径只允许单写入者:合并队列泳道、缓存根上的文件锁,或 Nomad 调度令牌。读者可扇出,写入必须串行,否则 UI 超时会在概率里永远追不完。
CI 级队列与主机级 flock 包住触碰共享 DerivedData / CoreSimulator 设备集的窄临界区即可。多服务共享同一台 Mac Mini M4 时,与 《Nomad 亲和、构建锁与磁盘矩阵》 的「单晋升车道」对齐。
扩容策略
在磁盘水位仍绿、队列变深时加节点;不要在利用率已九十还喊「再并联一点」。顺序:先缩每节点 Simulator 帽,再按应用分片到多机,最后才采购 2TB SKU。
- 按作业采集 APFS 剩余字节、IO wait、Detox 启动耗时 p95,周更大盘。
- 按档位定黄/红线;无审批跨黄即 fail-fast。
- 主机进红:冻结新并联泳道,摘除抖动机。
- 扩 WAN 扇出前先加产物源区的 M4 Runner。
- 大版本 iOS 运行时升级后重跑矩阵——CoreSimulator 落盘曲线会变。
1TB/2TB 磁盘水位验收清单(上线/每季签字):
- 预检容量:Agent 上报 APFS 可用 GB;低于黄线 watermark 则作业拒纳。
- Simulator 帽:活跃 Detox 会话不超过该 SKU 对应矩阵行。
- rsync 校验:校验和或严格 mtime 策略通过后才 symlink 交换给消费端。
- 锁证明:晋升事件结构化日志含 lock id,可审计。
- 修剪策略:CoreSimulator 与 DerivedData 保留窗口文档化且自动化。
- 跑后释放:失败作业仍在一小时内释放设备集与临时树。
采购看三条曲线:Detox 队列深度、Simulator 启动 p95、APFS 利用率。队列涨盘绿则加对地理的并联 M4;盘黄队列平则先修缓存与 rsync 再买核。公开页 价格、帮助 免登录可览,清单长期绿再在 购买 增配 Runner。
按 Detox 现实扩 Mac mini M4 并联资源
选配专用 M4 与 1TB/2TB 档位,把 Simulator 预算写进 runbook,并把计算放在靠近产物源区的区域。延伸阅读:Xcode 并行测试矩阵、集群 rsync 矩阵、Nomad 构建锁。