在没有太多运气之后,我决定尝试使用DTrace Linux端口取得一些成功,尽管缺少plockstat提供程序.以下DTrace脚本不是plockstat的替代品,但它设法向我展示了我之后的一些信息.
#!/usr/sbin/dtrace -s
/* Usage: ./futex.d '"execname"' */
long total;
END
{
printf("total time spent on futex(): %ldms\n", total);
}
/* arg1 == 0 means FUTEX_WAIT */
syscall::futex:entry
/execname == $1 && arg1 == 0/
{
self->start = timestamp;
}
syscall::futex:return
/self->start/
{
this->elapsed = (timestamp - self->start) / 1000000;
@[execname] = quantize(this->elapsed);
total += this->elapsed;
self->start = 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是使用上述DTrace脚本测量此DTrace文章中的简单测试程序在FUTEX_WAIT中花费的时间的示例.
$ ./futex.d '"mutex-test"'
dtrace: script './futex.d' matched 3 probes
^C
CPU ID FUNCTION:NAME
1 2 :END total time spent on futex(): 11200ms
mutex-test
value ------------- Distribution ------------- count
128 | 0
256 |@@@@@@@@@@@@@@@@@@@@ 1
512 | 0
1024 | 0
2048 | 0
4096 | 0
8192 |@@@@@@@@@@@@@@@@@@@@ 1
16384 | 0
Run Code Online (Sandbox Code Playgroud)
绝对不是很好,但至少它是一个起点.
在没有 DTrace 的情况下,最好的选择可能是SystemTap。这是一篇积极的文章。
http://davidcarterca.wordpress.com/2009/05/27/systemtap/
归档时间: |
|
查看次数: |
11505 次 |
最近记录: |