Page 498 - 《软件学报》2024年第4期
P. 498
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software,2024,35(4):2076−2098 [doi: 10.13328/j.cnki.jos.006830] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
*
榫卯: 一种可组合的定制化内存分配框架
欧阳湘臻, 朱怡安, 史先琛
(西北工业大学 计算机学院, 陕西 西安 710072)
通信作者: 欧阳湘臻, E-mail: matrixsukhoi@mail.nwpu.edu.cn
摘 要: 动态内存分配器是现代应用程序重要组成部分, 它负责管理空闲内存并处理用户内存请求. 现代通用动态
内存分配器能够提供较为平衡的性能与内存利用率, 但考虑到不同应用场景的内存使用情况和优化目标不同, 使
用通用内存分配器并非最优解. 针对应用场景定制的专用内存分配器通常能够更好地满足系统需要, 然而编写专
用内存分配器较为费时, 也容易出错. 开发者通常使用内存分配框架搭建专用动态内存分配器. 然而, 现有的内存
分配框架存在抽象能力较差, 组合性与定制性不足的问题. 为此, 从函数式编程视角审视动态内存分配过程, 基于
函数可组合性提出了一种可组合的定制化动态内存分配器框架榫卯. 榫卯框架将系统内存分配抽象为多个互不耦
合的内存分配层级函数的组合, 这些层级函数能够扩展出策略槽, 以提供更高的定制性和组合性. 榫卯框架基于标
准 C 实现, 依赖 C 预处理器的元编程特性实现层级函数组合的零性能开销. 开发者能够通过组合与定制分配器的
层级函数, 快速构建出适合应用场景的内存分配器. 为了证明榫卯框架的有效性, 使用榫卯框架构建了 3 种不同的
内存分配器实例: tlsfcc, hslab 与 wfslab, 其中 tlsfcc 针对多核嵌入式应用场景, 通过替换同步策略优化并发吞吐率;
hslab 是核心感知的 slab 式分配器, 通过定制线程缓存优化在异构硬件的性能; wfslab 是低延迟的无等待/无锁分配
器. 为了评估这 3 种内存分配器实例, 通过运行基准测试对比现有内存分配器. 实验分别在 8 核 x86/64 平台和 8 核
异构 aarch64 嵌入式平台进行. 实验表明 tlsfcc 与原始 tlsf 分配器相比, 在上述两个平台上分别取得了平均 1.76 和
1.59 的加速比; 对比 hslab 与类似架构的 tcmalloc, 它在两个平台的平均执行时间仅为 tcmalloc 的 69.6% 和 85.0%;
wfslab 则取得了参与实验对比的内存分配器中最小的最差情况内存请求延迟, 其中包括目前最先进的无锁内存分
配器 mimalloc 和 snmalloc.
关键词: 内存分配; 阻塞式同步; 异构系统; 操作系统; 函数式编程
中图法分类号: TP316
中文引用格式: 欧阳湘臻, 朱怡安, 史先琛. 榫卯: 一种可组合的定制化内存分配框架. 软件学报, 2024, 35(4): 2076–2098. http://
www.jos.org.cn/1000-9825/6830.htm
英文引用格式: Ouyang XZ, Zhu YA, Shi XC. Mortise: Composable and Customizable Memory Allocator Framework. Ruan Jian Xue
Bao/Journal of Software, 2024, 35(4): 2076–2098 (in Chinese). http://www.jos.org.cn/1000-9825/6830.htm
Mortise: Composable and Customizable Memory Allocator Framework
OUYANG Xiang-Zhen, ZHU Yi-An, SHI Xian-Chen
(School of Computer Science, Northwestern Polytechnical University, Xi’an 710072, China)
Abstract: Dynamic memory allocators are fundamental components of modern applications. They manage free memory and handle user
memory requests. Modern general-purpose dynamic memory allocators ensure the balance of performance and memory footprint. However,
in view of different memory footprints and optimization goals in application scenarios, a general-purpose memory allocator is not the
optimal solution. Special-purpose memory allocators for specific application scenarios usually can better satisfy system requirements.
* 基金项目: 国家重点研发计划 (2021YFC2802503, 2020YFB1712201); 陕西省重点研发计划 (2021ZDLGY05-05)
收稿时间: 2022-04-17; 修改时间: 2022-08-02; 采用时间: 2022-11-01; jos 在线出版时间: 2023-06-28
CNKI 网络首发时间: 2023-06-29