Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299748
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-11 15:58:54


第18 章• lockstat 提供器213
读取器/写入器锁定探测器
读取器/写入器锁定强制执行允许临界段中有多个读取器或单个写入器的策略,但不允许同
时存在二者。这些锁定通常用于搜索操作比修改操作更频繁且临界段中具有足够的时间的
结构。如果临界段时间比较短,则读取器/写入器锁定将在用于实现锁定的共享内存中隐式
串行化,从而使它们无法比自适应锁定提供更大的优势。有关读取器/写入器锁定的更多详
细信息,请参见rwlock(9F)。
表18–4 中介绍了与读取器/写入器锁定有关的探测器。对于每种探测器,arg0 都包含指向代
表自适应锁定的krwlock_t 结构的指针。
表18–4读取器/写入器锁定探测器
rw-acquire 获取读取器/写入器锁定之后将立即触发的暂挂事件探测器。如果作为读取器
获取锁定,则arg1 将包含常量RW_READER,如果作为写入器获取锁定,则将包
含常量RW_WRITER。
rw-block 在暂挂的读取器/写入器锁定上阻塞的线程重新唤醒并获取锁定之后,将触发
的争用事件探测器。arg1 包含当前线程要获取锁定必须休眠的时间长度(以
纳秒为单位)。如果作为读取器获取锁定,则arg2 将包含常量RW_READER,如
果作为写入器获取锁定,将包含常量RW_WRITER。arg3 和arg4 包含有关阻塞
原因的更多信息。在当前线程阻塞的情况下,只有在作为写入器暂挂锁定
时,arg3 才不为零。arg4 包含当前线程阻塞时的读取器计数。如果rw-block
和rw-acquire 探测器都已启用,则rw-block 将在rw-acquire 之前触发。
rw-upgrade 在线程已成功将读取器/写入器锁定从读取器升级到写入器之后,将触发的暂
挂事件探测器。升级没有关联的争用事件,因为仅可以通过非阻塞接口
rw_tryupgrade(TRYUPGRADE.9F) 进行升级。
rw-downgrade 在线程将其读取器/写入器锁定的拥有权从写入器降级到读取器之后,将触发
的暂挂事件探测器。降级没有关联的争用事件,因为降级在没有争用的情况
下始终会成功。
rw-release 释放读取器/写入器锁定之后,将立即触发的暂挂事件探测器。如果作为读取
器暂挂释放的锁定,则arg1 将包含常量RW_READER,如果作为写入器暂挂释放
的锁定,则将包含常量RW_WRITER。由于升级和降级,获取锁定时,锁定可能
并没有释放。
稳定性
lockstat 提供器使用DTrace 的稳定性机制* 说明其稳定性,如下表所示。有关稳定性机制
的更多信息,请参见第39 章。
元素名称稳定性数据稳定性相关性类
提供器发展中发展中公用
读取器/写入器锁定探测器
214 Solaris 动态跟踪指南• 2006 年7 月
元素名称稳定性数据稳定性相关性类
模块专用专用未知
函数专用专用未知
名称发展中发展中公用
参数发展中发展中公用
稳定性
第18 章• lockstat 提供器215
216
profile 提供器
profile 提供器提供了与按所指定固定时间间隔触发、基于时间的中断关联的探测器。这些
不固定探测器不与任何特定执行点关联,而是与异步中断事件关联。这些探测器可用于按
单位时间对系统状态的某些方面进行采样,然后使用这些样本来推断系统行为。如果采样
速率较高或采样时间较长,则推断可能更准确。使用DTrace 操作时,可以使用profile 提
供器对系统中的任何内容进行实际采样。例如,您可对当前线程的状态、CPU 的状态或当
前的计算机指令进行采样。
profile-n 探测器
profile-n 探测器在每个CPU 中以高中断级别按固定的时间间隔触发。探测器的触发时间
间隔以n 值表示:中断源将每秒触发n 次。n 也可带可选的时间前缀,在此情况下,n 将解
释为由后缀表示的单位。表19–1 中列出了有效的后缀和这些后缀表示的单位。
表19–1有效时间后缀
后缀时间单位
nsec 或ns 纳秒
usec 或us 微秒
msec 或ms 毫秒
sec 或s 秒
min 或m 分钟
hour 或h 小时
day 或d 天
hz 赫兹(每秒频率)
以下示例创建一个按97 赫兹触发,以便对当前正在运行的进程进行采样的探测器:
19 第1 9 章
217
#pragma D option quiet
profile-97
/pid != 0/
{
@proc[pid, execname] = count();
}
END
{
printf("%-8s %-40s %s\n", "PID", "CMD", "COUNT");
printa("%-8d %-40s ", @proc);
}
运行上例一小段时间将产生与以下示例类似的输出:
# dtrace -s ./prof.d
^C
PID CMD COUNT
223887 sh 1
100360 httpd 1
100409 mibiisa 1
223887 uname 1
218848 sh 2
218984 adeptedit 2
100224 nscd 3
profile-n 探测器
218 Solaris 动态跟踪指南• 2006 年7 月
3 fsflush 4
2 pageout 6
100372 java 7
115279 xterm 7
100460 Xsun 7
100475 perfbar 9
223888 prstat 15
也可使用profile-n 提供器对有关正在运行进程的信息进行采样。以下示例D脚本使用一
个1,001 赫兹的profile 探测器对所指定进程的当前优先级进行采样:
profile-1001
/pid == $1/
{
@proc[execname] = lquantize(curlwpsinfo->pr_pri, 0, 100, 10);
}
要查看运行中的此示例脚本,请在一个窗口中键入下列命令:
$echo $$
494621
$while true ; do let i=0 ; done
在另一个窗口中运行D脚本一小段时间:
# dtrace -s ./profpri.d 494621
?? dtrace: script ’./profpri.d’ matched 1 probe
^C
ksh
value ------------- Distribution ------------- count
profile-n 探测器
 
 
以上文章转自于 : http://developers.sun.com.cn/
阅读(420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~