Использование tcmalloc/jemalloc с менеджером пользовательского пула памяти

Я хотел бы использовать высокопроизводительный распределитель общего назначения, такой как jemalloc/tcmalloc, с пулом памяти. Есть ли руководство для этого? Я не хочу использовать jemalloc/tcmalloc в качестве замены malloc.

У меня есть пул памяти, который использует libarena и выделяет большую область памяти (2 ГБ). Я хочу создать пул объектов фиксированного размера, например gslice, на этой арене, скажем, 1 ГБ. (например, распределитель плит Bonwick) и хотите использовать остальную часть памяти для выделения памяти общего назначения переменного размера. Я хотел бы, чтобы jemalloc/tcmalloc использовали эту область памяти. Это возможно? Любые идеи относительно того, как я могу действовать? Если есть альтернативная библиотека, я тоже хотел бы услышать о ней.


person John Knight    schedule 05.06.2013    source источник
comment
Удачи в получении ответа на этот вопрос, я также очень хотел получить ответ на этот вопрос, см. мой stackoverflow.com/questions/23341587/ собственный вопрос.   -  person Vality    schedule 04.08.2014
comment
Я написал распределитель специально для нашего приложения. Одной вещью, которая оказалась действительно отличной идеей, была концепция сокращения всех возможных распределений до небольшого числа квантовых размеров. Ниже 4k = 8 байт, 4k..16k = 16 байт... до 64 Мб макс. В итоге у меня было всего около 1000 разных размеров вплоть до 64 МБ. Неиспользуемый объем оперативной памяти был низким, поскольку размер неиспользуемого пространства зависел от размера выделения. Это позволило перерабатывать сваи для каждого размера. Free был просто толчком, а alloc — попом, если только стопка не была пуста для такого размера.   -  person johnnycrash    schedule 11.03.2015
comment
У меня нет для вас ответа, но вы можете найти полезную информацию в этой ветке jemalloc о выделении памяти в качестве дополнительных арен для пользовательских распределителей здесь: canonware.com/pipermail/jemalloc-discuss/2015-January/   -  person acanaday    schedule 12.04.2015


Ответы (1)


Это старый вопрос, но, наконец, есть положительный ответ, по крайней мере, в том, что касается jemalloc. Начиная с jemalloc версии 4.0.0, вы можете использовать mallctl для установки ловушек, где фрагментированные распределения получают память с помощью интерфейса arena.<i>.chunk_hooks. Эти хуки подробно описаны на справочной странице jemalloc., включая ряд перекрестных ссылок.

Я не знаю подобного интерфейса в tcmalloc; Я им не пользуюсь.

Недавно я ответил на похожий вопрос; там тоже может быть полезная информация.

person dho    schedule 10.03.2016