Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Леонид Могучев — Устройство сборщика мусора и к...

Ozon Tech
December 12, 2022

Леонид Могучев — Устройство сборщика мусора и как мы делаем оптимизации в сервисах Ozon

Ozon Tech

December 12, 2022
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. Ozon Tech 2022 Устройство сборщика мусора и как мы делаем

    оптимизации в сервисах Ozon Леонид Могучев руководитель группы «Тарификация»
  2. Ozon Tech 2022 Леонид Могучев руководитель группы «Тарификация» • ~2

    года работаю в Ozon • Преподаю в Route256 • Сервисы тарификации - расчет сроков и способов доставок • Пик нагрузки на сервисы тарификации в сезон 274k rps • Стабильно держим на стресс-тестах до 320k rps
  3. Ozon Tech 2022 Содержание Основной принцип работы сборщика мусора в

    Go Примеры оптимизаций Больше материалов • Алгоритм • Этапы работы • Особенности сканирования объектов
  4. Виды сборщика мусора Ozon Tech 2022 Виды сборщика мусора Очистка

    в конце: aka no GC (Apache) Сборщик подсчёта ссылок (Objective-C) Сборщик Mark-and-Sweep (Go) Сборщик Mark-Compact (JVM) Копирующий сборщик Подробнее
  5. Сборщик мусора в Go Ozon Tech 2022 Сборщик мусора в

    Go – Tri-color Mark-and-Sweep On-the-Fly Garbage Collection: An Exercise in Cooperation Edsger W. Dijkstra, Leslie Lamport, A. J. Martin, C. S. Scholten, and E. F. M. Steffens. 1978.
  6. Сборщик мусора в Go Ozon Tech 2022 Сборщик мусора в

    Go – Tri-color Mark-and-Sweep Трехцветный алгоритм Mark-and-Sweep Три группы: Белые Серые Черные не исследованные объекты ожидающие исследования объекты исследованные объекты (точно нам нужны)
  7. Сборщик мусора в Go Ozon Tech 2022 Трехцветный алгоритм Mark-and-Sweep

    Трехцветный алгоритм Mark-and-Sweep • Все объекты изначально белые. • Обходим корневые объекты и помечаем их серым цветом. • Выбираем серый объект из очереди и сканируем на наличие указателей • Найденные объекты помечаются серым, а исходный – черным • Повторяем предыдущие два шага до тех пор пока очередь серых объектов не пуста • Белые являются мусором
  8. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  9. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  10. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  11. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  12. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  13. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  14. Сборщик мусора в Go Ozon Tech 2022 STW(Stop the world)

    Mark-and-Sweep Сборщик мусора в Go до версии 1.5
  15. Сборщик мусора в Go Ozon Tech 2022 Бенчмарки работы сборщика

    мусора в Go Паузы сборщика мусора в зависимости от размера кучи
  16. Сборщик мусора в Go Ozon Tech 2022 Бенчмарки работы сборщика

    мусора в Go Паузы сборщика мусора в зависимости от размера кучи
  17. Сборщик мусора в Go Ozon Tech 2022 Бенчмарки работы сборщика

    мусора в Go Паузы сборщика мусора в зависимости от размера кучи
  18. Сборщик мусора в Go Ozon Tech 2022 Параллельный Mark-and-Sweep Инициатор

    сборки мусора (GC pacing) GC Pacer (инициатор) преследует две основные цели: Цель 1 - поддерживать целевое использование ЦП (уложиться в 0,25*GOMAXPROCS) Цель 2 - получить размер живой кучи как можно ближе к целевому значению (GOGC) Подробнее
  19. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора Исходные файлы кода mgc.go – исходный код сборщика мусора mgcmark.go – разметка и сканирование mgcsweep.go – очистка mgcwork.go – абстракция worker pool для разметки mgcstack.go – трассировка стека mgcpacer.go – реализация Pacer контроллера Go 1.19
  20. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора Где вызывается сборка мосуора? runtime.GC() runtime/mgc.go:445 mallocgc runtime/malloc.go:1138 forcegchelper runtime/proc.go:308 Принудительный период запуска GC: 2 минуты runtime/proc.go:5117 Go 1.19
  21. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 1. Фаза завершения очистки (sweep termination) GC в состоянии _GCoff (GC не работает; очистка в фоне, write barrier выключен) • Дожидаемся конца очистки объектов runtime/mgc.go:602 • STOP THE WORLD (Остановка всего приложения) runtime/mgc.go:631 • Запуск фоновых рабочих разметки runtime/mgc.go:645 • Сброс всех флагов и состояний маркировки runtime/mgc.go:647 • Завершаем очистку ресурсов - Завершаем процессы фоновой очистки runtime/mgc.go:668 - Очищаем пулы (sync.Pool) runtime/mgc.go:673 Go 1.19
  22. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase) GC в состоянии _GCmark (GC: разметка, allocate black, write barrier ENABLED) Go 1.19 • Подготовка к маркировке runtime/mgc.go:707 • Помечаем все активные блоки “крошечных” аллокаций в черный untime/mgc.go:715 • Включаем write barrier runtime/mgc.go:716 • START THE WORLD runtime/mgc.go:743 • Запуск сканирования глобальных объектов и стека • Трехцветный алгоритм разметки
  23. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  24. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  25. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  26. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  27. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  28. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  29. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  30. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  31. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 2. Фаза разметки (mark phase). Особенности сканирования heap. Go 1.19
  32. Сборщик мусора в Go Ozon Tech 2022 3. Фаза завершения

    разметки (mark termination phase) Go 1.19 Этапы работы сборщика мусора GC в состоянии _GСMarktermination (GC: разметка, allocate black, write barrier ENABLED) • STOP THE WORLD runtime/mgc.go:855 • Перевод в состояние _GСMarktermination runtime/mgc.go:925 • Дожидаемся завершения обработки последних задач • Очистка кешей и завершение воркеров
  33. Сборщик мусора в Go Ozon Tech 2022 Этапы работы сборщика

    мусора 4. Фаза очистки (sweep phase) Go 1.19 GC в состоянии _GСMarktermination (GC: разметка, allocate black, write barrier ENABLED) • Перевод в состояние _GСMarktermination в _GCoff runtime/mgc.go:971 • START THE WORLD runtime/mgc.go:1059 • Выполнение sweep в фоне
  34. Сборщик мусора в Go Ozon Tech 2022 Go 1.19 Основные

    причины задержек в приложении • Кража мощности у приложения • Величина задержки STOP THE WORLD • Издержки на выполнение очистки в фоне
  35. Ozon Tech 2022 Избежание копирований памяти при приведении типов (unsafe

    cast) Уменьшение количество выделений памяти Оптимизации
  36. Ozon Tech 2022 Избежание копирований памяти при приведении типов (unsafe

    cast) Уменьшение количество выделений памяти Оптимизации
  37. Ozon Tech 2022 Избежание копирований памяти при приведении типов (unsafe

    cast) Уменьшение количество выделений памяти Оптимизации
  38. Ozon Tech 2022 Оптимизации сканирования памяти (выравнивание структур) Оптимизации хранения

    данных Оптимизации aligncheck — https://gitlab.com/opennota/check Подробнее
  39. Ozon Tech 2022 Оптимизации сканирования памяти (выравнивание структур) Оптимизации хранения

    данных Оптимизации maligned — https://github.com/mdempsky/maligned Подробнее
  40. Ozon Tech 2022 Откладываем вызов сборщика мусора (балласт) Как облегчить

    жизнь GC? Оптимизации Подробнее про балласт
  41. Ozon Tech 2022 Откладываем вызов сборщика мусора (балласт) Поэкспериментировать с

    GOGC (по умолчанию 100) Как облегчить жизнь GC? Оптимизации Утилита GOGCTuner от команды uber Large-Scale, Semi-Automated Go Garbage Collection Tuning at Uber
  42. Ozon Tech 2022 Откладываем вызов сборщика мусора (soft memory limit

    + GOGC) Go 1.19 soft memory limit Как облегчить жизнь GC? Оптимизации
  43. Ozon Tech 2022 Откладываем вызов сборщика мусора (soft memory limit

    + GOGC) Как облегчить жизнь GC? Оптимизации Go 1.19 soft memory limit
  44. Ozon Tech 2022 Откладываем вызов сборщика мусора (soft memory limit

    + GOGC) Как облегчить жизнь GC? Оптимизации Go 1.19 soft memory limit
  45. Ozon Tech 2022 Откладываем вызов сборщика мусора (soft memory limit

    + GOGC) Как облегчить жизнь GC? Оптимизации Go 1.19 soft memory limit