深入理解与使用内核 slab 分配器
1. 引言
在了解了页面分配器的细节、其 API 及使用方法后,接下来探讨 slab 分配器。slab 分配器或 slab 缓存位于页面分配器之上,其存在主要基于两个目的:对象缓存和减少页面分配器的内部碎片。
2. slab 分配器的设计理念
- 对象缓存
- 起源 :很久以前,SunOS 开发者 Jeff Bonwick 发现操作系统中某些内核对象(通常是数据结构)频繁分配和释放,于是提出预分配这些对象到缓存的想法,这逐渐演变成了 slab 缓存。
- Linux 中的应用 :在 Linux 操作系统中,内核在启动时会将大量对象预分配到多个 slab 缓存中,以提高性能。当内核核心代码或设备驱动需要这些对象的内存时,可直接向 slab 分配器请求。若对象已缓存,分配几乎是即时的。
- 示例 :网络和块 I/O 子系统的关键代码路径对性能要求高,因此网络栈的套接字缓冲区
sk_buff、块层的biovec以及核心的task_struct等数据结构会被内核自动缓存到 slab 缓存中。同样,文件系统元数据结构(如inode和dentry结构)、内存描述符struct mm_struct等也会被预分配到 sla
订阅专栏 解锁全文
43

被折叠的 条评论
为什么被折叠?



