Mehrprojekt-iOS-Teams, die Detox auf gekoppelten Mac mini M4-Hosts parallel fahren, teilen sich ein gemeinsames Budget: gleichzeitige iOS-Simulator-Sitzungen pro Knoten, WAN-Zeit beim Fan-out abgeleiteter Artefakte und freier Speicher unterhalb der Disk-Wasserstände, bevor UI-Suites flaky werden. Die folgende Entscheidungsmatrix plus 1TB/2TB-Abnahme-Checkliste macht Mehrregionen-Kapazität zahlenbasiert freigabefähig — statt Bauchgefühl.

Detox verrät Konkurrenz früh: Boot-Stürme paralleler Simulator-Runtimes treiben APFS-Metadaten-I/O schneller hoch als CPU-Dashboards suggerieren. DerivedData ohne Promotion-Gate zwischen Jobs zu teilen erzeugt halb geschriebene Scheiben — der Build bleibt grün, Gesten brechen zur Laufzeit. Auf 1TB-Profilen kollidieren CoreSimulator-Gerätesätze mit Metro-/SPM-Caches früher, als Roadmaps erwarten.

  • Sitzungs-Oversubscribe: Jeder Simulator kostet RAM, Framebuffer und Speicher — nicht „ein Thread pro Kern“.
  • Artefakt-Races: Zwei Agenten auf demselben Warm-Cache-Pfad ohne Queue zerstören inkrementelle Builds.
  • Disk-Klippen: Gelbe/rode Bänder unterscheiden sich bei 1TB vs. 2TB; Parallelität nur erweitern, wenn Wasserstände stabil grün bleiben.

Ergänzen Sie diese Seite mit der Xcode-Parallel-Testing- und Simulator-Budget-Matrix für native xcodebuild-Spuren, der Cluster-Artefakte-rsync-Matrix für Freigaben-Pfade sowie Nomad-Affinität & Buildsperre, sobald mehrere Dienste dieselbe M4-Flotte anfassen. Für Watchman-/FSEvents-Drosseln siehe Watchman & Disk-Abnahme.

Konkurrenz-Obergrenzen

Die Tabelle ist der Vertrag zwischen Mobile-Platform, CI und FinOps: Sie kodieren, was „eine weitere parallele Spur“ auf M4-Metal wirklich kostet — inklusive Simulator-Sitzungsbudget und Speicherstufe.

Posture Parallel-Simulator-Budget DerivedData-Disziplin WAN / Region SSD-Stufe
Ein-Region-Burst Zwei bis vier gleichzeitige Simulatoren auf 16-GB-Stufen pilotieren; Tail-Latenz messen, bevor Caps steigen. Job-gescopte Verzeichnisse; niemals eine gemeinsame DerivedData-Wurzel zwischen parallelen Detox-Eltern. Artefakt-Pulls im LAN halten; keine Cross-Region-Abhängigkeit vom Warm-Cache. 1TB mit wöchentlicher Cache-Rotation und hartem Prune nach Merge.
Multi-App-Queue Pro App-ID im Runner serialisieren; Gesamtzahl booteter Runtimes deckeln, auch wenn Warteschlangen warten. Nach dem Compile read-only-Snapshots promoten; Tests lesen eingefrorene Bäume. Wenn Queues über Regionen laufen, Latenz-Budget in Detox-Start-Probes einplanen. 2TB, sobald drei oder mehr große Apps einen Host teilen.
Mehrregionen-Fan-out Parallelität pro Knoten senken; lieber mehr M4-Hosts als heroische lokale Parallelität. rsync-Deltas nach Compile in der Ursprungsregion; Consumer prüfen Checksumme vor Boot. RTT messen und --bwlimit setzen, damit Transfers nie Simulator-I/O verhungern. 2TB als Default, wenn WAN-Kopien und Simulatoren dasselbe APFS-Volume teilen.

Kalibrieren Sie die Matrix wöchentlich an P95-Simulator-Boot, freien APFS-Gigabytes und Detox-Watchdog-Timeouts. Wenn CPU grün bleibt, aber I/O rot wird, ist die Tabelle Ihr Eskalationspfad — nicht „mehr Worker“ blind.

rsync-Parameter für abgeleitete Artefakte

Warme Caches müssen aus Sicht des Consumers atomar ankommen: in ein versionsiertes Staging-Verzeichnis schreiben, rsync mit Archiv-Semantik (-a), partielle Übertragungen (--partial), optional --delay-updates für konsistentere Batch-Renames und auf WAN-Strecken --bwlimit, damit Simulator-Boot-I/O Vorrang behält.

Auf gemeinsamen Wurzeln keine blinden Deletes: Zeiten- oder Checksummen-Deltas bevorzugen. Nach erfolgreichem Transfer Symlink umschalben oder Verzeichnis in einer atomaren Umbenennung aktivieren — Detox darf nie halb befüllte Bäume öffnen. Tiefe Muster inkl. flock-Beispiele finden Sie in der verlinkten Cluster-rsync-Matrix.

rsync -a --partial --delete-delay \
  --bwlimit=80000 \
  -e "ssh -o ServerAliveInterval=30" \
  bau@origin:/var/ci/staging/app-42/ \
  ziel:/var/ci/artifacts/app-42-staging/
Hinweis: rsync-Exit-Codes mit derselben Correlation-ID wie die Detox-Session loggen — dann lesen Flakes als Transport- statt als „App-Regression“.

Sperren und Warteschlangen

Jeder Promotion-Pfad erhält genau einen Writer: Merge-Queue-Lane, Dateisperre auf dem Cache-Root oder Scheduler-Token (z. B. Nomad). Reader dürfen fan-out — Writer müssen serialisiert werden, sonst jagen Sie endlos nicht-deterministische UI-Timeouts.

CI-Warteschlangen mit Host-flock um kurze kritische Abschnitte koppeln, die gemeinsame DerivedData oder CoreSimulator-Gerätesätze berühren. Eskalation und Affinität an Nomad-Affinität & Buildsperre ausrichten, sobald mehrere Services dieselben Mac mini M4-Knoten nutzen.

Dokumentieren Sie Lock-IDs in strukturierten Logs bei jedem Promotion-Event — das ist Ihr Audit-Trail, wenn nachträglich geklärt werden muss, ob zwei Pipelines dieselbe Scheibe berührt haben.

Skalierungsstrategie

Knoten hinzufügen, wenn die Warteschlangen-Tiefe bei sicheren Disk-Wasserständen wächst — nicht, wenn jemand bei 90 % Auslastung „mehr Parallelität“ will. Zuerst Simulator-Caps pro Host senken, dann Apps sharden, dann 2TB-SKUs finanzieren.

  1. Pro Job freie APFS-Bytes, I/O-Wait und Detox-Boot-Dauer (P95) wöchentlich instrumentieren.
  2. Gelbe und rote Wasserstände pro SSD-Stufe definieren; Jobs ohne Freigabe abbrechen, bevor Gelb dauerhaft unterschritten wird.
  3. Neue parallele Spuren einfrieren, solange Hosts in Rot stehen; flaky Knoten aus Rotation nehmen.
  4. Zusätzliche M4-Runner in der Region platzieren, in der Artefakte entstehen, bevor WAN-Fan-out verbreitert wird.
  5. Matrix nach jedem größeren iOS-Runtime-Upgrade neu abstimmen — CoreSimulator-Speicherkurven verschieben sich.
2–4
Pilot-Parallelität gleichzeitiger Simulator-Sitzungen auf 16 GB-M4, bevor Caps angehoben werden.
70 %
Cache-Rotation planen, wenn die gleitende APFS-Belegung auf 1TB-Hosts dauerhaft über ca. 70 % steigt.
80 %
Skalierungs-Review auslösen, bevor ca. 80 % zum wöchentlichen Median wird.

Abnahme-Checkliste 1TB / 2TB (Disk-Wasserstände)

  • Preflight-Bytes: Agent veröffentlicht freie APFS-Gigabytes; Job bricht unter gelbem Wasserstand ab.
  • Simulator-Cap: Aktive Detox-Sitzungen überschreiten nie die signierte Matrix-Zeile für diese SKU.
  • rsync-Verifikation: Checksummen oder strikte mtime-Policy vor Symlink-Swap an Consumer.
  • Sperr-Nachweis: Promotion-Events loggen Lock-ID strukturiert.
  • Prune-Policy: CoreSimulator- und DerivedData-TTL dokumentiert und automatisiert.
  • Post-Run-Drain: Fehlgeschlagene Jobs geben Gerätesätze und Temp-Bäume innerhalb einer Stunde frei.

Beschaffung orientiert sich an drei Kurven: Detox-Queue-Tiefe, Simulator-Boot-P95 und APFS-Auslastung. Wenn Queues wachsen, Speicher aber grün bleibt, parallele M4-Knoten in der passenden Geografie ergänzen. Wenn die Scheibe gelb wird, obwohl die Queue flach wirkt, zuerst Caches und rsync härten — nicht blind Kerne kaufen.

Tarife öffentlich einsehen, für SSH- und Zugriffsmuster die Hilfe lesen und über die Bestellseite zusätzliche Runner buchen, sobald die Checkliste unter Peak-Detox grün bleibt — ohne Login-Zwang.

Operative Orientierung. Caps an eigene Detox-Traces und Apple-Runtime-Release-Notes anpassen. Wasserstände hängen von Retention, Snapshots und Mitnutzung desselben Volumes ab.
Parallele iOS-Kapazität

Detox-Spuren auf Mac mini M4 skalieren

Dedizierte M4-Knoten mit 1TB oder 2TB wählen, Simulator-Budgets explizit halten und clustervps-Regionen nutzen, um Compute nah am Artefakt-Ursprung zu platzieren. Vertiefung: Xcode Parallel Testing, Cluster-rsync, Nomad-Buildlocks.

Parallele M4-Knoten mieten Tarife (ohne Login) Hilfe-Center