2013-03-07 10 views
10

はlsmod、/ procの/モジュールとslabinfoはこれら、/ procの/ meminfoの は私のカーネルモジュールが私のカーネルモジュールはどのくらいのメモリを使用していますか?

を使用しているどのくらいのメモリ与えるものではありません、これを見つける方法はありますか?

btw、基本的に小さなテストプログラムを作成しました。デバイスドライバは1MBのioctl呼び出しを行い、アプリケーションから毎秒このioctlメッセージを送信して、毎秒kmallocを実行します。増加を参照することはできませんIAM "猫の/ 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'で取得したメモリ量を得ることができます.2番目の列は、最初の列では使用しています。使用してDRMモジュールですどのくらいのメモリを示す

出力例:

猫の/ proc /モジュール|グレップ^ DRM |のawk '{ "$ 2" $ 1を印刷}'

49394 drm_kms_helper DRM 286028

希望に役立ちます。

関連する問題