Linux内核Slab分配器详解
1. 理解内核Slab分配器
Slab分配器或Slab缓存位于页分配器之上。它的存在主要基于两个目的:
- 对象缓存 :作为常见“对象”的缓存,这些对象是Linux内核中频繁分配的数据结构。内核在启动时会预先分配大量对象到多个Slab缓存中,当内核代码或设备驱动需要这些对象的内存时,直接向Slab分配器请求。如果对象已缓存,分配几乎是即时的,释放时也是如此。例如,网络和块I/O子系统的关键代码路径对性能要求高,网络栈的套接字缓冲区 sk_buff 、块层的 biovec 以及核心的 task_struct 数据结构等都会被内核自动缓存。此外,文件系统元数据结构(如 inode 和 dentry 结构)、内存描述符 struct mm_struct 等也会预先分配到Slab缓存中。
- 减少页分配器的高浪费(内部碎片) :通过提供小的、大小合适的缓存,这些缓存通常是页的片段,来减少页分配器的内部碎片。
2. 查看Slab缓存的当前状态
可以通过多种方式查看Slab缓存的当前状态,如通过 proc 和 sysfs 文件系统查看原始视图,或使用各种前端实用工具(如 smem 、 vmstat 、 slabtop 、
超级会员免费看
订阅专栏 解锁全文
4

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



