lsmod , /proc/modules 和slabinfo , /proc/meminfo 没有给出我的内核模块正在使用多少内存
有没有办法找到这个?
顺便说一句,我基本上写了一个小测试程序,一个设备驱动程序需要 ioctl 调用来分配 1MB,我每秒从我的应用程序发送这个 ioctl 消息,所以我的驱动器每秒执行 kmalloc。我看不到“cat /proc/meminfo | grep Slab”的增加
-- 剪断 ---
int device_ioctl(
struct file *file,
unsigned int ioctl_num,
unsigned long ioctl_param)
{
/*
* Switch according to the ioctl called
*/
printk ( "<l> inside ioctl %d IOCTL_ALLOC_MSG = %d\n", ioctl_num,IOCTL_ALLOC_MSG );
switch (ioctl_num) {
case IOCTL_ALLOC_MSG:
allocfunc(); // kmalloc 1MB // printk in this function is OK
break;
case IOCTL_DEALLOC_MSG:
deallocfunc();
break;
}
return 0;
}
应用程序/用户空间
while ( !stop )
{
ret_val = ioctl(memfile, IOCTL_ALLOC_MSG);
if (ret_val < 0) {
printf("ioctl failed. Return code: %d, meaning: %s\n", ret_val, strerror(errno));
return -1;
}
sleep ( 10 );
}
我没有看到slabinfo中内存的增长。我知道 linux 确实 cache->slabs->pages->objects 但在用户空间中必须有某种方法来确定特定内核模块的内存大小。
谢谢,