xref: /netbsd-src/external/cddl/dtracetoolkit/dist/Mem/anonpgpid.d (revision c29d51755812ace2e87aeefdb06cb2b4dac7087a)
1 #!/usr/sbin/dtrace -Cs
2 /*
3  * anonpgpid.d - anonymous memory paging info by process on CPU.
4  *               Written using DTrace (Solaris 10 3/05).
5  *
6  * This scripts may help identify which processes are affected by a system
7  * with low memory, which is paging to the physical swap device. A report
8  * of the process on the CPU when paging occured is printed.
9  *
10  * $Id: anonpgpid.d,v 1.1.1.1 2015/09/30 22:01:09 christos Exp $
11  *
12  * USAGE:	anonpgpid.d 	# hit Ctrl-C to end
13  *
14  * FIELDS:
15  *		PID		Process ID
16  *		CMD		Process name
17  *		D		Direction, Read or Write
18  *		BYTES		Total bytes during sample
19  *
20  * NOTES:
21  *
22  * This program is currently an approximation - often the process when writing
23  * pages to swap will be "pageout" the pageout scanner, or "rcapd" the
24  * resource capping daemon.
25  *
26  * THANKS: James Dickens
27  *
28  * COPYRIGHT: Copyright (c) 2006 Brendan Gregg.
29  *
30  * CDDL HEADER START
31  *
32  *  The contents of this file are subject to the terms of the
33  *  Common Development and Distribution License, Version 1.0 only
34  *  (the "License").  You may not use this file except in compliance
35  *  with the License.
36  *
37  *  You can obtain a copy of the license at Docs/cddl1.txt
38  *  or http://www.opensolaris.org/os/licensing.
39  *  See the License for the specific language governing permissions
40  *  and limitations under the License.
41  *
42  * CDDL HEADER END
43  *
44  * TODO:
45  *
46  * Track processes accurately. This is a little difficult - anonpgout
47  * occurs asynchronously to the process, and events related to this don't
48  * point back to the process.
49  *
50  * Author: Brendan Gregg  [Sydney, Australia]
51  *
52  * 25-Jul-2005	Brendan Gregg	Created this.
53  * 18-Feb-2006	   "      "	Last update.
54  */
55 
56 #include <sys/vnode.h>
57 
58 #pragma D option quiet
59 
60 dtrace:::BEGIN
61 {
62 	printf("Tracing... Hit Ctrl-C to end.\n");
63 }
64 
65 fbt::pageio_setup:entry
66 /((args[2]->v_flag & (VISSWAP | VSWAPLIKE)) != 0)/
67 {
68 	@total[pid, execname, args[3] & B_READ ? "R" : "W"] = sum(arg1);
69 }
70 
71 dtrace:::END
72 {
73 	printf("%6s %-16s %1s %s\n", "PID", "CMD", "D", "BYTES");
74 	printa("%6d %-16s %1s %@d\n", @total);
75 }
76