Page 514 - 《软件学报》2024年第4期
P. 514
2092 软件学报 2024 年第 35 卷第 4 期
sys tlsf tc je hd tbb sn mi tlsfcc hslab wfslab
200
150
执行时间 (按照 wfslab 归一化) (%) 100 0
50
−50
−100
cfrac barnes espresso redis cxqueue larson lean glibc-simple
sys tlsf tc je hd tbb sn mi tlsfcc hslab wfslab
200
150
执行时间 (按照 wfslab 归一化) (%) 100 0
50
−50
−100
xmalloc-test cscratch rptest sh6benchsh8bench mstress alloc-test glibc-thread
图 5 x86/64 Ryzen 平台运行基准测试的执行时间
sys tlsf tc je hd tbb sn mi tlsfcc hslab wfslab
200
150
执行时间 (按照 wfslab 归一化) (%) 100 0
50
−50
−100
cfrac barnes espresso redis cxqueue larson lean glibc-simple
sys tlsf tc je hd tbb sn mi tlsfcc hslab wfslab
200
(按照 wfslab 归一化) (%) 0
150
执行时间 100
50
−50
−100
xmalloc-testcscratch rptest sh6benchsh8bench mstress alloc-test glibc-thread
图 6 aarch64 Snapdragon 平台运行基准测试的执行时间
● 问题 4: 对比 wfslab 分配器与通用内存分配器, 说明通过对分配器层级函数和策略函数的系统设计与定制
能否减少内存请求延迟.
● 问题 5: 通过为 tlsfcc, hslab, wfslab 增加内存漏洞缓解措施的附加层, 进一步说明榫卯框架的组合性以及低
组合开销.
● 关于问题 1 的分析. 榫卯框架依赖 C 宏预处理器的元编程特性, 通过生成中间函数的方式完成层级函数的
复合, 但该方式可能会造成额外的函数调用过程. 函数调用过程中的 prologue 和 epilogue 步骤通常包含多组产生
访存操作的栈操作指令. 对于频繁调用的内存请求接口而言, 额外的操作如访存或者条件判断都有可能会造成明
显的性能下降. 如 supermalloc 与 snmalloc 通过消除大小阶映射函数中的条件分支就能显著改善单线程瓶颈. 不
过, 现代 C 编译器优化通常可以将函数调用过程展开并消除不必要的函数调用与重复条件判断. 根据表 4 中的实
验结果, 比较基于榫卯框架实现的 wfslab, 手动编码实现的 wfslabm 以及额外插入 fake 附加层的 wfslabfl 可以得