Фазы GC
Паузы «Полки» в метриках были доли миллисекунды, но просадки пропускной способности под нагрузкой никуда не делись. Сергей разложил цикл сборки на фазы — и Миша увидел, почему короткие паузы не означают бесплатный GC.
цикл GC — четыре фазы: две короткие STW-паузы по краям, конкурентная маркировка в середине и ленивый sweep; паузы субмиллисекундные, но CPU GC тратится во время циклов сборки, а не только в паузах.
Четыре фазы
- Sweep termination — STW-пауза: дочистить spans, оставшиеся от ленивой уборки прошлого цикла, включить write barrier и подготовить корни к маркировке.
- Mark — основная фаза, идёт конкурентно, без остановки. Программа работает, а фоновые горутины сборщика помечают достижимые объекты. Плюс mark assist: горутины, которые активно аллоцируют, помогают маркировать, иначе они убегут далеко вперёд и куча будет расти всю mark-фазу.
- Mark termination — снова короткая STW-пауза: доразобрать остаток серой очереди, выключить write barrier, посчитать статистику.
- Sweep — подметание белых объектов. Тоже конкурентное и ленивое: spans разбираются по мере того, как аллокатору нужна память, а не все сразу. Возврат страниц ОС — отдельная забота scavenger'а.
Что дают короткие паузы
Две STW-паузы обычно субмиллисекундные. Это не жёсткая гарантия спецификации, а конструктивная цель и поведение стандартной реализации: Go проектировался под низкие паузы, и на практике типичная суммарная остановка — доли миллисекунды.
Но GC не бесплатен
«Короткие паузы» не означают «GC бесплатен». Конкурентная маркировка ест CPU наравне с твоим кодом, а mark assist отбирает время у аллоцирующих горутин. Под нагрузкой сборка ощущается как просадка пропускной способности, даже если пауз почти нет.
Вы узнаете:
- почему аллоцирующие горутины помогают маркировать
- как scavenger возвращает память ОС
Проверьте себя
Каков порядок четырёх фаз цикла GC?
Короткие паузы означают бесплатный GC?
Что делает mark assist?
правильных ответов
Фазы: STW — конкурентный mark — STW — ленивый sweep. Паузы субмиллисекундные; цена GC — расход CPU во время циклов сборки, а не паузы.
10 000 ₽ · 60 минут · онлайн