Сколько памяти используется моим модулем ядра?
lsmod,/proc/modules и slabinfo,/proc/meminfo
НЕ дает, сколько памяти использует мой модуль ядра
Есть ли способ узнать это?
btw, я написал небольшую тестовую программу в основном, драйвер устройства, который принимает вызов ioctl для распределения 1 МБ, и каждую секунду я отправляю это сообщение ioctl из моего приложения, так что мой диск делает kmalloc каждую секунду. Я не смог увидеть увеличение "cat/proc/meminfo | grep Slab"
- snip ---
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- > объекты, но для определения размера памяти для конкретного модуля ядра должен быть какой-то способ на земле пользователя.
Спасибо,
Ответы
Ответ 1
Я не уверен, что это будет нормально для вас, но вы можете получить объем памяти, который модуль взял с помощью "cat/proc/modules", второй столбец - это размер в байтах, который модуль в используется первый столбец.
Пример вывода, показывающий, сколько памяти используют модули drm, используя:
cat/proc/modules | grep ^ drm | awk '{print $1 "" $2}'
drm_kms_helper 49394
drm 286028
Надеюсь, что это поможет.
Ответ 2
Предполагая, что нет прямого способа сделать это напрямую (что может быть, насколько я знаю)....
Вы можете использовать LTTng для отслеживания событий ядра. Если там нет удобного события, вы должны создать новый трафик даже каждый раз, когда ваш модуль выделяет память.
Затем вы можете проанализировать трассировку и нарисовать график того, как ваше использование памяти растет и со временем сокращается.