红联Linux门户
Linux帮助

Linux内存管理之slab机制(销毁cache)

发布时间:2014-11-30 10:20:21来源:linux网站作者:bullbat

cache的销毁很简单,依次检查和释放本地CPU cache、共享cache、三链以及cache本身。从cache的创建我们看到,创建的cache主要是从cache_cache中获得的,因为cache_cache中对象的大小就是cache结构体的大小,所以这里只是释放到cache_cache就OK了。


static void __kmem_cache_destroy(struct kmem_cache *cachep) 

int i; 
struct kmem_list3 *l3; 
/* 释放每个cpu local cache使用的struct array_cache对象,注意此时是online cpu,cpu如果是down状态,并没有释放 */ 
for_each_online_cpu(i) 
kfree(cachep->array[i]); 
/* NUMA: free the list3 structures */ 
for_each_online_node(i) {/*对每个在线的节点*/ 
l3 = cachep->nodelists[i]; 
if (l3) { 
/* 释放shared local cache使用的struct array_cache对象 */ 
kfree(l3->shared); 
free_alien_cache(l3->alien); 
kfree(l3);/*释放三链*/ 


/*释放cache,因为该cache为cache_cache中的对象,所以调用对象释放函数*/ 
kmem_cache_free(&cache_cache, cachep); 
}