🌟 动机与目标
当前帧分配器使用全局锁保护,在多核环境下会成为性能瓶颈。需要优化以减少锁竞争。
当前状态:
- 全局帧分配器,单一锁保护
- 每次分配/释放都需要获取全局锁
目标:
- 减少帧分配时的锁竞争
- 保持分配器正确性
- 提高多核并发性能
💡 建议的解决方案
核心思路
- Per-CPU 帧缓存: 每个 CPU 维护本地帧缓存池,减少全局锁竞争
- 批量分配: 缓存为空时从全局分配器批量获取,缓存满时批量归还
- 内存压力回收: OOM 时回收各 CPU 缓存中的空闲帧
实现要点
- 实现
FrameCache 结构存储本地帧列表
- 修改
alloc_frame() 优先从本地缓存分配
- 修改
dealloc_frame() 优先归还到本地缓存
- 实现
shrink_frame_caches() 在内存压力时回收缓存
📋 实现任务
替代方案 (可选)
方案 B: 分区帧池
- 将物理内存分成若干区域,每个 CPU 优先从本地区域分配
- 适合 NUMA 架构,减少跨节点访问
- 需要更复杂的内存管理策略
额外的上下文
相关文件:
os/src/mm/frame_allocator/mod.rs
os/src/mm/frame_allocator/buddy_allocator.rs (如有)
依赖于:
被依赖于: 无
参考:
🌟 动机与目标
当前帧分配器使用全局锁保护,在多核环境下会成为性能瓶颈。需要优化以减少锁竞争。
当前状态:
目标:
💡 建议的解决方案
核心思路
实现要点
FrameCache结构存储本地帧列表alloc_frame()优先从本地缓存分配dealloc_frame()优先归还到本地缓存shrink_frame_caches()在内存压力时回收缓存📋 实现任务
FrameCache结构alloc_frame()使用缓存dealloc_frame()使用缓存alloc_frames()shrink_frame_caches()替代方案 (可选)
方案 B: 分区帧池
额外的上下文
相关文件:
os/src/mm/frame_allocator/mod.rsos/src/mm/frame_allocator/buddy_allocator.rs(如有)依赖于:
被依赖于: 无
参考: