2013-03-07 6 views
10

lsmod,/proc/modules e slabinfo,/proc/meminfo non dà quanta memoria il mio modulo del kernel sta usandola quantità di memoria utilizzata dal modulo del mio kernel?

c'è un modo per scoprirlo?

btw, ho scritto un piccolo programma di test in sostanza, un driver di periferica che prende chiamata ioctl per alloc 1MB e mando questo messaggio ioctl ogni secondo dalla mia applicazione così la mia auto fa kmalloc ogni secondo. Iam non in grado di vedere l'aumento di "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; 
} 

spazio di applicazione/utente

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); 

     } 

I non vedere la crescita della memoria in slabinfo. So che linux fa cache-> slabs-> pages-> objects ma ci deve essere un modo in terra utente per determinare la dimensione della memoria di un particolare modulo del kernel.

Grazie,

risposta

0

Supponendo non c'è un modo per farlo direttamente (che ci potrebbe essere, per quanto ne so) ....

Si potrebbe utilizzare LTTng per tracciare gli eventi del kernel. Se non c'è già un evento a portata di mano, dovresti creare una nuova traccia anche ogni volta che il tuo modulo assegna la memoria.

È quindi possibile analizzare la traccia e tracciare un grafico di come l'utilizzo della memoria aumenta e si riduce nel tempo.

3

Non sono sicuro se sarà ok per te, ma puoi ottenere la quantità di memoria che un modulo ha preso con 'cat/proc/modules', la seconda colonna è la dimensione in byte che il modulo nella prima colonna sta usando.

uscita

Esempio che mostra la quantità di memoria sono moduli DRM utilizzando:

cat/proc/modules | grep^drm | awk '{print $ 1 "" $ 2}'

drm_kms_helper 49394 drm 286028

Spero che questo aiuti.