2013-03-07 67 views
10

lsmod的,的/ proc /模塊和slabinfo,的/ proc/meminfo中 不給我的內核模塊使用多少內存我的內核模塊使用多少內存?

有沒有辦法找到這一點?

順便說一句,我基本上寫了一個小測試程序,一個採用ioctl調用來分配1MB的設備驅動程序,並且每隔一秒從我的應用程序發送這個ioctl消息,所以我的驅動器每秒都會發送kmalloc。蔭沒能看到 「貓的/ proc/meminfo中| grep的板」 增加

- 喀嚓 -

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->對象,但是用戶登陸時必須有某種方法來確定特定內核模塊的內存大小。

感謝,

回答

0

假設有沒有辦法直接做到這一點(這有可能是,就我所知)....

你可以使用LTTng跟蹤內核事件。如果在那裏沒有方便的事件,即使每次模塊分配內存,都應該創建一個新的跟蹤。

然後,您可以分析跟蹤並繪製隨着時間的推移您的內存如何增長和縮小的圖形。

3

我不確定它是否適合您,但可以通過'cat/proc/modules'獲得模塊的內存量,第二列是模塊的大小在第一列正在使用。

示例輸出顯示多少內存是使用DRM模塊:

執行cat/proc /模塊| grep的^ DRM | AWK '{打印$ 1 「」 $ 2}'

drm_kms_helper 49394 DRM 286028

希望有幫助。