Detox 병렬이 CPU 전에 깨지는 이유
동시 Simulator 부트는 APFS 메타 IO를 CPU보다 먼저 올립니다. DerivedData를 게이트 없이 재사용하면 반쯤 쓴 트리로 제스처가 죽고, 1TB에서는 CoreSimulator·Metro·SPM 캐시가 빨리 겹칩니다.
- 세션 과구독: Simulator는 코어가 아니라 RAM·프레임버퍼·스토리지로 보세요.
- 산출물 경쟁: 큐 없이 같은 웜 캐시 경로에 두 에이전트가 쓰면 증분 빌드가 깨집니다.
- 디스크 절벽: 1TB와 2TB의 노란 밴드 의미는 같아도 여유 폭이 다릅니다. 수위가 녹색일 때만 병렬 상한을 넓히세요.
네이티브 xcodebuild 레인은 Xcode Parallel Testing·Simulator 예산 매트릭스와 짝을 이루고, 이 페이지는 Detox 전용 세션 산술과 rsync 위생에 초점을 둡니다.
동시 실행(병렬 Simulator) 상한
아래 표는 모바일 플랫폼·CI·FinOps 사이의 계약서로 쓰세요. 열은 “병렬 레인을 하나 더”가 M4 베어메탈에서 실제로 무엇을 값으로 치르는지 인코딩합니다.
| 자세(Posture) | 병렬 Simulator 예산 | DerivedData 정책 | WAN·리전 메모 | 디스크 티어 힌트 |
|---|---|---|---|---|
| 단일 리전 버스트 | 16GB급에서 동시 2~4대로 시작해 꼬리 지연을 검증한 뒤 상한 상향. | 작업 범위 디렉터리; 동시 Detox 부모 간에 DerivedData 루트 공유 금지. | 아티팩트 풀은 LAN에; 크로스 리전 웜 캐시 의존은 피하기. | 주간 캐시 로테이션·머지 시 강제 정리가 있으면 1TB도 현실적. |
| 다중 앱 큐 | 러너 안에서 앱 ID별 직렬화; 큐가 기다려도 부팅된 런타임 총량은 캡. | 컴파일 후 읽기 전용 스냅샷만 승격; 테스트는 동결 트리만 읽기. | 큐가 리전을 넘으면 Detox 기동 프로브에 지연 예산 추가. | 대형 앱 세 개 이상이 한 호스트를 쓰면 2TB. |
| 크로스 리전 팬아웃 | 노드당 동시성은 낮추고, 로컬 영웅 병렬보다 M4 노드 수를 늘리기. | 오리진 리전에서 컴파일 후 rsync 델타; 소비자는 부트 전 체크섬 검증. | RTT를 재고 --bwlimit으로 전송이 Simulator IO를 굶기지 않게. |
WAN 복사와 Simulator가 한 APFS 볼륨을 쓰면 2TB를 기본으로 검토. |
파생 산출물 rsync 매개변수
버전 디렉터리에 스테이징한 뒤 아카이브 의미의 rsync(부분 파일, WAN은 --bwlimit)로 Simulator 부트 IO 우선을 지키세요.
공유 루트는 델타+심링크 원자 스왑으로 반쯤 채워진 트리를 막습니다. flock 등은 클러스터 rsync 매트릭스를 보세요.
락과 큐
승격 경로마다 단일 작성자를 둡니다: 머지 큐 레인, 캐시 루트 파일 락, 또는 Nomad 스케줄러 토큰. 읽기는 팬아웃해도 되지만 쓰기는 직렬화하지 않으면 비결정적 UI 타임아웃을 끝없이 쫓게 됩니다.
공유 DerivedData나 CoreSimulator 기기 세트를 건드리는 짧은 임계 구간에는 CI 큐와 호스트 단 flock을 짝지으세요. 여러 서비스가 같은 Mac Mini M4를 쓸 때는 Nomad 어피니티·빌드 락 매트릭스와 티어를 맞추면 확장이 수월합니다.
확장(용량) 전략
노드 추가는 안전한 디스크 수위에서 큐가 깊어질 때입니다. 먼저 Simulator 캡·샤딩, 그다음 2TB SKU를 검토하세요.
- 작업별 APFS 여유 바이트·IO 대기·Detox 부트 시간 백분위수를 주간으로 계측합니다.
- 티어별 노란·빨간 수위를 정하고, 승인 없이 노란을 넘는 잡은 즉시 중단합니다.
- 호스트가 빨간 구간이면 새 병렬 레인 동결; 불안정 호스트는 로테이션에서 제외합니다.
- WAN 팬아웃을 넓히기 전에 산출물이 나오는 리전에 M4 러너를 더 둡니다.
- iOS 런타임 메이저 업그레이드마다 매트릭스를 다시 돌립니다. CoreSimulator 저장 곡선이 바뀝니다.
1TB/2TB 디스크 수위 검수 체크리스트
- 프리플라이트 바이트: 에이전트가 APFS 여유 GB를 게시; 노란 수위 미만이면 잡 중단.
- Simulator 캡: 활성 Detox 세션이 해당 SKU에 서명된 매트릭스 행을 넘지 않음.
- rsync 검증: 소비자에게 심링크 스왑 전 체크섬 또는 엄격한 mtime 정책 통과.
- 락 증명: 승격 이벤트에 구조화 로그로 lock id 기록.
- 정리 정책: CoreSimulator·DerivedData 보존 기간을 문서화하고 자동화.
- 포스트런 방출: 실패 잡도 1시간 내 기기 세트·임시 트리 해제.
요약: Detox 현실에 맞는 병렬 M4를 빌리기
큐·Simulator p95·APFS 세 곡선으로 조달하세요. 녹색 디스크에서 큐만 크면 병렬 M4를, 디스크만 노랗면 캐시·rsync부터. 가격·도움말·구매(로그인 불필요)로 러너를 늘리면 됩니다.