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

DTrace tricks and tips (10) –如何判断CPU当前运行的是不是Idle线程

最近在看sched provider相关内容,搜索到一篇古老的帖子。帖子大意就是用“sched:::on-cpu”和“sched:::off-cpu”统计的线程运行时间和期望的不一样,原因是把Idle线程的运行时间计算进去了,需要过滤掉。在Solaris上过滤Idle线程的方法:

sched:::on-cpu
/curthread->t_pri != -1/
{
         ......
}

不同操作系统过滤Idle线程的方法如下(摘自DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD[……]

阅读全文

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

关于DTrace支持表达式中含有关键字的讨论

十一期间,在DTrace邮件讨论组里,FreeBSD的贡献者Mark Johnston提出了一个issue:因为有些DTrace的关键字不是c/c++的关键字,所以如果DTrace脚本和命令分析的code里包含这些关键字,执行就会出错。他举了个例子:FreeBSDg_consumer结构体里包含了provider这个成员,所以运行下面的DTrace的代码片就会报错:

fbt::g_vfs_done:entry {printf("%s", stringof(args[0]->bio_from->provider->name));}

所以他建议DTrace应该支持表[……]

阅读全文

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

DTrace tricks and tips (8) –如何列出一个provider所有的probe

通常使用“dtrace -l”命令会列出所有的probe。如果只想列举某一个provider所有的probe,可以使用“dtrace -P provider -l”(注意P是大写字母)。举个例子,如果想列出“io”provider的所有probe:

bash-3.2# dtrace -P io -l
   ID   PROVIDER            MODULE                          FUNCTION NAME
 1274         io           genunix                           biodone d[......]

阅读全文

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

DTrace tricks and tips (7) – 使用copyin和copyinstr 需要注意的问题

在使用copyincopyinstr这两个函数时,要注意这两个函数所访问的地址空间一定要被应用程序已经访问过了。举个例子:

# dtrace -n syscall::open:entry'{ trace(copyinstr(arg0)); }'
dtrace: description 'syscall::open:entry' matched 1 probe
CPU     ID                    FUNCTION:NAME
dtrace: error on enabled probe ID 2 (ID 50: syscall::open:entry): in[......]

阅读全文