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/
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.
- Pro Job freie APFS-Bytes, I/O-Wait und Detox-Boot-Dauer (P95) wöchentlich instrumentieren.
- Gelbe und rote Wasserstände pro SSD-Stufe definieren; Jobs ohne Freigabe abbrechen, bevor Gelb dauerhaft unterschritten wird.
- Neue parallele Spuren einfrieren, solange Hosts in Rot stehen; flaky Knoten aus Rotation nehmen.
- Zusätzliche M4-Runner in der Region platzieren, in der Artefakte entstehen, bevor WAN-Fan-out verbreitert wird.
- Matrix nach jedem größeren iOS-Runtime-Upgrade neu abstimmen — CoreSimulator-Speicherkurven verschieben sich.
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.
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.