1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(10)-modcalls.d

modcalls.d位于DTraceToolkitKernel文件夹下,其功能是统计不同模块调用kernel函数的次数。脚本代码就一行(略去版权信息):

fbt:::entry { @calls[probemod] = count(); }

脚本代码分析如下:
监听fbt Provider的 entry probefbt Provider几乎提供了对所有kernel函数的entryexittrace)。定义calls这个aggregation,用probemodkeyprobemod记录了当前probe的模块名)。当probe触发后,把calls里相应模块的统计次数加[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(9)-syscallbyproc.d

syscallbyproc.d位于DTraceToolkitProc文件夹下,其功能是统计进程使用系统调用的次数。脚本代码就一行(略去版权信息):

syscall:::entry { @num[execname] = count(); }

脚本代码分析如下:
监听syscall Provider的 entry probeexecname内置变量记录了进程名,作为num这个aggregationkey。当probe触发后,把num里相应进程的统计次数加1

执行脚本,输出如下:

Nans-MacBook-Pro:Proc root# ./syscallbyproc.d[......]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

从哪里获得DTrace的源码包?

昨天看到Adam发的推特:“hoping for DTrace in the next Red Star OS update!”,我就在想:如果想把DTrace移植到一个新的操作系统上,从哪里获得DTrace的源码包呢?现在Mac OS XFreeBSD都有DTrace了,难道从这些系统上fork出来DTrace的代码?

我发了一封邮件给社区,很快就收到了Robert Mustacchi的回复:从illumos代码库(https://github.com/illumos/illumos-gate)可以得到所有DTrace的代码(包含一些增强的功能),此外DTrace是遵守CDDL协议的。

[……]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(8)-creatbyproc.d

creatbyproc.d位于DTraceToolkitProc文件夹下,其功能是打印调用creat系统调用的进程名和创建的文件名。脚本代码就一行(略去版权信息):

syscall::creat*:entry { printf("%s %s", execname, copyinstr(arg0)); }

脚本代码分析如下:
监听creat(或者creat64)系统调用的 entry probe,其中arg0参数记录了要创建的文件名。当probe触发后,打印进程名和创建的文件名。

执行脚本,输出如下:

bash-3.2# ./creatbyproc.d
dtrace:[......]

阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有评分)
Loading...

DTraceToolkit脚本解析(7)-lockbyproc.d

lockbyproc.d位于DTraceToolkitLocks文件夹下,其功能是统计进程在获得“adaptive mutex”等待时间的总和。脚本代码就一行(略去版权信息):

lockstat:::adaptive-block { @time[execname] = sum(arg1); }

脚本代码分析如下:
定义一个以可执行程序名字(execname)为keyaggregationtime)。监听所有lockstat Provideradaptive-block probe,其中arg1参数包含的是等待时间(单位是ns)。当probe触发时,调用sum函数。最后脚本[……]

阅读全文