内存管理 – 无法在/ proc / slabinfo中使用kmem_cache_create()
发布时间:2020-12-13 23:53:55 所属栏目:Linux 来源:网络整理
导读:我编写了一个简单的内核模块,它使用slab层分配对象.该模块使用内核API(kmem_cache_ {create,alloc,free}).我在3.15.4-200上工作的内核版本. 虽然,我的代码按预期工作没有问题,但我无法在grep / proc / slabinfo时看到使用kmem_cache_create()创建的新对象/ s
我编写了一个简单的内核模块,它使用slab层分配对象.该模块使用内核API(kmem_cache_ {create,alloc,free}).我在3.15.4-200上工作的内核版本.
虽然,我的代码按预期工作没有问题,但我无法在grep / proc / slabinfo时看到使用kmem_cache_create()创建的新对象/ slab“my_cache”.创建的对象是一个简单的对象列表,可以从列表中插入或删除. 注意:我的模块工作正常,没有问题.我可以在/ sys / kernel / slab / my_cache下查看slab创建,但不能在/ proc / slabinfo或vmstat -m或slabtop中查看 mycache = kmem_cache_create("my_cache",sizeof(struct mystruct),SLAB_HWCACHE_ALIGN,NULL); if (mycache == NULL) return -ENOMEM; ` $sudo cat /sys/kernel/slab/my_cache/objects 49108 N0=49108 $sudo cat /sys/kernel/slab/my_cache/object_size 64 $sudo cat /sys/kernel/slab/my_cache/order 0 $sudo cat /sys/kernel/slab/my_cache/aliases 12 $sudo cat /sys/kernel/slab/my_cache/cache_dma 0 $sudo cat /sys/kernel/slab/my_cache/slab_size 64 $sudo cat /sys/kernel/slab/my_cache/trace 0 $sudo cat /sys/kernel/slab/my_cache/validate $sudo cat /sys/kernel/slab/my_cache/total_objects 49920 N0=49920 ` 解决方法
kmem_cache_create通常会尝试将此缓存与其他缓存合并.因此,例如,如果它找到具有相同属性的相同大小的另一个缓存(slab将被中毒等),它将仅使用此缓存而不是创建新缓存.
如果你真的想确保它肯定会为你创建一个新的缓存(=出现在slabinfo中),你总是可以将一个有效的构造函数传递给kmem_cache_create.像这样的东西: static void mystruct_constructor(void *addr) { memset(addr,sizeof(struct mystruct)); } mycache = kmem_cache_create("my_cache",mystruct_constructor); 通常为此缓存中的每个对象分配调用构造函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |