04_21 slab分配器 分配对象实战

目的

( slab块分配器分配内存),编写个内核模块,创建名称为
“mycaches"的slab描述符,小为40字节, align为8字节, flags为0。 从这个slab描述符中分配个空闲对象。

代码大概

内核模块中

#include 
#include 
#include 
#include 
#include 

static int size 40;
static struct kmem_cache *my_caches;
module_parma(size,int,0644); //内核模块接受用户空间的内容

static int __init myslab_init(void)
{
    if(size>KMALLOC_MAX_SIZE){
        return -1;
    }
    //创建slab缓存
    my_caches = kmem_cache_create("my_cache",size,0,SLAB_HWCACHE_ALIGN,NULL);
    //SLAB对象大小 和硬件高速缓存大小对其SLAB_HWCACHE_ALIGN
    if(!my_caches){
        return -1;
    }
    //分配空间
    kbuf = kmem_cache_alloc(my_caches,GFP_ATOMIC);
    if(!kbuf){
        (void)kmem_cache_destroy(my_caches);//销毁创建的slab
        return -1;
    }
    printk("sucess kbuf_addr%p\n",kbuf);
    



}

运行

04_21 slab分配器 分配对象实战_第1张图片
在目录 /proc/sys/slab 查看刚刚创建的slab对象

04_21 slab分配器 分配对象实战_第2张图片
04_21 slab分配器 分配对象实战_第3张图片

你可能感兴趣的:(狂刷KPI,缓存,性能优化)