🎯 目标
实现一个内核级别的 Slab 分配器(可以基于经典的 SLAB、更现代的 SLUB 或自定义设计),以取代或增强现有的小对象内存分配机制。
主要目的:
- 减少内部碎片: 针对内核中频繁创建和销毁的特定大小对象(如进程控制块、文件结构等)提供固定大小的分配。
- 提高分配效率: 通过对象缓存,避免重复的初始化和销毁开销。
- 优化硬件缓存(Cache)利用: 尝试实现缓存着色(Cache Coloring)或类似机制,以提高 CPU 缓存命中率。
✨ 详细描述
当前的内存分配机制在处理大量固定大小的小对象时,存在性能瓶颈和碎片问题。需要实现一个 Slab 分配器,它将位于页分配器(Buddy Allocator)之上,并提供以下核心功能:
- 对象缓存 (Cache) 管理: 允许创建和销毁针对特定数据结构(如 struct task_struct)的缓存。
- Slab 结构: 管理内存块(Slabs),每个 Slab 由一个或多个物理页组成,并包含固定大小的对象。Slab 应能跟踪其状态(Full, Partial, Empty)。
- 对象分配/释放 API: 提供类似 kmem_cache_alloc() 和 kmem_cache_free() 的接口供内核其他部分使用。
- 构造函数/析构函数支持: 允许在创建 Slab 或对象时调用可选的构造函数(Constructor)进行初始化。
🔨 待办事项 (Tasks)
🚧 依赖/前置条件现有的**页分配器(Buddy Allocator)**已稳定工作,并能提供页级别的内存块。确定 Slab 分配器的命名约定(例如:SLAB, SLUB, 或自定义名称)。明确目标架构的缓存行大小。
🎯 目标
实现一个内核级别的 Slab 分配器(可以基于经典的 SLAB、更现代的 SLUB 或自定义设计),以取代或增强现有的小对象内存分配机制。
主要目的:
✨ 详细描述
当前的内存分配机制在处理大量固定大小的小对象时,存在性能瓶颈和碎片问题。需要实现一个 Slab 分配器,它将位于页分配器(Buddy Allocator)之上,并提供以下核心功能:
🔨 待办事项 (Tasks)
🚧 依赖/前置条件现有的**页分配器(Buddy Allocator)**已稳定工作,并能提供页级别的内存块。确定 Slab 分配器的命名约定(例如:SLAB, SLUB, 或自定义名称)。明确目标架构的缓存行大小。