2013-03-07 12 views
10

lsmod,/proc/modules i slabinfo,/proc/meminfo nie daje, ile pamięci mój moduł jądra używaile pamięci używa mój moduł jądra?

czy jest jakiś sposób, aby się tego dowiedzieć?

btw, napisałem mały program testowy w zasadzie, sterownik urządzenia, który pobiera ioctl call, aby przydzielić 1 MB i wysyłam ten komunikat ioctl co sekundę z mojej aplikacji, więc mój dysk robi coallococ co sekundę. IAM nie mogli zobaczyć wzrost "cat/proc/meminfo | grep Slab"

- ciach ---

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

przestrzeni aplikacji/użytkownika

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 nie widzę wzrostu pamięci w slabinfo. Wiem, że linux robi cache-> płyty-> strony-> obiekty, ale musi istnieć jakiś sposób w obszarze użytkownika, aby określić rozmiar pamięci określonego modułu jądra.

Dzięki

Odpowiedz

0

Zakładając, że nie ma sposobu, aby to zrobić bezpośrednio (który nie może być, o ile wiem) ....

Można użyć LTTng prześledzić wydarzenia jądra. Jeśli nie ma już przydatnego zdarzenia, powinieneś utworzyć nowy ślad nawet za każdym razem, gdy twój moduł przydzieli pamięć.

Następnie można przeanalizować śledzenie i narysować wykres, w jaki sposób wykorzystanie pamięci rośnie i maleje wraz z upływem czasu.

3

Nie jestem pewien, czy to będzie dla ciebie odpowiednie, ale możesz uzyskać ilość pamięci, którą moduł pobrał z 'cat/proc/modules', druga kolumna to rozmiar w bajtach, który moduł w pierwszej kolumnie używa.

wyjście

Próbka pokazujący ile pamięci są moduły DRM wykorzystujące:

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

drm_kms_helper 49394 drm 286028

Nadzieję, że pomaga.