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

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-11 16:05:11


第23 章• sysinfo 提供器257
表23–1 sysinfo 探测器(续)
wait_ticks_io 定期系统时钟已确定CPU 处于空闲状态,但一些线程正在等待CPU 中的I/O
时将触发的探测器。请注意,此探测器在系统时钟的上下文中触发,所以将
在运行系统时钟的CPU 中触发。cpu_t 参数(arg2) 指示CPU 已被描述为正在
等待I/O。有关详细信息,请参见第258 页中的“参数”中的arg2。
wait_ticks_io 和cpu_ticks_wait; wait_ticks_io 之间不存在语义差别是由于
历史原因造成的。
writech 每次成功写入后,但在将控制返回到执行该写入的线程之前将触发的探测
器。可以通过write(2)、writev(2) 或pwrite(2) 系统调用进行写入。arg0 包含
已成功写入的字节数。
xcalls 要进行交叉调用时将触发的探测器。交叉调用是一个CPU 请求另一个CPU 的
即时工作的操作系统机制。
参数
sysinfo 探测器的参数如下所示:
arg0 要对统计信息递增的值。对于大多数探测器,此参数始终为1,但对于一些探
测器,此参数可以采用其他值。
arg1 指向要对统计信息递增的当前值的指针。此值为64 位量,将按arg0 中的值递
增。取消引用此指针可以使使用者确定对应于该探测器的统计信息的当前计
数。
arg2 指向cpu_t 结构的指针,该结构对应于要递增统计信息的CPU。此结构在
中定义,但它为内核实现的一部分,应视为“专用”。
对于大多数sysinfo 探测器,arg0 的值为1。但是,readch 和writech 探测器将arg0 分别设
置为已读取或已写入的字节数。使用以下功能可以确定按可执行名称读取的大小,如下例
所示:
# dtrace -n ] = quantize(arg0)}’
dtrace: description ’readch’ matched 4 probes
^C
xclock
value ------------- Distribution ------------- count
16 | 0
32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1
参数
258 Solaris 动态跟踪指南• 2006 年7 月
64 | 0
acroread
value ------------- Distribution ------------- count
16 | 0
32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3
64 | 0
FvwmAuto
value ------------- Distribution ------------- count
2 | 0
4 |@@@@@@@@@@@@@ 13
8 |@@@@@@@@@@@@@@@@@@@@@ 21
16 |@@@@@ 5
32 | 0
xterm
value ------------- Distribution ------------- count
16 | 0
32 |@@@@@@@@@@@@@@@@@@@@@@@@ 19
64 |@@@@@@@@@ 7
128 |@@@@@@ 5
256 | 0
参数
第23 章• sysinfo 提供器259
fvwm2
value ------------- Distribution ------------- count
-1 | 0
0 |@@@@@@@@@ 186
1 | 0
2 | 0
4 |@@ 51
8 | 17
16 | 0
32 |@@@@@@@@@@@@@@@@@@@@@@@@@@ 503
64 | 9
128 | 0
Xsun
value ------------- Distribution ------------- count
-1 | 0
0 |@@@@@@@@@@@ 269
1 | 0
2 | 0
4 | 2
8 |@ 31
16 |@@@@@ 128
32 |@@@@@@@ 171
64 |@ 33
参数
260 Solaris 动态跟踪指南• 2006 年7 月
128 |@@@ 85
256 |@ 24
512 | 8
1024 | 21
2048 |@ 26
4096 | 21
8192 |@@@@ 94
16384 | 0
sysinfo 提供器将arg2 设置为指向cpu_t(内核实现的一种内部结构)的指针。大多数
sysinfo 探测器在要递增统计信息的CPU 中触发,但一些探测器不是这样。例外的探测器
包括cpu_ticks_idle、cpu_ticks_kernel、cpu_ticks_user 和cpu_ticks_wait(始终在执行
系统时钟的CPU 中触发)。使用cpu_t 的cpu_id 成员可确定关注的CPU。以下D脚本运行
大约10 秒后,将按统计信息快速获取相关CPU 行为的快照:
cpu_ticks_*
{
@[probename] = lquantize(((cpu_t *)arg2)->cpu_id, 0, 1024, 1);
}
tick-1sec
/x++ >= 10/
{
exit(0);
}
运行上面的脚本将会生成与以下示例类似的输出:
# dtrace -s ./tick.d
dtrace: script ’./tick.d’ matched 5 probes
参数
第23 章• sysinfo 提供器261
CPU ID FUNCTION:NAME
22 37588 :tick-1sec
cpu_ticks_user
value ------------- Distribution ------------- count
11 | 0
12 |@@@@@@@@ 14
13 |@@@@ 7
14 |@ 3
15 |@ 2
16 |@@ 4
17 |@@@@@@ 10
18 | 0
19 |@ 2
20 |@@@ 6
21 |@@@ 5
22 | 1
23 |@@@@@@ 10
24 | 0
cpu_ticks_wait
value ------------- Distribution ------------- count
11 | 0
12 |@@@@@@@@@@@@@ 241
参数
262 Solaris 动态跟踪指南• 2006 年7 月
13 |@@@@@@@@@@@@@ 236
14 | 16
15 |@@@@@@@ 132
16 | 11
17 | 10
18 | 7
19 |@ 18
20 | 4
21 | 16
22 | 13
23 | 10
24 | 0
cpu_ticks_kernel
value ------------- Distribution ------------- count
11 | 0
12 |@@@@@@@@ 234
13 |@@@@@ 159
14 |@@@ 104
15 |@@@@ 131
16 |@@ 66
17 |@ 40
18 |@ 51
19 |@ 36
参数
第23 章• sysinfo 提供器263
20 |@@ 56
21 |@ 42
22 |@@@ 96
23 |@@ 57
24 | 0
cpu_ticks_idle
value ------------- Distribution ------------- count
11 | 0
12 |@@ 534
13 |@@ 621
14 |@@@ 900
15 |@@ 758
16 |@@@ 942
17 |@@@ 963
18 |@@@ 965
19 |@@@ 967
20 |@@@ 957
21 |@@@ 960
22 |@@@ 913
23 |@@@ 946
24 | 0
参数
264 Solaris 动态跟踪指南• 2006 年7 月
示例
通过mpstat(1M) 检查以下输出:
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
12 90 22 5760 422 299 435 26 71 116 11 1372 5 19 17 60
13 46 18 4585 193 162 431 25 69 117 12 1039 3 17 14 66
14 33 13 3186 405 381 397 21 58 105 10 770 2 17 11 70
15 34 19 4769 109 78 417 23 57 115 13 962 3 14 14 69
16 74 16 4421 437 406 448 29 77 111 8 1020 4 23 14 59
17 51 15 4493 139 110 378 23 62 109 9 928 4 18 14 65
18 41 14 4204 494 468 360 23 56 102 9 849 4 17 12 68
19 37 14 4229 115 87 363 22 50 106 10 845 3 15 14 67
20 78 17 5170 200 169 456 26 69 108 9 1119 5 21 25 49
21 53 16 4817 78 51 394 22 56 106 9 978 4 17 22 57
22 32 13 3474 486 463 347 22 48 106 9 769 3 17 17 63
23 43 15 4572 59 34 361 21 46 102 10 947 4 15 22 59
从上面的输出可以总结出xcal 字段似乎太高,特别是所指定的系统相对空闲程度。mpstat
通过检查sys 内核统计信息的xcalls 字段确定xcal 字段的值。因此,通过启用xcalls
sysinfo 探测器可以轻松地研究此异常,如下例所示:
# dtrace -n ] = count()}’
dtrace: description ’xcalls’ matched 4 probes
^C
dtterm 1
nsrd 1
in.mpathd 2
top 3
示例
第23 章• sysinfo 提供器265
lockd 4
java_vm 10
ksh 19
iCald.pl6+RPATH 28
nwadmin 30
fsflush 34
nsrindexd 45
in.rlogind 56
in.routed 100
dtrace 153
rpc.rstatd 246
imapd 377
sched 431
nfsd 1227
find 3767
该输出说明了查找交叉调用的源的位置。一些数量的find(1) 处理导致大多数交叉调用。以
下D脚本可用于进一步详细了解该问题:
syscall:::entry
/execname == "find"/
{
self->syscall = probefunc;
self->insys = 1;
}
示例
266 Solaris 动态跟踪指南• 2006 年7 月
sysinfo:::xcalls
/execname == "find"/
{
@[self->insys ? self->syscall : ""] = count();
}
syscall:::return
/self->insys/
{
self->insys = 0;
self->syscall = NULL;
}
此脚本使用syscall 提供器将来自find 的交叉调用归结到特定系统调用。一些交叉调用
(如由于页面错误产生的系统调用)可能不是通过系统调用发出。此脚本在这些情况下将
列显""。运行此脚本将会生成与以下示例类似的输出:
# dtrace -s ./find.d
dtrace: script ’./find.d’ matched 444 probes
^C
2
lstat64 2433
getdents64 14873
此输出指示由find 触发的大多数交叉调用又被getdents(2) 系统调用触发。进一步的了解取
决于您要了解的具体方面。如果要了解为什么find 进程进行getdents 调用,可以编写D脚
本在find 触发交叉调用时聚集ustack()。如果要了解为什么getdents 调用触发交叉调用,
可以编写D脚本在find 触发交叉调用时聚集stack()。无论下一步执行什么,xcalls 探测
器的存在都将使您快速发现异常监视输出的根本原因。
示例
第23 章• sysinfo 提供器267
稳定性
sysinfo 提供器使用DTrace 的稳定性机制说明其稳定性,如下表所示。有关稳定性机制的
更多信息,请参见第39 章。
元素名称稳定性数据稳定性相关性类
提供器发展中发展中ISA
模块专用专用未知
函数专用专用未知
名称发展中发展中ISA
参数专用专用ISA
稳定性
268 Solaris 动态跟踪指南• 2006 年7 月
vminfo 提供器
vminfo 提供器提供了与vm 内核统计信息对应的探测器。由于这些统计信息为系统监视实用
程序(如vmstat(1M))提供输入,因此vminfo 提供器可以快速查看观察到的异常行为。
探测器
vminfo 提供器提供了与vm 命名的内核统计信息中的字段对应的探测器:vminfo 提供的探测
器就在递增相应的vm 值之前的瞬间触发。要显示vm 命名的内核统计信息的名称和当前值,
请使用kstat(1M) 命令,如以下示例所示:
$kstat -n vm
module: cpu instance: 0
name: vm class: misc
anonfree 13
anonpgin 2620
anonpgout 13
as_fault 12528831
cow_fault 2278711
crtime 202.10625712
dfree 1328740
execfree 0
execpgin 5541
24 第2 4 章
269
...
表24–1 中对vminfo 探测器进行了说明。
表24–1 vminfo 探测器
anonfree 作为分页活动的一部分,释放未修改的匿名页时将触发的探测器。匿名页是
指那些与文件不关联的页面。包含此类页面的内存包括堆内存、栈内存或通
过显式映射zero(7D) 获取的内存。
anonpgin 从交换设备调进匿名页时将触发的探测器。
anonpgout 将已修改的匿名页调出到交换设备时将触发的探测器。
as_fault 在页面上捕获到故障,并且该故障既不是保护故障,也不是写复制故障时将
触发的探测器。
cow_fault 在页面上捕获到写复制故障时将触发的探测器。arg0 包含由于写复制而创建
的页数。
dfree 由于分页活动而释放页面时将触发的探测器。触发dfree 时,anonfree、
execfree 或fsfree 之一也必然在随后触发。
execfree 由于分页活动而释放未修改的可执行页时将触发的探测器。
execpgin 从后备存储调进可执行页时将触发的探测器。
execpgout 将已修改的可执行页调出到后备存储时将触发的探测器。可执行页的大多数
分页都与execfree 有关。只有在内存中修改了可执行页时,才能触发
execpgout,这种情况在多数系统中不常见。
fsfree 作为分页活动的一部分,释放未修改的文件系统数据页时将触发的探测器。
fspgin 从后备存储调进文件系统页时将触发的探测器。
fspgout 将已修改的文件系统页调出到后备存储时将触发的探测器。
kernel_asflt 内核在页面自身的地址空间中捕获到页面故障时将触发的探测器。在触发
kernel_asflt 之前的瞬间会触发as_fault 探测器。
maj_fault 捕获到导致从后备存储或交换设备执行I/O 操作的页面故障时将触发的探测
器。在触发maj_fault 之前的瞬间会触发pgin 探测器。
pgfrec 从可用页列表回收页面时将触发的探测器。
pgin 从后备存储或交换设备调进页面时将触发的探测器。此探测器与maj_fault 不
同,因为maj_fault 仅在页面由于故障而调进时触发,而pgin 则无论原因是
什么,每次调进页面时都会触发。
pgout 将页面调出到后备存储或交换设备时将触发的探测器。
探测器
270 Solaris 动态跟踪指南• 2006 年7 月
表24–1 vminfo 探测器(续)
pgpgin 从后备存储或交换设备调进页面时将触发的探测器。pgpgin 和pgin 之间的唯
一区别在于,pgpgin 包含按照arg0 调进的页数,pgin 则在arg0 中始终包含
1。
pgpgout 将页面调出到后备存储或交换设备时将触发的探测器。pgpgout 和pgout 之间
的唯一区别在于,pgpgout 包含按照arg0 调出的页数。(pgout 则在arg0 中
始终包含1。)
pgrec 回收页面时将触发的探测器。
pgrrun 调度页面调度程序时将触发的探测器。
pgswapin 从换出进程换入页面时将触发的探测器。换入的页数包含在arg0 中。
pgswapout 作为换出进程的一部分,换出页面时将触发的探测器。换出的页数包含在
arg0 中。
prot_fault 由于保护违规而捕获到页面故障时将触发的探测器。
rev 页面守护进程在所有页面中启动新循环时将触发的探测器。
scan 页面守护进程检查页面时将触发的探测器。
softlock 作为在页面上放置软件锁的一部分,页面出现故障时将触发的探测器。
swapin 将换出进程换回时将触发的探测器。
swapout 换出进程时将触发的探测器。
zfod 根据需要创建用零填充的页面时将触发的探测器。
参数
arg0 统计信息将递增的值。对于大多数探测器,此参数始终为1,但对于一些探测
器,此参数可以采用其他值;在表24–1 中,对这些探测器进行了说明。
arg1 指向要递增的统计信息当前值的指针。此值是一个64 位数,将按arg0 中的值
递增。取消引用此指针后,使用者可确定与探测器对应的统计信息的当前计
数。
示例
检查vmstat(1M) 的以下输出:
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd s0 — — in sy cs us sy id
示例
 
 
以上文章转自于 : http://developers.sun.com.cn/
 
阅读(424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~