Материал проходит вычитку — возможны неточности.
Урок 20 из 118

Фазы GC

Паузы «Полки» в метриках были доли миллисекунды, но просадки пропускной способности под нагрузкой никуда не делись. Сергей разложил цикл сборки на фазы — и Миша увидел, почему короткие паузы не означают бесплатный GC.

Главная мысль

цикл GC — четыре фазы: две короткие STW-паузы по краям, конкурентная маркировка в середине и ленивый sweep; паузы субмиллисекундные, но CPU GC тратится во время циклов сборки, а не только в паузах.

Четыре фазы

  1. Sweep termination — STW-пауза: дочистить spans, оставшиеся от ленивой уборки прошлого цикла, включить write barrier и подготовить корни к маркировке.
  2. Mark — основная фаза, идёт конкурентно, без остановки. Программа работает, а фоновые горутины сборщика помечают достижимые объекты. Плюс mark assist: горутины, которые активно аллоцируют, помогают маркировать, иначе они убегут далеко вперёд и куча будет расти всю mark-фазу.
  3. Mark termination — снова короткая STW-пауза: доразобрать остаток серой очереди, выключить write barrier, посчитать статистику.
  4. Sweep — подметание белых объектов. Тоже конкурентное и ленивое: spans разбираются по мере того, как аллокатору нужна память, а не все сразу. Возврат страниц ОС — отдельная забота scavenger'а.

Что дают короткие паузы

Две STW-паузы обычно субмиллисекундные. Это не жёсткая гарантия спецификации, а конструктивная цель и поведение стандартной реализации: Go проектировался под низкие паузы, и на практике типичная суммарная остановка — доли миллисекунды.

Но GC не бесплатен

«Короткие паузы» не означают «GC бесплатен». Конкурентная маркировка ест CPU наравне с твоим кодом, а mark assist отбирает время у аллоцирующих горутин. Под нагрузкой сборка ощущается как просадка пропускной способности, даже если пауз почти нет.

В следующем уроке

Вы узнаете:

  • почему аллоцирующие горутины помогают маркировать
  • как scavenger возвращает память ОС
Задание · вопросы

Проверьте себя

Вопрос 1 из 3

Каков порядок четырёх фаз цикла GC?

Вопрос 2 из 3

Короткие паузы означают бесплатный GC?

Вопрос 3 из 3

Что делает mark assist?

Итоги

Фазы: STW — конкурентный mark — STW — ленивый sweep. Паузы субмиллисекундные; цена GC — расход CPU во время циклов сборки, а не паузы.

Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки