[英]how much memory is my kernel module using?
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,但是在用戶區中必須有一些方法來確定特定內核模塊的內存大小。
謝謝,
我不確定它是否適合您,但是您可以獲得模塊使用'cat / proc / modules'獲取的內存量,第二列是第一列中模塊的大小(以字節為單位)正在使用。
示例輸出顯示drm模塊使用的內存量:
cat / proc / modules | grep ^ drm | awk'{print $ 1“”$ 2}“
drm_kms_helper 49394 drm 286028
希望有所幫助。
假設沒有辦法直接這樣做(據我所知,可能存在)....
您可以使用LTTng來跟蹤內核事件。 如果那里沒有任何方便的事件,即使每次模塊分配內存,也應該創建一個新的跟蹤。
然后,您可以分析跟蹤並繪制內存使用量隨時間增長和縮小的圖表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.