[CACHE_CACHE + nid], nid); //替换kmem_cache的kmem_cache_node init_list(kmalloc_caches[INDEX_AC], &...slab分配缓冲区时分配的。 kmem_cache_init->;create_boot_cache->;__kmem_cache_create. kmem_cache_init的功能很多 Linux内存管理
在5.10版本的内核中,kmem_cache_init函数的定义如下(在mm/slab_common.c文件中):void __init km...
|kmem_cache_create(names[INDEX_AC].name, sizes[INDEX_AC].cs_size,|ARCH_KMALLOC_MINALIGN,| ARCH_KMALLOC_FLAGS |SLAB_PANIC,|NULL);| 第一次调用kmem_cache_create,填充了initkmem_list3[0],该类链表上挂载了|kmem_cache类型的slab分配器.| 第一次调用setup_cpu_cache,initkmem_list3[1]将被分配...
kmem_cache_init(); percpu_init_late(); pgtable_cache_init(); vmalloc_init(); } 12345678910111213141516 /**Setupkernelmemoryallocators*/staticvoid__initmm_init(void){ /* *page_cgrouprequirescontiguouspages, *biggerthanMAX_ORDERunlessSPARSEMEM. ...
@@ -32,7 +32,7 @@ static DEFINE_PER_CPU(void *, kmemleak_test_pointer); * Some very simple testing. This function needs to be extended for * proper testing. */ static int __init kmemleak_test_init(void) static int kmemleak_test_init(void) { struct test_node *elem; int i; ...
kmem_cache_init_late的目的就在于完善slab分配器的缓存机制. start_kernel() |-->page_address_init()| |-->setup_arch(&command_line);| |-->setup_per_cpu_areas();| |-->build_all_zonelist()| |-->page_alloc_init()| |-->pidhash_init()| ...
kmem_cache_init函数是在Linux内核启动时初始化内存缓存池的函数。具体实现流程如下: 1. kmem_cache_init函数首先会调用kmem_cache_sizes_init函数来设置内存块大小和数量等参数。 2. 然后函数会调用kmem_cache_create函数来创建内存缓存池,该函数会分配一些关键数据结构并将其初始化,包括kmem_cache结构体和slab描述符...
mem_init(); kmem_cache_init(); percpu_init_late(); pgtable_cache_init(); vmalloc_init(); } 这个函数在start_kernel里调用. 下面我们就看看kmem_cache_init();//默认slab分配器 点击(此处)折叠或打开 /* *Initialisation.Called after the page allocator have been initialisedand ...