Три узких места CephFS на межрегиональном CI
1. Клиентский кеш и устаревшие dentry. Слишком большой client cache на macOS клиенте держит старые inode после атомарной замены каталога rsync, и агенты CI видят частично обновлённое дерево, хотя сервер уже опубликовал новый снимок артефакта.
2. Преждевременное закрытие сессии MDS. Если mds_session_timeout короче длительности полного rsync при выбранном bwlimit, метаданные откатываются в середине передачи, а параллельные job-ы получают рассинхрон между узлами кластера и ложные ошибки линкера.
3. Неконтролируемая полоса rsync и отсутствие очереди. Несколько независимых rsync без flock и без снижения --bwlimit выедают uplink, рост очереди к MDS увеличивает задержку stat, а локальный APFS том на 1 ТБ быстрее приближается к жёсткому водяному знаку записи.
Матрица решений: кеш клиента, MDS, rsync и водяные знаки 1 ТБ / 2 ТБ
| Паттерн нагрузки | Клиентский кеш CephFS | mds_session_timeout | rsync политика | Водяные знаки 1 ТБ / 2 ТБ |
|---|---|---|---|---|
| Частые мелкие записи DerivedData | client_cache_size 512 МиБ, сброс после promote | Не ниже трёхкратного p95 rsync | Одна сессия, --bwlimit 45000, ionice idle | жёлтый 0,72 ТБ / 1,44 ТБ, красный 0,93 ТБ / 1,86 ТБ, стоп 0,97 ТБ / 1,94 ТБ |
| Толстые tarball между регионами | client_cache_size 1024 МиБ, без агрессивного readdir кеша | p95 rsync плюс час запаса | Две сессии максимум, backoff при ошибках сети | принудительная очистка локального кеша при 0,82 ТБ / 1,62 ТБ |
| Несколько проектов на одном префиксе | Минимальный кеш, строгий TTL dentry | Согласовать с длиной merge окна | Очередь flock на каталог, снижение bwlimit при load выше четырёх | Без квоты per-tenant риск раньше 0,74 ТБ / 1,48 ТБ |
Исполняемые примеры: размер кеша клиента и rsync с полосой
Фрагмент ceph.conf фиксирует верх кеша. Согласуйте с админом Ceph и политикой тенанта clustervps.
[client] client_cache_size = 1073741824 client_oc_max_dirty = 100 mds_session_timeout = 180
rsync с --bwlimit в килобайтах в секунду; измерьте p95 длительности до фиксации mds_session_timeout.
ionice -c 3 nice -n 10 rsync -aH --delete --partial \ --bwlimit=45000 /local/build/out/ /mnt/cephfs/ci/prefix/out/
Второй канал между регионами — зеркальная команда с тем же bwlimit и отдельным логом до снятия flock.
Build lock для нескольких проектов на общем префиксе
Два репозитория на одном префиксе: подкаталоги и flock /mnt/cephfs/ci/global.lock до rsync. Паттерн Nomad и Xcode — в статье про Nomad affinity и build lock.
Шесть шагов внедрения на кластере Mac mini M4
- Эталонный префикс и квота per tenant. Разведите каталоги по ACL, чтобы водяные знаки APFS отражали реальное потребление узла.
- Метрики p95 rsync. Прогоните полный набор с bwlimit, затем mds_session_timeout не ниже трёхкратного p95.
- client_cache_size и рестарт клиента. После ceph.conf перемонтируйте FUSE или kernel client и проверьте ceph config show.
- ionice и очередь в launchd. Запретите второй rsync без успешного первого, логируйте коды выхода.
- Водяные знаки и очистка. На жёлтом пороге чистите DerivedData и сжимайте параллелизм тестов; на красном блокируйте новые rsync.
- Учение с обрывом линка. Проверьте восстановление сессии MDS и что promote не публикует частичное дерево без снятия lock.
Цифры для регламентов и постмортемов
- Три параллельных тяжёлых rsync на один uplink считаются нештатными для узла с диском 1 ТБ; для 2 ТБ допускается третья сессия только при load average ниже двух и свободном остатке выше пятисот гигабайт.
- Жёлтый водяной знак для тома 1 ТБ фиксируйте на доле 0,72 от номинала, для 2 ТБ на 1,44 ТБ, чтобы оставить запас под снапшоты APFS, логи агента и временные файлы линкера Swift.
- client_cache_size один гигабайт является разумным стартом для толстых артефактов; для чисто метаданных нагрузок снижайте до 512 мегабайт и уменьшайте client_oc_max_dirty, чтобы не раздувать грязные страницы.
- Контрольный интервал мониторинга по занятости MDS и задержке stat не реже одной минуты в рабочее окно rsync, иначе оператор заметит деградацию позже, чем канареечный узел Mac mini M4.
Схемы rsync без CephFS — в матрице артефактов; NFS — в разборе NFS merge.
FAQ: устаревшие метаданные после promote
При расхождении размера файла после rsync проверьте клиентский кеш и контрольное чтение inode с соседнего узла. Не открывайте параллельный promote без flock. Доступ и сеть — в справочном центре clustervps.
Добавьте узлы Mac mini M4 или диск 2 ТБ под CephFS и rsync
Оформите публичную аренду дополнительных физических Mac или перейдите на тариф с большим томом, чтобы удерживать жёлтые водяные знаки без остановки CI; тарифы и лимиты описаны на отдельной странице, а сценарии подключения — в справочном центре.