Если считать каждый Mac mini M4 в парке недифференцированной «быстрой машиной», команды неизбежно строят очереди, которые кажутся случайными. В 2026 году побеждают те, кто публикует конверт ёмкости: прозрачный договор о базовой параллельности, контролируемом заёме burst из общего пула и окнах сброса, возвращающих заёмные слоты до начала дрожания парка. В статье — две матрицы решений, численные отправные точки для runbook и восемь шагов внода, согласованных с маршрутизацией по меткам, которую вы, возможно, уже используете.
Сопутствующие материалы: мягкая и жёсткая аффинити и правила распределения, резервирование, вытеснение и охлаждение. Когда будете готовы добавить узлы в Гонконге, Японии, Корее, Сингапуре или США, начните с цен и держите открытым раздел помощи для сценариев онбординга SSH/VNC.
Почему средний CPU на Mac runner вводит в заблуждение при планировании ёмкости
На хостах CI Mac с Apple Silicon часто «комфортные» средние по CPU при том, что очереди всё равно не укладываются в сроки. Причина структурная: сборки Xcode, UI-тесты и шаги подписи создают короткие всплески, сериализуемые на дисковом IO, Metal или цепочке codesign. Средние скрывают блокировку в голове очереди, особенно когда несколько репозиториев делят один хост без конверта. Модель конверта заставляет рассуждать в категориях параллельных задач и глубины очереди, а не только графиков утилизации.
- Параллельные задачи — настоящая валюта; процент CPU лишь вторичный сигнал.
- Глубина очереди показывает, голодают ли базовые слоты из-за заёмщиков; перцентили задержек — не слишком ли агрессивны сбросы.
- Окна сброса превращают «вежливые договорённости» в исполнимую политику, чтобы общие пулы оставались справедливыми под нагрузкой инцидентов.
Трёхслойный конверт: база, burst-пул, сброс
Думайте о каждом бизнес-подразделении (или каждом критическом пайплайне) как о владельце базового конверта на помеченном наборе узлов Mac mini M4. Burst-пул — это общая ёмкость, которую может занять любой подходящий workflow при совпадении меток, с числовым потолком заёма на арендатора и сбросом по времени или числу задач. Слой сброса не даёт «временному burst» стать постоянной оккупацией.
| Слой | Что гарантирует | Типичное управление |
|---|---|---|
| База | Минимальное число параллельных задач, зарезервированное для сквада или релизного поезда | Выделенные метки, группы runner или жёсткие минимальные реплики на очередь |
| Заём burst | Дополнительная параллельность в недели релизов или при лавине хотфиксов | Общая метка burst-eligible с числовым лимитом на арендатора |
| Сброс | Заёмные слоты истекают без продления по утверждённой политике | Минуты охлаждения, календарный сброс или дневной бюджет «токенов заёма» |
Матрица: разрешить заём burst или жёсткий потолок
Используйте матрицу при подключении нового репозитория к парку Mac. При сомнениях по умолчанию — жёсткий потолок для всего, что касается ключей подписи или продуктовых артефактов релиза; ослабляйте после того, как наблюдаемость покажет стабильные очереди.
| Паттерн нагрузки | Заём? | Обоснование |
|---|---|---|
| CI ветки фичи (lint + юниты) | Да, со сбросом | Эластичный спрос; дёшевы отказы; хорошо для общего burst |
| Релизный поезд (RC-сборки) | Ограниченный заём | Ограниченный по времени burst и жёсткий сброс согласуются с окнами CAB |
| Шарды UI-тестов, нужна стабильность GPU | Обычно нет | Скрытая конкуренция на WindowServer; лучше меточные шарды и жёсткие лимиты |
| Подписанные нотариализованные артефакты | Жёсткий потолок | Аудируемость и детерминированный порядок важнее пропускной способности |
Исполнимые параметры на эту неделю
Цифры — отправные точки; подстройте под свою p95 длительность задач. Цель — читаемая для разработчиков политика («всегда две полосы; в релиз можно запросить четыре, если в пуле есть место»).
- База на сквад: для мобильных команд 2 параллельные macOS-задачи на M4 с RAM ≥24 ГБ; для небольших сервисных сквадов 1.
- Потолок burst на сквад: не более +3 заёмных задач над базой, если временно не поднято в тикете изменения.
- Окно сброса: заёмные слоты истекают через 45 минут настенного времени или после 12 завершённых burst-задач — что раньше.
- Алерт глубины очереди: вызов дежурного, если глубина macOS-очереди > 25 задач 10 минут в любом регионе.
- Защита справедливости: если один репозиторий съел >35% burst-минут за день — автоматически снимайте burst-метки до разбора.
Заметка эксплуатации: заём burst без сброса — это путь, как «пять команд делят десять Mac» незаметно превращается в «одна команда владеет девятью». Публикуйте цифры во внутреннем портале разработчиков; секретность гарантирует обиды, а не соблюдение.
Восемь шагов внедрения на весь парк
- Инвентаризация runner по меткам, региону, уровню RAM и закреплённому Xcode; неизвестное исключайте из burst-пулов.
- Определите базы в таблице с подписью инженерных менеджеров — не только инфраструктуры.
- Внедрите burst-метки отдельно от базовых; опишите право на заём в шаблонах README.
- Автоматизируйте сброс планировщиком или движком политик, снимающим burst-метки по истечении бюджета.
- Подключите метрики глубины очереди, p95 ожидания, минут заёма по репо; дашборды по регионам.
- Игровой день дважды в квартал: симулируйте исчерпание burst и проверяйте, что базы всё ещё проходят.
- Разборы инцидентов должны ссылаться на параметры конверта; обновляйте лимиты по фактам.
- Масштабируйте железо, когда базы регулярно голодают — NodeMac даёт выделенные узлы M4 в HK/JP/KR/SG/US с предсказуемой базой без коло-логистики.
Частые вопросы
Что такое конверт ёмкости для Mac CI runner в 2026 году?
Это договор на команду или пайплайн: базовые параллельные задачи, опциональные правила заёма burst и способ сброса заёмной ёмкости. Конверт делает справедливость операционной, а не культурной декларацией.
Когда отключать заём burst?
При необходимости эксклюзивного железа, детерминированной изоляции нестабильных тестов или регулируемых сборок, где порядок очереди должен совпадать с аудиторскими доказательствами. Предпочитайте жёсткие лимиты и выделенные группы runner.
Как окно сброса снижает дрожание парка?
Сбросы заставляют заёмную параллельность истекать без явного продления, прекращая долгий кемпинг на общих пулах и давая базам воздух после инцидентов.