// 在 slab allocator 体系初始化的时候在 slab_sysfs_init 函数中将 slab_state 设置为 FULL if (slab_state <= UP) return 0; // 在 sys 文件系统中创建 /sys/kernel/slab/name 节点,该目录下的文件包含了对应 slab cache 运行时的详细信息 err = sysfs_slab_add(s); if (err) // 出现错误则释...
// 在 slab allocator 体系初始化的时候在 slab_sysfs_init 函数中将 slab_state 设置为 FULLif(slab_state <= UP)return0;// 在 sys 文件系统中创建 /sys/kernel/slab/name 节点,该目录下的文件包含了对应 slab cache 运行时的详细信息err = sysfs_slab_add(s);if(err)// 出现错误则释放 kmem_cache ...
转载:http://www.cnblogs.com/tolimit/ 首先为什么要说slub分配器,内核里小内存分配一共有三种,SLAB/SLUB/SLOB,slub分配器是slab分配器的进化版,而slob是一种精简的小内存分配算法,主要用于嵌入式系统。慢慢的slab分配器或许会被slub取代,所以对slub的了解是十分有必要的。 我们先说说slab分配器的弊端,我们知道sla...
/* 用于sysfs文件系统,在/sys中会有个slub的专用目录 */ struct kobject kobj; #endif #ifdef CONFIG_MEMCG_KMEM /* 这两个主要用于memory cgroup的,先不管 */ struct memcg_cache_params *memcg_params; int max_attr_size; #ifdef CONFIG_SYSFS struct kset *memcg_kset; #endif #endif #ifdef CONFIG_...
创建新的缓存主要是申请管理结构暂用的空间,并初始化,这些管理结构包括kmem_cache、kmem_cache_nodes、kmem_cache_cpu。同时在sysfs创建kobject节点。最后把kmem_cache加入到全局cahce链表slab_caches中。 2.2 缓存的销毁 销毁过程比创建过程简单的多,主要工作是释放partial队列所有page,释放kmem_cache_cpu,释放每个node...
#ifdef CONFIG_SYSFS struct kset *memcg_kset; #endif #endif #ifdef CONFIG_NUMA /* 用于NUMA架构,该值越小,越倾向于在本结点分配对象 */ int remote_node_defrag_ratio; #endif /* 此高速缓存的SLAB链表,每个NUMA结点有一个,有可能该高速缓存有些SLAB处于其他结点上 */ ...
在Linux 内核初始化的过程中会提前为内核核心对象创建好对应的 slab cache,比如:在内核初始化函数 start_kernel 中调用 fork_init 函数为 struct task_struct 创建其所属的 slab cache —— task_struct_cachep。 在fork_init 中就调用了 kmem_cache_create_usercopy 函数来创建 task_struct_cachep,同时指定 tas...
在Linux内核初始化的过程中会提前为内核核心对象创建好对应的 slab cache,比如:在内核初始化函数 start_kernel 中调用 fork_init 函数为 struct task_struct 创建其所属的 slab cache —— task_struct_cachep。 在fork_init 中就调用了 kmem_cache_create_usercopy 函数来创建 task_struct_cachep,同时指定 task...
(); 361 362 memcg_free_cache_params(s); 363 #ifdef SLAB_SUPPORTS_SYSFS 364 sysfs_slab_remove(s); 365 #else 366 slab_kmem_cache_release(s); // 释放工作发生的地方 367 #endif 368 goto out; 369 370 out_unlock: 371 mutex_unlock(&slab_mutex); 372 out: 373 put_online_mems(); 374...
(s,FREE_SLOWPATH);// free_debug_processing 中会调用 init_object,清理对象内存无用信息,重新恢复对象内存布局到初始状态if(kmem_cache_debug(s)&&!free_debug_processing(s,page,head,tail,cnt,addr))return;do{// 获取 slub 中的空闲对象列表,prior = null 表示此时 slub 是一个 full slub,意思就是该...