Когда QA-организация гоняет матрицу Appium / XCTest на беарметал удалённом Mac mini M4 в Сингапуре, Токио, Сеуле, Гонконге, восточном и западном побережье США, релизное окно чаще сжимает не «медленный CPU», а несоответствие числа параллельных сессий и объёма RAM, красный уровень диска из-за скриншотов и DerivedData и иллюзия, что второй параллельный узел автоматически удваивает throughput. Ниже — таблица параллелизма по градациям M4, пороги насыщения диска для 1TB/2TB, границы второго узла и восьмишаговый цикл посуточной → понедельной проверки. Цены и наличие — на странице тарифов NOVAKVM, заказ — оформление заказа, политика сессий и диска — центр помощи. См. также матрицу выбора региона и SSH против общего доступа к экрану.
После прочтения вы сможете ответить: ① сколько устойчивых веток UI-автоматизации дают M4 16GB/256GB, M4 24GB/512GB, M4 Pro 64GB/2TB; ② когда сначала нужно расширение 1TB/2TB, а не вторая машина; ③ когда параллельный ресурс выгоднее апгрейда CPU; ④ как при пике 7–14 дней использовать посуточную и понедельную аренду для измерения наклона диска перед месячным контрактом. Поведение XCTest и симуляторов сверяйте с документацией Apple после обновления macOS.
[ SECTION_01 ] // BOTTLENECKS Appium/XCTest на удалённом Mac: три слоя узких мест и скрытые затраты
Первый слой — конкуренция сессий и симуляторов: несколько Appium-сессий или xcodebuild test под одним пользователем macOS делят каталог CoreSimulator по умолчанию → таймауты запуска, невидимые диалоги Keychain, ложные падения из-за остатков приложения. Второй — усиление записи на диск: UI-матрица одновременно раздувает скриншоты, trace Instruments, DerivedData и системные логи; на 256GB при 4–6 параллельных ветках и нескольких полных прогонах в сутки свободное место часто падает ниже 15% к 3–5 дню, что проявляется обрывами WebDriver и «случайными» фризами UI. Третий — неправильный второй узел: длинный последовательный smoke в одном репозитории и одной scheme на двух Mac даёт двойной счёт, двойную поверхность патчей и дрейф окружения без прироста throughput.
Скрытые затраты: установка артефактов, когда runner и целевое приложение в разных регионах; джиттер общего доступа к экрану через океан, ошибочно списанный на «нестабильную автоматизацию»; смешение в одной закупке второго узла и апгрейда до M4 Pro с оплатой простоя после пика.
- Симуляторы: несколько джобов на
~/Library/Developer/CoreSimulator→ device busy и занятые порты. - Скриншоты и trace: полноэкранные кадры при трёх ретраях — от единиц до десятков ГБ в сутки.
- DerivedData: без разнесения каталогов по пайплайнам ломается инкрементальная сборка UI.
- Пики RAM: несколько симуляторов и WebDriverAgent на 16GB — swap уже на 3+ ветках.
- Параллель vs блокировки: жёсткая последовательность в одном репозитории не режется пополам двумя машинами.
- Межрегиональная загрузка: артефакт в Сингапуре, runner на US-West — десятки минут только на install.
Ёмкость UI-матрицы начинается с вопроса: есть ли явные параллельные семейства задач, а не с числа ядер.
[ SECTION_02 ] // CONCURRENCY_MATRIX Градации M4 и число параллельных веток Appium/XCTest
Таблица ниже — типовая нагрузка, рекомендуемое число веток, диск и необходимость второго узла (инженерные диапазоны 2026; измеряйте на своих кейсах).
| Градация | Типовая нагрузка | Устойчивые ветки | Диск и второй узел |
|---|---|---|---|
| M4 16GB / 256GB | Smoke одного приложения, короткий XCTest, лёгкий Appium | 1–2 (3 только с жёстким лимитом скриншотов) | Скриншоты и DerivedData на внешний том |
| M4 24GB / 512GB | Ночная матрица нескольких scheme, средний Appium | Appium 3–4 или XCTest с компиляцией 2–3 | 512GB — мониторинг наклона; на пике недели смотреть 1TB |
| M4 Pro 64GB / 2TB | Крупный UI, несколько версий OS симулятора, тяжёлый trace | 6–8 веток UI при разнесённых пулах симуляторов | 2TB под скриншоты и DerivedData; второй узел для параллельных семейств |
| Второй узел (тот же регион) | Несколько приложений, региональный smoke, каналы A/B | Над потолком одной машины через разрез графа задач | Пик релиза 7–14 дней; не для жёстко последовательных пайплайнов |
При xcodebuild test -parallel-testing-enabled YES считайте ветки как одновременные экземпляры симулятора + пик компиляции, а не просто число джобов. Apple обновляет семантику параллельных тестов — перечитайте после релиза Xcode:
https://developer.apple.com/documentation/xctest
https://developer.apple.com/documentation/xcode/running-tests-and-interpreting-results
[ SECTION_03 ] // STORAGE_PARALLEL 1TB/2TB и второй узел: насыщение диска и матрица решений
ROI расширения 1TB/2TB смотрите по кривой записи: полные скриншоты на падении, три автоматических ретрая, одновременный Instruments. Если системный том 48 часов подряд < 20% свободного или чистый прирост > 25GB/сутки — сначала расширение или вынос каталогов, а не повышение параллелизма.
| Сигнал | Действие | Типичная ошибка |
|---|---|---|
| Красный диск, CPU свободен | 1TB/2TB или внешний том под trace/скриншоты | Сразу второй Mac |
| swap, убийство симуляторов | M4 Pro или меньше веток | Только диск без снижения веток |
| Параллельные семейства ясны, CPU на пределе | Второй узел в том же регионе + метки очереди | Резать жёсткий последовательный пайплайн пополам |
| Пик 7–14 дней | Посуточно/понедельно измерить наклон + второй узел на неделю пика | Месячный контракт на две топовые машины сразу |
Приоритет одного региона в шести точках: runner, целевое приложение, хранилище сборок и вложения баг-трекера в одной региональной семантике обычно короче, чем US-West runner + азиатская цель. Сингапур — ЮВА; Токио/Сеул — восточноазиатские таймзоны; Гонконг — интерактивная отладка для южного Китая; US-East — восточное побережье; US-West — Кремниевая долина и соседние облака.
#!/bin/bash
THRESH=20
USED_PCT=$(df -g / | awk 'NR==2{print int(($3/($3+$4))*100)}')
if (( USED_PCT > (100-THRESH) )); then echo "DISK_SATURATION"; exit 2; fi
du -sh ~/Library/Logs ~/Library/Developer/CoreSimulator 2>/dev/null
[ SECTION_04 ] // RUNBOOK Восемь шагов: посуточная и понедельная аренда перед месячным контрактом
- Зафиксировать граф задач: отделить параллельные семейства (несколько приложений, scheme, OS) от последовательных.
- Базовая одна ветка: на посуточной машине прогнать полный suite, записать wall-clock, пик RAM, прирост диска.
- Ступенчатое давление: 2→3→4 ветки, на каждой ступени — обрывы WebDriver и сбои запуска симулятора.
- Разнесение каталогов: на ветку свой
DERIVED_DATA_DIR, корень скриншотов и пул UDID симуляторов. - Наклон диска: 48 часов
dfиdu; при красной линии 20% — оценить 1TB/2TB. - Шесть регионов: машина, цель и артефакты в одном регионе; для интерактива — ближайший узел.
- Второй узел на пике: только если одна машина на пределе и параллельные семейства ясны.
- Закрепить срок: после стабильного наклона — месячная аренда; после пика — снять второй узел.
[ SECTION_05 ] // DATA_REGION_FAQ Параметры для аудита, регионы, FAQ
Ниже — инженерные эвристики, не теоретический предел железа.
- Наклон скриншотов и логов: средний suite с полным экраном на падении и тремя ретраями — 8–18GB/сутки; 256GB без выноса часто краснеет за 3–5 дней.
- RAM симулятора: один iOS-симулятор — порядка 2–4GB; четыре ветки на 16GB — высокий риск.
- Межрегиональный install: через Тихий океан — десятки минут wall-clock только на установку и fixture.
- ROI второго узла: если параллельные кейсы ≥ 40% и CPU одной машины > 85% стабильно — второй узел в том же регионе часто эффективнее бесконечной чистки диска.
FAQ:
- Q: 256GB и четыре ветки Appium? A: Краткий стресс-тест — да; постоянно — нет; выносите скриншоты и DerivedData или берите 512GB+.
- Q: Сначала второй Mac или 2TB? A: Красный диск — расширение/вынос; насыщенный CPU и ясные параллельные семейства — второй узел.
- Q: XCTest и Appium на одной машине? A: Да, с разными пулами симуляторов и каталогами, без общего UDID.
- Q: Хватит ли посуточной аренды? A: Для эксперимента с наклоном и ступенями — да; для стационарной матрицы — неделя → месяц.
Альтернативы: shared virtualized Mac — шум соседей, непрозрачный диск, окна обслуживания; ноутбук — сон и локальные остатки симулятора. Для production-цепочки с параллельным Appium/XCTest, предсказуемым диском и коротким пиком в шести регионах аренда Mac mini в облаке NOVAKVM — обычно лучший выбор: выделенный Apple Silicon, узлы в шести регионах, посуточная и понедельная проверка перед месячным контрактом, связка M4 Pro 64GB/2TB и второго узла на неделю релиза. Перед следующим review запишите в одну строку красную линию диска 20% и долю параллельных кейсов — это снижает счёт и инциденты сильнее, чем спор «добавить ещё одну машину».