5.10 版本 linux 内核的使用 slub 的 kmem_cache_init 函数解析
在 5.10 版本的内核中,如果使用 SLUB 内存分配器,kmem_cache_init 函数会调用 kmem_cache_init_late 函数进行具体实现。
kmem_cache_init_late 函数的定义如下(在 mm/slub.c 文件中):
该函数的作用是初始化 SLUB 分配器中所有的缓存。
具体实现如下:
调用 kmem_cache_shrink 函数进行内存回收,释放空闲的内存块。
该函数会遍历每个缓存的所有 CPU 本地缓存,把其中的未使用的内存块放回到全局池中,以减少内存占用。
调用 kmem_cache_create 函数为每个 slab 缓存创建相应的 kmem_cache 结构体。
该函数会在相应的内存控制组(memcg)中创建 slab 缓存的 kmem_cache 结构体。其中,memcg 是每个内存控制组的指针,s 是该内存控制组中的缓存信息指针。通过遍历所有的缓存信息,调用 kmem_cache_create 函数为每个 slab 缓存创建相应的 kmem_cache 结构体。
调用 init_per_cpu_pageset 函数初始化每个 CPU 的缓存池。
该函数会在每个 CPU 上初始化相应的缓存池,提高内存分配效率。
最后,调用 deactivate_slab 函数把空闲的 slab 缓存从全局链表中移除,减少管理开销。
该函数会把没有被使用的 slab 缓存从全局链表中移除,同时释放相应的内存块。
以上就是 5.10 版本 Linux 内核中使用 SLUB 分配器的 kmem_cache_init 函数的具体实现过程。
相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址
c/c++后端技术交流群:579733396
评论