vminfo Provider
The vminfo provider makes available probes that correspond to the vm kernel statistics. Because these statistics provide the input for system monitoring utilities like vmstat(1M)
, the vminfo provider enables quick exploration of observed aberrant behavior.
Top
Probes
The vminfo provider makes available probes that correspond to the fields in the vm named kernel statistic: a probe provided by vminfo fires immediately before the corresponding vm value is incremented. To display both the names and the current values of the vm named kernel statistic, use the kstat(1M)
command, as shown in the following example:
The vminfo probes are described in Table 24–1.
vminfo Probes
| anonfree |
Probe that fires whenever an unmodified anonymous page is freed as part of paging activity. Anonymous pages are those that are not associated with a file. Memory containing such pages includes heap memory, stack memory, or memory obtained by explicitly mapping zero(7D) . |
| anonpgin |
Probe that fires whenever an anonymous page is paged in from a swap device. |
| anonpgout |
Probe that fires whenever a modified anonymous page is paged out to a swap device. |
| as_fault |
Probe that fires whenever a fault is taken on a page and the fault is neither a protection fault nor a copy-on-write fault. |
| cow_fault |
Probe that fires whenever a copy-on-write fault is taken on a page. arg0 contains the number of pages that are created as a result of the copy-on-write. |
| dfree |
Probe that fires whenever a page is freed as a result of paging activity. Whenever dfree fires, exactly one of anonfree, execfree or fsfree will also subsequently fire. |
| execfree |
Probe that fires whenever an unmodified executable page is freed as a result of paging activity. |
| execpgin |
Probe that fires whenever an executable page is paged in from the backing store. |
| execpgout |
Probe that fires whenever a modified executable page is paged out to the backing store. Most paging of executable pages occurs in terms of execfree. execpgout can only fire if an executable page is modified in memory, an uncommon occurrence in most systems. |
| fsfree |
Probe that fires whenever an unmodified file system data page is freed as part of paging activity. |
| fspgin |
Probe that fires whenever a file system page is paged in from the backing store. |
| fspgout |
Probe that fires whenever a modified file system page is paged out to the backing store. |
| kernel_asflt |
Probe that fires whenever a page fault is taken by the kernel on a page in its own address space. Whenever kernel_asflt fires, it will be immediately preceded by a firing of the as_fault probe. |
| maj_fault |
Probe that fires whenever a page fault is taken that results in I/O from a backing store or swap device. Whenever maj_fault fires, it will be immediately preceded by a firing of the pgin probe. |
| pgfrec |
Probe that fires whenever a page is reclaimed off of the free page list. |
| pgin |
Probe that fires whenever a page is paged in from the backing store or from a swap device. This probe differs from maj_fault in that maj_fault only fires when a page is paged in as a result of a page fault. pgin fires every time a page is paged in, regardless of the reason. |
| pgout |
Probe that fires whenever a page is paged out to the backing store or to a swap device. |
| pgpgin |
Probe that fires whenever a page is paged in from the backing store or from a swap device. The only difference between pgpgin and pgin is that pgpgin contains the number of pages paged in as arg0. pgin always contains 1 in arg0. |
| pgpgout |
Probe that fires whenever a page is paged out to the backing store or to a swap device. The only difference between pgpgout and pgout is that pgpgout contains the number of pages paged out as arg0. (pgout always contains 1 in arg0.) |
| pgrec |
Probe that fires whenever a page is reclaimed. |
| pgrrun |
Probe that fires whenever the pager is scheduled. |
| pgswapin |
Probe that fires whenever pages from a swapped-out process are swapped in. The number of pages swapped in is contained in arg0. |
| pgswapout |
Probe that fires whenever pages are swapped out as part of swapping out a process. The number of pages swapped out is contained in arg0. |
| prot_fault |
Probe that fires whenever a page fault is taken due to a protection violation. |
| rev |
Probe that fires whenever the page daemon begins a new revolution through all pages. |
| scan |
Probe that fires whenever the page daemon examines a page. |
| softlock |
Probe that fires whenever a page is faulted as a part of placing a software lock on the page. |
| swapin |
Probe that fires whenever a swapped-out process is swapped back in. |
| swapout |
Probe that fires whenever a process is swapped out. |
| zfod |
Probe that fires whenever a zero-filled page is created on demand. |
Top
Arguments
| arg0 |
The value by which the statistic is to be incremented. For most probes, this argument is always 1, but for some it may take other values; these probes are noted in Table 24–1. |
| 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 allows consumers to determine the current count of the statistic corresponding to the probe. |
Top
Example
Examine the following output from vmstat(1M)
:
The pi column in the above output denotes the number of pages paged in. The vminfo provider enables you to learn more about the source of these page-ins, as shown in the following example:
The output shows that a process associated with the StarOffice™ software, soffice.bin, is responsible for most of the page-ins. To get a better picture of soffice.bin in terms of virtual memory behavior, you could enable all vminfo probes. The following example runs dtrace(1M)
while launching the StarOffice software:
The following example script provides more information about the virtual memory behavior of the StarOffice software during its startup:
Run the script while again starting the StarOffice software. Then, create a new drawing, create a new presentation, and then close all files and quit the application. Press Control-C in the shell running the D script. The results provide a view of some virtual memory behavior over time:
The output shows some StarOffice behavior with respect to the virtual memory system. For example, the maj_fault probe didn't fire until a new instance of the application was started. As you would hope, a “warm start” of StarOffice did not result in new major faults. The as_fault output shows an initial burst of activity, latency while the user located the menu to create a new drawing, another period of idleness, and a final burst of activity when the user clicked on a new presentation. The zfod output shows that creating the new presentation induced significant pressure for zero-filled pages, but only for a short period of time.
The next iteration of DTrace investigation in this example would depend on the direction you want to explore. If you want to understand the source of the demand for zero-filled pages, you could aggregate on ustack in a zfod enabling. You might want to establish a threshold for zero-filled pages and use the stop destructive action to stop the offending process when the threshold is exceeded. This approach would enable you to use more traditional debugging tools like truss(1)
or mdb(1)
. The vminfo provider enables you to associate statistics seen in the output of conventional tools like vmstat(1M)
with the applications that are inducing the systemic behavior.
Top
Stability
The vminfo 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.
| 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 |