Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Пугачев Максим     IPONWEB    Правильная работа с  динамической памятью ввысоконагруженных проектах
О себеSenior Software Engineer @ IPONWEB            u-Server team
О докладе•   Обзор существующих алгоритмов•   Как выбрать?•   Многопоточность•   Подводные камни и best-practices
С чего все началось250200150                              glibc100                           tcmalloc50 0      1 thread   ...
Что такое memory allocator?
Цели аллокатора
Цели аллокатора•   Совместимость•   Кроссплатформенность•   Минимизация памяти•   Максимизация производительности•   Касто...
Идеальный аллокатор?
Средний вариант
Системный вызов brk()
Управляющая информация
Управляющая информация
Наивная версия аллокатора
Memory chunk
Алгоритм• Выделить 1GB при помощи brk()• Разбить на массивы чанков (8, 16, 32, …)• Округлять до ближайшего чанка и отдават...
Memory chunk lists
Алгоритм• Выделить 1GB при помощи brk()• Разбить на списки чанков• Округлять до ближайшего чанка и отдавать  указатель на ...
Megachunk
Алгоритм• Выделить 1GB при помощи brk()• Округлить до ближайшего чанка и отдавать  указатель на него• Если список пуст, от...
Склеивание
Алгоритм• Если предыдущий элемент в списке не  используется, склеиваем• Вставляем в новый список или в мегачанк
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
Итоги
Спасибо!    Пугачев Максим       IPONWEBE-mail: sieqer@gmail.com Skype: pugachev.maxim
Upcoming SlideShare
Loading in …5
×

Правильная работа с динамической памятью в высоконагруженных проектах (Максим Пугачев)

1,810 views

Published on

  • Be the first to comment

  • Be the first to like this

Правильная работа с динамической памятью в высоконагруженных проектах (Максим Пугачев)

  1. 1. Пугачев Максим IPONWEB Правильная работа с динамической памятью ввысоконагруженных проектах
  2. 2. О себеSenior Software Engineer @ IPONWEB u-Server team
  3. 3. О докладе• Обзор существующих алгоритмов• Как выбрать?• Многопоточность• Подводные камни и best-practices
  4. 4. С чего все началось250200150 glibc100 tcmalloc50 0 1 thread 5 threads
  5. 5. Что такое memory allocator?
  6. 6. Цели аллокатора
  7. 7. Цели аллокатора• Совместимость• Кроссплатформенность• Минимизация памяти• Максимизация производительности• Кастомизация• Обработка ошибок
  8. 8. Идеальный аллокатор?
  9. 9. Средний вариант
  10. 10. Системный вызов brk()
  11. 11. Управляющая информация
  12. 12. Управляющая информация
  13. 13. Наивная версия аллокатора
  14. 14. Memory chunk
  15. 15. Алгоритм• Выделить 1GB при помощи brk()• Разбить на массивы чанков (8, 16, 32, …)• Округлять до ближайшего чанка и отдавать указатель на него
  16. 16. Memory chunk lists
  17. 17. Алгоритм• Выделить 1GB при помощи brk()• Разбить на списки чанков• Округлять до ближайшего чанка и отдавать указатель на него• Если список пуст, то брать из соседнего
  18. 18. Megachunk
  19. 19. Алгоритм• Выделить 1GB при помощи brk()• Округлить до ближайшего чанка и отдавать указатель на него• Если список пуст, отрезать от мегачанка, сделать список и отдать 1 элемент
  20. 20. Склеивание
  21. 21. Алгоритм• Если предыдущий элемент в списке не используется, склеиваем• Вставляем в новый список или в мегачанк
  22. 22. dlmalloc• Doug Lea`s malloc (dlmalloc)• ptmalloc (per-thread arenas malloc by Wolfram Gloger) - основан на dlmalloc
  23. 23. Многопоточность?
  24. 24. Суммируем проблемы
  25. 25. Суммируем проблемы• “Средний” вариант• Overhead служебной информации• Внутренняя фрагментация• Многопоточность
  26. 26. Как обойти проблемы?
  27. 27. tcmalloc• tcmalloc – thread-caching malloc by Google• В 4 раза быстрее ptmalloc (теоретически)
  28. 28. Small objects
  29. 29. Large objects
  30. 30. Page heap
  31. 31. Чудес не бывает
  32. 32. Выделенная память
  33. 33. Приятные вещи
  34. 34. jemalloc• jemalloc – Jason Eavan`s malloc• Стандартный аллокатор в FreeBSD и NetBSD
  35. 35. Отличия• Арены• Объекты – Small (8..3840 байт) – Large (4..4072 KB) – Huge (> 4 MB)• Red-black tree
  36. 36. jemalloc by Facebook• Local caches• Mutexes• Red-black tree• Heap profiling
  37. 37. Итоги
  38. 38. Спасибо! Пугачев Максим IPONWEBE-mail: sieqer@gmail.com Skype: pugachev.maxim

×