管理器 ARM
1、Jemalloc 简介
Jemalloc是由Jason Evans在FreeBSD项目中引入的内存分配管理器,它的优势在于减少内存碎片和提升高并发场景下内存的分配效率。
Jemalloc中的基本概念和数据结构
size_class: 每个 size_class 代表 jemalloc 分配的内存大小,共有 NSIZES(232)个小类(如果用户申请的大小位于两个小类之间,会取较大的,比如申请14字节,位于8和16字节之间,按16字节分配),分为2大类:small_class和large_class
Base: 用于分配 jemalloc 元数据内存的结构,通常一个 base 大小为 2mb, 所有 base 组成一个链表。
bin: 管理正在使用中的 slab(即用于小内存分配的 extent) 的集合,每个 bin 对应一个 size_class
extent: 管理 jemalloc 内存块(即用于用户分配的内存)的结构,每一个内存块大小可以是 N*page_size(N >= 1)。
slab: 当 extent 用于分配 small_class 内存时,称其为 slab。一个 extent 可以被用来处理多个同一size_class 的内存申请。
extents: 管理 extent 的集合。
arena: 用于分配&回收 extent 的结构,每个用户线程会被绑定到一个 arena 上,默认每个逻辑 CPU 会有 4 个 arena 来减少锁的竞争,各个 arena 所管理的内存相互独立。
rtree: 全局唯一的存放每个 extent 信息的 Radix Tree
cache_bin: 每个线程独有的用于分配小内存的缓存
tcache: 每个线程独有的缓存(Thread Cache),大多数内存申请都可以在 tcache 中直接得到,从而避免加锁
tsd: Thread Specific Data,每个线程独有,用于存放与这个线程相关的结构
原作者:Mar
tin1983
更多回帖