Skip to content

[FEAT] 帧分配器多核优化 #214

@ZIYAN137

Description

@ZIYAN137

🌟 动机与目标

当前帧分配器使用全局锁保护,在多核环境下会成为性能瓶颈。需要优化以减少锁竞争。

当前状态:

  • 全局帧分配器,单一锁保护
  • 每次分配/释放都需要获取全局锁

目标:

  • 减少帧分配时的锁竞争
  • 保持分配器正确性
  • 提高多核并发性能

💡 建议的解决方案

核心思路

  1. Per-CPU 帧缓存: 每个 CPU 维护本地帧缓存池,减少全局锁竞争
  2. 批量分配: 缓存为空时从全局分配器批量获取,缓存满时批量归还
  3. 内存压力回收: OOM 时回收各 CPU 缓存中的空闲帧

实现要点

  • 实现 FrameCache 结构存储本地帧列表
  • 修改 alloc_frame() 优先从本地缓存分配
  • 修改 dealloc_frame() 优先归还到本地缓存
  • 实现 shrink_frame_caches() 在内存压力时回收缓存

📋 实现任务

  • 实现 FrameCache 结构
  • 创建 Per-CPU 缓存实例
  • 修改 alloc_frame() 使用缓存
  • 修改 dealloc_frame() 使用缓存
  • 实现批量分配 alloc_frames()
  • 实现缓存回收 shrink_frame_caches()
  • 在 OOM 时尝试回收缓存
  • 性能测试和调优
  • 确定合适的缓存大小

替代方案 (可选)

方案 B: 分区帧池

  • 将物理内存分成若干区域,每个 CPU 优先从本地区域分配
  • 适合 NUMA 架构,减少跨节点访问
  • 需要更复杂的内存管理策略

额外的上下文

相关文件:

  • os/src/mm/frame_allocator/mod.rs
  • os/src/mm/frame_allocator/buddy_allocator.rs (如有)

依赖于:

被依赖于: 无

参考:

Metadata

Metadata

Assignees

Labels

P-High优先级较高,应尽快处理。T-Feature一个新的功能请求或实现。
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions