Slab Merging 特性

该特性在条件允许的情况下可以实现将属性相近的 slab caches(即 struct kmem_cache)合并,以提高内存利用效率,减少内存碎片的产生。该特性最初独属于 SLUB 分配器(见补丁:81819f0fc828 (“SLUB core”) 的 G 小节),随后被拓展到了 SLAB 分配器:423c929cbbec (“mm/slab_common: commonize slab merge logic”) 。 然而从系统安全的角度,该特性带来一个问题:若由某子系统或模块创建的专用 slab cache 与通用的 slab caches(即 kmalloc() 使用的那些) …

SLUB 的类三级缓存结构

前言 本文基于 6.1 版本的 Linux 内核代码,阐述笔者对 SLUB 分配器原理的个人理解。本文的分析忽略以下内容: 所有 debug 相关特性(如 KASAN) 所有安全增强特性(如 CONFIG_SLAB_FREELIST_HARDENED) SLUB per-cpu partial cache 特性(CONFIG_SLUB_CPU_PARTIAL=n) 换言之,本文只关注最底层最基础的 SLUB 运行逻辑——一种类三级缓存的结构。该想法是在上班通勤途中阅读此文 获得的启发,遂希望通过阅读代码和画图整理,将之梳理清楚。 概述 一级缓存:per-cpu SLAB cache 代表结构:struct …