2026년 크로스 리전 Mac Mini M4에서 병목은 종종 CPU가 아니라 xcodebuild Parallel Testing·겹친 Simulator·Derived Data·런타임이 만든 APFS 부하입니다. -parallel-testing-enabled·destination·노드당 Simulator 예산빌드 락·경로·1TB/2TB 검수에 묶은 슬러그 예: 2026-xcode-parallel-testing-cluster-m4-disk.html.

동형 노드를 리전에 더하면 두 잡이 같은 쓰기 트리를 두고 싸우거나, destination만 늘려 CoreSimulator가 뒤엉키는 일이 납니다. destination 팬아웃잡 단위 병렬은 따로 캡을 두세요. 《Watchman·Git·디스크 수위》와 아래 표를 같이 맞추면 이벤트 폭주에도 안정적입니다.

파라미터 표: -parallel-testing-enabled · destination 수 · Simulator 동시성

-parallel-testing-enabled YES는 한 호출에 여러 destination으로 테스트를 퍼뜨립니다. 프로세스당 destination노드당 Simulator 부트는 별도 캡이어야 하며, 여유 없이 destination만 올리면 메모리·부트·스냅샷 IO가 먼저 막힙니다. 노드·스킴 분할이 숫자만 키우기보다 낫습니다.

-parallel-testing-enabled destination 수 (프로세스당, 경험칙) Simulator 동시 예산 (노드당)
NO (단일 레인 기본) 1 (-destination 단일) 가동 기기 1–2; 공유 호스트에서는 UI 테스트는 1로 고정 권장.
YES, 유닛 비중 높음 2–3 (동일 SDK·호환 런타임군) 부트 2–3대를 시차 배치; 동시 수는 별도 캡으로 곱셈 폭주 방지.
YES, UI·스냅샷 혼합 ≤2 (destination 올리기 전에 노드 병렬로 스케일아웃) 2대 고정 + 메모리 알람; 크로스 리전은 피크 팬아웃보다 재현성 우선.
검수 힌트: 스테이징 Mac Mini M4에서 destination 1→4로 스윕하며 테스트 단계 p95를 기록하세요. CPU 중앙값은 조금 오르는데 p95가 평평하거나 악화되면 그 무릎이 노드 추가 전 프로세스당 상한입니다.

공유 볼륨의 DB를 건드리는 단계가 있다면 《SQLite WAL·단일 작성자 매트릭스》와 작성자 규칙을 맞춰 Parallel Testing 뒤에 숨은 WAL 체크포인트 폭풍을 만들지 마세요.

빌드 락

같은 Derived Data·산출 트리에 동시 xcodebuild가 쓰면 캐시가 깨져 플레이크가 납니다. 빌드 락은 게시 구간 단일 작성자 계약입니다. 스케줄러 직렬화(Nomad promote 한 할당 등)와 flock은 상호보완이며, 배치는 《Nomad·빌드 락·디스크 매트릭스》와 동일 의미로 맞추면 됩니다.

LOCK_FILE="/var/tmp/xcode-derived-publish.lock"
flock -n "$LOCK_FILE" bash -c '
  xcodebuild -scheme "$SCHEME" -parallel-testing-enabled YES test
  rsync -a "$LOCAL_DERIVED/Build/Products/" "/Volumes/CIArtifacts/$BUILD_ID/"
' || { echo "lock busy"; exit 17; }

컴파일과 대부분의 Derived Data 작업은 락 에 두고, 서명·원자적 rename·정식 트리 갱신만 안쪽에 넣으세요. 락이 필요한 트리에 SSHFS는 피하고 APFS 로컬이나 락 의미가 문서화된 네트워크 파일시스템을 쓰세요.

Derived Data 경로

공유 CI에서는 잡 범위 -derivedDataPath(파이프라인 ID 등)로 쓰기 인덱스를 분리하고 산출물만 rsync·아카이브하세요.

  • CI 변수: 잡 ID 기반 경로, 실패 워크스페이스 적극 삭제.
  • Simulator: CoreSimulator·런타임 디렉터리를 별도 지표로 추적.
  • 읽기 캐시: 가변 캐시 공유 시 프로덕션과 동일 flock 규율.

크로스 리전 승격 시 컴파일 노드 Derived Data는 로컬, 권위 경로는 문서화하세요.

디스크 정리 임계·수위

Parallel Testing은 중간 산출·로그·시뮬레이터 데이터를 빠르게 불립니다. 1TB·2TB 모두 이용률 밴드 퍼센트는 비슷하게 두고, 2TB는 런타임 비대까지 시간만 법니다.

이용률 밴드 1TB: 조치 2TB: 조치
~70% 이하 xcrun simctl delete unavailable 자동화, 오래된 Derived Data 세대 정리, CI temp 주간 스윕. 동일 케이던스—여유가 있다고 위생을 미루지 않습니다.
70–80% (노랑) 이번 스프린트에 확장 또는 아카이브 오프로드 계획; -parallel-testing-enabled destination 캡과 동시 잡을 낮춥니다. 노랑은 늦게 보이는 경우가 많습니다. destination을 다시 올리기 전에 Simulator 동시성·잡 팬인을 줄이세요.
80–90% 무거운 UI 스위트·전체 클린 빌드 동결; 여유가 돌아올 때까지 아티팩트 동기 페이로드 축소. 먼저 안 쓰는 런타임 제거—2TB 클러스터는 런타임 비대까지 가려 두다 절벽에 닿습니다.
~90% 초과 (빨강) 신규 테스트 팬아웃 중단; 스토리지 교체·증설; APFS 스냅샷·숨은 볼륨 감사; 수위는 대시보드에 상시 표시.
70%
정기 자동화선: 예약 정리가 영웅적 수고 없이 돌아가야 합니다.
80%
노랑: 병렬 설계를 다시 하거나 이번 스프린트에 디스크를 확보합니다.
90%
빨강: 신규 부하 중단·노드·티어 업; CI가 사건 대응이 되기 전에.

검수(발췌): 주간 df·Simulator 발자국; -derivedDataPath 무충돌; 캡은 런북에 버전 고정; 노랑·빨강은 티켓·용량 검토. 플랜 비교는 기술 블로그와 하단 공개 링크를 사용하세요.

자주 묻는 질문

destination을 올렸는데 빨라지지 않음: Simulator·메모리·디스크 포화 → 노드 분할·동시성 축소 후 재조정.

flock busy: 락 구간을 서명·최종 게시로만 축소.

2TB도 금방 노랑: 베타·런타임 다벌 → 퍼센트는 동일, 런타임 폐기만 강화.

엔지니어링 실무 참고용입니다. CLI 플래그와 Simulator 동작은 macOS·Xcode 릴리스마다 변합니다. 수치는 휴리스틱으로 두고 스테이징에서 검증·삭제 정책 문서화·보존·컴플라이언스에 맞게 프로브를 조정하세요.
병렬 Mac 용량 · 로그인 없이 공개 페이지

Parallel Testing이 디스크 빨간선에 닿기 전에 동형 Mac mini M4 노드 확보

플랜 비교와 주문 시작은 로그인 없이 열려 있는 가격(요금)·구매 공개 페이지에서 하세요. 리전 믹스와 디스크 티어가 이 매트릭스와 맞을 때만 결제로 넘어가면 됩니다. 동일 1TB/2TB 정책으로 Simulator 예산과 수위를 크로스 리전에 맞춰 예측 가능하게 유지하세요.

Mac mini M4 구매(공개 페이지) 가격표 보기(로그인 불필요)