如何在dtrace中找到参数的意思

时间:2013-12-30 13:03:34

标签: linux performance dtrace

代码

dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }'
   dtrace: description 'syscall::read:entry ' matched 1 probe
   ^C
   bash            /proc/1709/psinfo                                                 1
   loader          /zp/space/f2                                                      1
   nscd            /etc/user_attr                                                    1
   bash            /export/home/mauroj/.bash_history                                 2
   loader          /zp/space/f3                                                      2
   nscd            /etc/group                                                        2
   su              /etc/default/su                                                   8
   su              /devices/pseudo/sy@0:tty                                          9
   bash            /dev/pts/5                                                       66
   Xorg            /devices/pseudo/conskbd@0:kbd                                   152
   gnome-terminal  /devices/pseudo/clone@0:ptm                                     254

dtrace代码fds[arg0].fi_pathname

如何查看dtrace调用参数是什么意思,我尝试使用

trace -lv 'syscall:fds:read:entry' |head
   ID   PROVIDER            MODULE                          FUNCTION NAME
    1     dtrace                                                     BEGIN

    Probe Description Attributes
        Identifier Names: Stable
        Data Semantics:   Stable
        Dependency Class: Common

    Argument Attributes
        Identifier Names: Stable

但找不到参数? 怎么看这些基础意味着什么? 例如fds[arg0].fi_pathname

举另一个例子:

 dtrace -n 'io:::start { @bytes = quantize(args[0]->b_bcount); }'

如何知道args [0] - > b_count意味着系统调用字节

1 个答案:

答案 0 :(得分:3)

正如documentation所解释的那样,对于系统调用提供程序的条目探测,arg0arg1等是系统调用的参数本身。对于syscall::read:entry,然后查看read(2)手册页显示

 ssize_t read(int fildes, void *buf, size_t nbyte);

所以arg0fildes的价值。

不幸的是,fds[]似乎没有在官方文档中描述。 fds[]类似于子例程,DTrace将translate文件描述符提供给fileinfo_tfileinfo_t是一个稳定的结构,它提供有关文件的有用信息,而不会将实现细节暴露给用户。

io provider的文档指出,io:::startargs[0]是指向struct buf的指针。这是另一个文档错误:它实际上是指向struct bufinfo的指针,它在同一页面上描述。