前言
前面介绍了BlueStore的BitMap分配器,我们知道新版本的Bitmap分配器的优势在于使用连续的内存空间从而尽可能更多的命中CPU Cache以提高分配器性能。在这里我们了解一下基于区间树的Stupid分配器(类似于Linux Buddy内存管理算法),并对比分析一下其优劣。
目录
伙伴算法
Linux内存管理算法为了能够快速响应请求,尽可能的提高内存利用率同时减少外部内存碎片,引入了伙伴系统算法Buddy-System。该算法将所有的空闲页分组为11个链表,每个链表分别包含1、2、4、8、16、32、64、128、256、512、1024个连续的页框块,每个页框块的第一个内存页的物理地址是该块大小的整数倍。伙伴的特点是:两个块大小相同、两个块地址连续、第一块的第一个页框的物理地址是两个块总大小的整数倍(同属于一个大块,第1块和第2块是伙伴,第3块和第4块是伙伴,但是第2块和第3块不是伙伴)。具体内存分配和内存释放可自行Google。
优点:
- 较好的解决外部碎片问题,不能完全解决。
- 针对大内存分配设计,可以快速的分配连续的内存。
缺点:
- 合并的要求过于严格,只能是满足伙伴关系的块才可以合并。
- 一块

本文对比分析了基于区间树的Stupid分配器与Bitmap分配器在内存管理上的优劣,探讨了Stupid分配器如何通过Extent进行空间管理,以及Bitmap分配器如何优化CPUCache利用,解决伪空间碎片问题。
最低0.47元/天 解锁文章
1217

被折叠的 条评论
为什么被折叠?



