|
Key
This line was removed.
This word was removed. This word was added.
This line was added.
|
Comment:
Changes (1)
View page history... {anchor:top} h1. {anchor:CHP-SYSINFO} {{sysinfo}} Provider The {{sysinfo}} provider makes available probes that correspond to kernel statistics classified by the name {{sys}}. Because these statistics provide the input for system monitoring utilities like [{{mpstat}}(1M)|http://docs.sun.com/doc/819-2240/mpstat-1m?a=view], the {{sysinfo}} provider enables quick exploration of observed aberrant behavior. [Top|#top] h2. {anchor:CHP-SYSINFO-1} Probes The {{sysinfo}} provider makes available probes that correspond to the fields in the {{sys}} named kernel statistic: a probe provided by {{sysinfo}} fires immediately before the corresponding {{sys}} value is incremented. The following example shows how to display both the names and the current values of the {{sys}} named kernel statistic using the [{{kstat}}(1M)|http://docs.sun.com/doc/819-2240/kstat-1m?a=view] command. {noformat} $ kstat -n sys module: cpu instance: 0 name: sys class: misc bawrite 123 bread 2899 bwrite 17995 cpu_ticks_idle 73743866 cpu_ticks_kernel 2096277 cpu_ticks_user 1010122 cpu_ticks_wait 46413 ... {noformat} The {{sysinfo}} probes are described in [Table 23–1|#TBL-SYSINFO]. h6. {anchor:TBL-SYSINFO} {{sysinfo}} Probes |{{bawrite}}|Probe that fires whenever a buffer is about to be asynchronously written out to a device.| |{{bread}}|Probe that fires whenever a buffer is physically read from a device. {{bread}} fires _after_ the buffer has been requested from the device, but _before_ blocking pending its completion.| |
| |{{bwrite}}|Probe that fires whenever a buffer is about to be written out to a device, whether synchronously _or_ asynchronously.| |{{cpu_ticks_idle}}|Probe that fires when the periodic system clock has made the determination that a CPU is _idle_. Note that this probe fires in the context of the system clock and therefore fires on the CPU running the system clock. The {{cpu_t}} argument ({{arg2}}) indicates the CPU that has been deemed idle. See [Arguments|#CHP-SYSINFO-ARGS] for details.| |
| |{{cpu_ticks_kernel}}|Probe that fires when the periodic system clock has made the determination that a CPU is executing in the _kernel_. This probe fires in the context of the system clock and therefore fires on the CPU running the system clock. The {{cpu_t}} argument ({{arg2}}) indicates the CPU that has been deemed to be executing in the kernel. See [Arguments|#CHP-SYSINGFO-ARGS] for details.| |
| |{{cpu_ticks_user}}|Probe that fires when the periodic system clock has made the determination that a CPU is executing in _user mode_. This probe fires in the context of the system clock and therefore fires on the CPU running the system clock. The {{cpu_t}} argument ({{arg2}}) indicates the CPU that has been deemed to be running in user-mode. See [Arguments|#CHP-SYSINFO-ARGS] for details.| |{{cpu_ticks_wait}}|Probe that fires when the periodic system clock has made the determination that a CPU is otherwise idle, but some threads are waiting for I/O on the CPU. This probe fires in the context of the system clock and therefore fires on the CPU running the system clock. The {{cpu_t}} argument ({{arg2}}) indicates the CPU that has been deemed waiting on I/O. See [Arguments|#CHP-SYSINFO-ARGS] for details.| |
... |{{idlethread}}|Probe that fires whenever a CPU enters the idle loop.| |{{intrblk}}|Probe that fires whenever an interrupt thread blocks.| |{{inv_swtch}}|Probe that fires whenever a running thread is forced to involuntarily give up the CPU.| |{{lread}}|Probe that fires whenever a buffer is logically read from a device.| |{{lwrite}}|Probe that fires whenever a buffer is logically written to a device| |{{modload}}|Probe that fires whenever a kernel module is loaded.| |{{modunload}}|Probe that fires whenever a kernel module is unloaded.| |{{msg}}|Probe that fires whenever a [{{msgsnd}}(2)|http://docs.sun.com/doc/819-2241/msgsnd-2?a=view] or [{{msgrcv}}(2)|http://docs.sun.com/doc/819-2241/msgrcv-2?a=view] system call is made, but before the message queue operations have been performed.| |{{mutex_adenters}}|Probe that fires whenever an attempt is made to acquire an owned adaptive lock. If this probe fires, one of the {{lockstat}} provider's {{adaptive-block}} or {{adaptive-spin}} probes will also fire. See [Chapter 18, lockstat Provider|lockstat Provider] for details.| |{{namei}}|Probe that fires whenever a name lookup is attempted in the filesystem.| |{{nthreads}}|Probe that fires whenever a thread is created.| |{{phread}}|Probe that fires whenever a raw I/O read is about to be performed.| |{{phwrite}}|Probe that fires whenever a raw I/O write is about to be performed.| |{{procovf}}|Probe that fires whenever a new process cannot be created because the system is out of process table entries.| |{{pswitch}}|Probe that fires whenever a CPU switches from executing one thread to executing another.| |{{readch}}|Probe that fires after each successful read, but before control is returned to the thread performing the read. A read may occur through the [{{read}}(2)|http://docs.sun.com/doc/819-2241/read-2?a=view], [{{readv}}(2)|http://docs.sun.com/doc/819-2241/readv-2?a=view] or [{{pread}}(2)|http://docs.sun.com/doc/819-2241/pread-2?a=view] system calls. {{arg0}} contains the number of bytes that were successfully read.| |{{rw_rdfails}}|Probe that fires whenever an attempt is made to read-lock a readers/writer when the lock is either held by a writer, or desired by a writer. If this probe fires, the {{lockstat}} provider's {{rw-block}} probe will also fire. See [Chapter 18, lockstat Provider|lockstat Provider] for details.| |{{rw_wrfails}}|Probe that fires whenever an attempt is made to write-lock a readers/writer lock when the lock is held either by some number of readers or by another writer. If this probe fires, the {{lockstat}} provider's {{rw-block}} probe will also fire. See [Chapter 18, lockstat Provider|lockstat Provider] for details.| |{{sema}}|Probe that fires whenever a [{{semop}}(2)|http://docs.sun.com/doc/819-2241/semop-2?a=view] system call is made, but before any semaphore operations have been performed.| |{{sysexec}}|Probe that fires whenever an [{{exec}}(2)|http://docs.sun.com/doc/819-2241/exec-2?a=view] system call is made.| |{{sysfork}}|Probe that fires whenever a [{{fork}}(2)|http://docs.sun.com/doc/819-2241/fork-2?a=view] system call is made.| |{{sysread}}|Probe that fires whenever a [{{read}}(2)|http://docs.sun.com/doc/819-2241/read-2?a=view], [{{readv}}(2)|http://docs.sun.com/doc/819-2241/readv-2?a=view], or [{{pread}}(2)|http://docs.sun.com/doc/819-2241/pread-2?a=view] system call is made.| |{{sysvfork}}|Probe that fires whenever a [{{vfork}}(2)|http://docs.sun.com/doc/819-2241/vfork-2?a=view] system call is made.| |{{syswrite}}|Probe that fires whenever a [{{write}}(2)|http://docs.sun.com/doc/819-2241/write-2?a=view], [{{writev}}(2)|http://docs.sun.com/doc/819-2241/writev-2?a=view], or [{{pwrite}}(2)|http://docs.sun.com/doc/819-2241/pwrite-2?a=view] system call is made.| |{{trap}}|Probe that fires whenever a processor trap occurs. Note that some processors, in particular UltraSPARC variants, handle some light-weight traps through a mechanism that does not cause this probe to fire.| |{{ufsdirblk}}|Probe that fires whenever a directory block is read from the UFS file system. See [{{ufs}}(7FS)|http://docs.sun.com/doc/819-2254/ufs-7fs?a=view] for details on UFS.| |{{ufsiget}}|Probe that fires whenever an inode is retrieved. See [{{ufs}}(7FS)|http://docs.sun.com/doc/819-2254/ufs-7fs?a=view] for details on UFS.| |{{ufsinopage}}|Probe that fires after an in-core inode _without_ any associated data pages has been made available for reuse. See [{{ufs}}(7FS)|http://docs.sun.com/doc/819-2254/ufs-7fs?a=view] for details on UFS.| |{{ufsipage}}|Probe that fires after an in-core inode _with_ associated data pages has been made available for reuse. This probe fires after the associated data pages have been flushed to disk. See [{{ufs}}(7FS)|http://docs.sun.com/doc/819-2254/ufs-7fs?a=view] for details on UFS.| |{{wait_ticks_io}}|Probe that fires when the periodic system clock has made the determination that a CPU is otherwise idle but some threads are waiting for I/O on the CPU. This probe fires in the context of the system clock and therefore fires on the CPU running the system clock. The {{cpu_t}} argument ({{arg2}}) indicates the CPU that is described as waiting for I/O. See [Arguments|#CHP-SYSINFO-ARGS] for details on {{arg2}}. No semantic difference between {{wait_ticks_io}} and {{cpu_ticks_wait}}; {{wait_ticks_io}} exists solely for historical reasons.| |{{writech}}|Probe that fires after each successful write, but before control is returned to the thread performing the write. A write may occur through the [{{write}}(2)|http://docs.sun.com/doc/819-2241/write-2?a=view], [{{writev}}(2)|http://docs.sun.com/doc/819-2241/writev-2?a=view] or [{{pwrite}}(2)|http://docs.sun.com/doc/819-2241/pwrite-2?a=view] system calls. {{arg0}} contains the number of bytes that were successfully written.| |{{xcalls}}|Probe that fires whenever a cross-call is about to be made. A cross-call is the operating system's mechanism for one CPU to request immediate work of another CPU.| [Top|#top] h2. {anchor:CHP-SYSINFO-ARGS} Arguments The arguments to {{sysinfo}} probes are as follows: |{{arg0}}|The value by which the statistic is to be incremented. For most probes, this argument is always 1, but for some probes this argument may take other values.| |{{arg1}}|A pointer to the current value of the statistic to be incremented. This value is a 64–bit quantity that will be incremented by the value in {{arg0}}. Dereferencing this pointer enables consumers to determine the current count of the statistic corresponding to the probe.| |{{arg2}}|A pointer to the {{cpu_t}} structure that corresponds to the CPU on which the statistic is to be incremented. This structure is defined in {{<sys/cpuvar.h>}}, but it is part of the kernel implementation and should be considered Private.| The value of {{arg0}} is 1 for most {{sysinfo}} probes. However, the {{readch}} and {{writech}} probes set {{arg0}} to the number of bytes read or written, respectively. This features permits you to determine the size of reads by executable name, as shown in the following example: {noformat} # dtrace -n readch'{@[execname] = quantize(arg0)}' dtrace: description 'readch' matched 4 probes ^C xclock value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 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 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 128 |@@@ 85 256 |@ 24 512 | 8 1024 | 21 2048 |@ 26 4096 | 21 8192 |@@@@ 94 16384 | 0 {noformat} The {{sysinfo}} provider sets {{arg2}} to be a pointer to a {{cpu_t}}, a structure internal to the kernel implementation. Most {{sysinfo}} probes fire on the CPU on which the statistic is being incremented, but some probes do not. The exceptional probes include {{cpu_ticks_idle}}, {{cpu_ticks_kernel}}, {{cpu_ticks_user}} and {{cpu_ticks_wait}}, which always fire on the CPU executing the system clock. Use the {{cpu_id}} member of the {{cpu_t}} structure to determine the CPU of interest. The following D script runs for about ten seconds and gives a quick snapshot of relative CPU behavior on a statistic-by-statistic basis: {noformat} cpu_ticks_* { @[probename] = lquantize(((cpu_t *)arg2)->cpu_id, 0, 1024, 1); } tick-1sec /x++ >= 10/ { exit(0); } {noformat} Running the above script results in output similar to the following example: {noformat} # dtrace -s ./tick.d dtrace: script './tick.d' matched 5 probes 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 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 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 {noformat} [Top|#top] h2. {anchor:CHP-SYSINFO-6} Example Examine the following output from [{{mpstat}}(1M)|http://docs.sun.com/doc/819-2240/mpstat-1m?a=view]: {noformat} 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 {noformat} From the above output, you might conclude that the {{xcal}} field seems too high, especially given the relative idleness of the system. {{mpstat}} determines the value in the {{xcal}} field by examining the {{xcalls}} field of the {{sys}} kernel statistic. This aberration can therefore be explored easily by enabling the {{xcalls}} {{sysinfo}} probe, as shown in the following example: {noformat} # dtrace -n xcalls'{@[execname] = count()}' dtrace: description 'xcalls' matched 4 probes ^C dtterm 1 nsrd 1 in.mpathd 2 top 3 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 {noformat} The output shows where to look for the source of the cross-calls. Some number of [{{find}}(1)|http://docs.sun.com/doc/819-2239/find-1?a=view] processes are causing the majority of the cross-calls. The following D script can be used to understand the problem in further detail: {noformat} syscall:::entry /execname == "find"/ { self->syscall = probefunc; self->insys = 1; } sysinfo:::xcalls /execname == "find"/ { @[self->insys ? self->syscall : "<none>"] = count(); } syscall:::return /self->insys/ { self->insys = 0; self->syscall = NULL; } {noformat} This script uses the {{syscall}} provider to attribute cross-calls from {{find}} to a particular system call. Some cross-calls, such as those resulting from page faults, might not emanate from system calls. The script prints “{{<none>}}” in these cases. Running the script results in output similar to the following example: {noformat} # dtrace -s ./find.d dtrace: script './find.d' matched 444 probes ^C <none> 2 lstat64 2433 getdents64 14873 {noformat} This output indicates that the majority of cross-calls induced by {{find}} are in turn induced by [{{getdents}}(2)|http://docs.sun.com/doc/819-2241/getdents-2?a=view] system calls. Further exploration would depend on the direction you want to explore. If you want to understand why {{find}} processes are making calls to {{getdents}}, you could write a D script to aggregate on {{ustack}} when {{find}} induces a cross-call. If you want to understand why calls to {{getdents}} are inducing cross-calls, you could write a D script to aggregate on {{stack}} when {{find}} induces a cross-call. Whatever your next step, the presence of the {{xcalls}} probe has enabled you to quickly discover the root cause of the unusual monitoring output. [Top|#top] h2. {anchor:CHP-SYSINFO-STABILITY} Stability The {{sysinfo}} provider uses DTrace's stability mechanism to describe its stabilities, as shown in the following table. For more information about the stability mechanism, see [Chapter 39, Stability|Stability]. ||Element||Name stability||Data stability||Dependency class|| |Provider|Evolving|Evolving|ISA| |Module|Private|Private|Unknown| |Function|Private|Private|Unknown| |Name|Evolving|Evolving|ISA| |Arguments|Private|Private|ISA| {excerpt:hidden=true}Converted by tech dogg's sgml2wiki on Tue 20 Nov 2007 at 9:29:59 PM{excerpt} |