2013-01-23 2 views
1

Je veux compter l'appel système malloc avec Kprobe dans Fedora. Je sais que malloc n'est pas un appel système et est implémenté dans l'espace utilisateur, mais je veux compter malloc avec kprobe si c'est possible.Comment puis-je compter malloc dans le noyau Linux avec kprobe

Quel est le nom de l'appel système que je dois donner à Kprobe? Par exemple, pour do_work:

kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("do_fork"); 
+2

'malloc' n'est pas un appel système. Dans la bibliothèque GNU Glibc, il est implémenté en utilisant les appels système 'mmap' et' sbrk'. Peut-être que vous voulez utiliser 'valgrind' sur votre application utilisateur .... Le noyau lui-même alloue de la mémoire dynamique (à l'intérieur du noyau, pas pour les applications) en utilisant' kmalloc' et les fonctions du noyau associées. –

+0

Et vous pouvez aussi utiliser 'pmap' et, pour le processus de pid 1234, regarder dans/proc/1234/status' et'/proc/1234/maps' etc ... –

Répondre

0

Ceci est impossible avec Kprobes parce que, comme vous l'avez dit, malloc n'est pas un appel système. Vous pouvez toutefois utiliser les USDT pour suivre les processus de l'espace utilisateur. Vous pouvez cependant utiliser les USDT. The bcc tools contiennent un exemple avec uobjnew. Il trace les allocations d'objets dans le processus donné:

$ ./uobjnew -h 
usage: uobjnew.py [-h] [-l {java,ruby,c}] [-C TOP_COUNT] [-S TOP_SIZE] [-v] 
        pid [interval] 

Summarize object allocations in high-level languages. 

positional arguments: 
    pid     process id to attach to 
    interval    print every specified number of seconds 

optional arguments: 
    -h, --help   show this help message and exit 
    -l {java,ruby,c}, --language {java,ruby,c} 
         language to trace 
    -C TOP_COUNT, --top-count TOP_COUNT 
         number of most frequently allocated types to print 
    -S TOP_SIZE, --top-size TOP_SIZE 
         number of largest types by allocated bytes to print 
    -v, --verbose   verbose mode: print the BPF program (for debugging 
         purposes) 

examples: 
    ./uobjnew -l java 145   # summarize Java allocations in process 145 
    ./uobjnew -l c 2020 1   # grab malloc() sizes and print every second 
    ./uobjnew -l ruby 6712 -C 10 # top 10 Ruby types by number of allocations 
    ./uobjnew -l ruby 6712 -S 10 # top 10 Ruby types by total size