Upload
ontico
View
1.394
Download
4
Embed Size (px)
Citation preview
Пугачев МаксимIPONWEB
Правильная работа с динамической памятью в
высоконагруженных проектах
О себе
Senior Software Engineer @ IPONWEB
u-Server team
О докладе
• Обзор существующих алгоритмов
• Как выбрать?
• Многопоточность
• Подводные камни и best-practices
С чего все началось
0
50
100
150
200
250
1 thread 5 threads
glibc
tcmalloc
Что такое memory allocator?
Цели аллокатора
Цели аллокатора
• Совместимость
• Кроссплатформенность
• Минимизация памяти
• Максимизация производительности
• Кастомизация
• Обработка ошибок
Идеальный аллокатор?
Средний вариант
Системный вызов brk()
Управляющая информация
Управляющая информация
Наивная версия аллокатора
Memory chunk
Алгоритм
• Выделить 1GB при помощи brk()
• Разбить на массивы чанков (8, 16, 32, …)
• Округлять до ближайшего чанка и отдавать указатель на него
Memory chunk lists
Алгоритм
• Выделить 1GB при помощи brk()
• Разбить на списки чанков
• Округлять до ближайшего чанка и отдавать указатель на него
• Если список пуст, то брать из соседнего
Megachunk
Алгоритм
• Выделить 1GB при помощи brk()
• Округлить до ближайшего чанка и отдавать указатель на него
• Если список пуст, отрезать от мегачанка, сделать список и отдать 1 элемент
Склеивание
Алгоритм
• Если предыдущий элемент в списке не используется, склеиваем
• Вставляем в новый список или в мегачанк
dlmalloc
• Doug Lea`s malloc (dlmalloc)
• ptmalloc (per-thread arenas malloc by Wolfram Gloger) - основан на dlmalloc
Многопоточность?
Суммируем проблемы
Суммируем проблемы
• “Средний” вариант
• Overhead служебной информации
• Внутренняя фрагментация
• Многопоточность
Как обойти проблемы?
tcmalloc
• tcmalloc – thread-caching malloc by Google
• В 4 раза быстрее ptmalloc (теоретически)
Small objects
Large objects
Page heap
Чудес не бывает
Выделенная память
Приятные вещи
jemalloc
• jemalloc – Jason Eavan`s malloc
• Стандартный аллокатор в FreeBSD и NetBSD
Отличия
• Арены
• Объекты
– Small (8..3840 байт)
– Large (4..4072 KB)
– Huge (> 4 MB)
• Red-black tree
jemalloc by Facebook
• Local caches
• Mutexes
• Red-black tree
• Heap profiling
Итоги