Правильная работа с динамической памятью в...

Post on 12-Jul-2015

1.394 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Пугачев Максим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

Итоги

Спасибо!

Пугачев Максим

IPONWEB

E-mail: sieqer@gmail.com

Skype: pugachev.maxim

top related