2015-10-04 1 views
0

J'essaie de trouver la raison de ces écritures sur mon lecteur flash.systemtap: comment déterminer les événements et les arguments de la sonde

deathstar> while true 
> do 
> dmesg|grep sdc|grep WRITE 
> sleep 3 
> done 
[17967.580179] kworker/u4:2(6863): WRITE block 20971648 on sdc1 (8 sectors) 
[17967.580206] kworker/u4:2(6863): WRITE block 20971784 on sdc1 (8 sectors) 
[17967.580214] kworker/u4:2(6863): WRITE block 20971832 on sdc1 (8 sectors) 
[17967.580222] kworker/u4:2(6863): WRITE block 21037080 on sdc1 (8 sectors) 

Je couru:

perf record -a

puis

rapport perf -s comm

pour obtenir

- 0.10%  0.10%  kworker/u4:2                 ▒ 
    ext4_bio_write_page                     ▒ 
    strnlen                        ▒ 
    elv_rqhash_del.isra.5.part.6                  ▒ 
    find_get_pages                      ▒ 
    find_get_pages_tag                     ▒ 
    scsi_init_io                      ◆ 
    ext4_mb_use_inode_pa                    ▒ 
    cpuacct_charge                      ▒ 
    i915_gem_retire_requests_ring                  ▒ 
    cfq_insert_request                     ▒ 
    i915_gem_free_request                    ▒ 
    __wake_up_bit                      ▒ 
    i915_gem_object_move_to_inactive                 ▒ 
    bdi_wakeup_thread_delayed                   ▒ 
    __test_set_page_writeback                   ▒ 
    scsi_request_fn                      ▒ 
    ext4_group_desc_csum                    ▒ 
    __pagevec_lru_add_fn                    ▒ 
    clear_page_dirty_for_io                    ▒ 
    wb_writeback                      ▒ 
    cfq_service_tree_add                    ▒ 
    cache_grow                       ▒ 
    __writeback_inodes_wb 

Comment puis-je utiliser maintenant: ext4_bio_write_page dans les systemtap pour imprimer divers arguments .. Comment puis-je déterminer même ce que les args possibles? Je veux faire quelque chose comme:

> stap -v -e 'probe ext4.ext4_bio_write_page?? { printf("%s %d", ??? 

et extraire quelque chose d'intéressant comme buffer_size peut-être ou nom_fichier - je ne sais pas ce que spécifiquement (je veux passer par ces fonctions une par une et de regarder leurs signatures).

[s'il vous plaît noter que je suis tout à fait nouveau à ce que je puisse avoir fait des erreurs très stupides]

+0

les docs mentionnent * man stapprobes * mais je n'ai pas pu trouver quoi que ce soit d'ext4 –

+0

J'ai essayé quelque chose comme: stap -v -e 'sonde module ("ext4"). Function ("ext4_bio_write_page") {printf ("bonjour \ n"); } 'qui est inutile mais fonctionne - j'ai besoin des params pour ext4_bio_write_page –

+0

stap -v -e' sonde module ("ext4"). function ("ext4_bio_write_page") {printf ("bonjour% s (% s) \ n", $$ vars, $$ parms); } 'affiche des informations utiles. –

Répondre

0

Voir la section 2.2 systemtap tutorial « quoi imprimer » et la section 3.2 « variables cibles ». Un bref extrait:

{ println($$vars) } 

imprime toutes les variables dans la portée. $foo$ imprime l'objet foo, y compris un niveau de sous-zones struct. $foo$$ jolies impressions en profondeur (sous réserve des limites MAXSTRINGLEN).

# stap -L 'kernel.function("foo")' 

va afficher la liste des variables dans la portée de la fonction foo.

+1

merci pour le tutoriel - j'avais compris la réponse mais ce tutoriel est excellent. –