【问题标题】:systemtap: how to determine probe events and argssystemtap:如何确定探测事件和参数
【发布时间】:2015-10-04 07:28:04
【问题描述】:

我正在尝试找出这些写入我的闪存驱动器的原因。

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)

我跑了:

性能记录-g -a

然后

性能报告-s comm

得到

-    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   

我现在如何使用:systemtap 中的 ext4_bio_write_page 来打印各种参数.. 我什至如何确定可能的参数是什么? 我想做类似的事情:

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

并提取一些有趣的东西,比如 buffer_size 或 file_name - 我不知道具体是什么(我想一一查看这些函数并查看它们的签名)。

[请注意我对此完全陌生,所以我可能犯了一些非常愚蠢的错误]

【问题讨论】:

  • 文档确实提到了 man stapprobes,但我在其中找不到任何与 ext4 相关的内容
  • 我试过类似的东西: stap -v -e 'probe module("ext4").function("ext4_bio_write_page") {printf("hello\n"); }' 没用但有效 - 我需要 ext4_bio_write_page 的参数
  • stap -v -e 'probe module("ext4").function("ext4_bio_write_page") {printf("hello %s (%s)\n", $$vars, $$parms ); }' 打印出有用的信息。

标签: linux linux-kernel perf systemtap


【解决方案1】:

请参阅systemtap tutorial 第 2.2 节“要打印的内容”和第 3.2 节“目标变量”。简短摘录:

{ println($$vars) }

打印范围内的所有变量。 $foo$ 漂亮地打印 foo 对象,包括一级结构子字段。 $foo$$ 精美打印深度(受MAXSTRINGLEN 限制)。

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

将打印出函数foo范围内的变量列表。

【讨论】:

  • 感谢您的教程 - 我已经找到了答案,但是该教程非常好。
猜你喜欢
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 2015-06-02
  • 2020-11-01
相关资源
最近更新 更多