xref: /netbsd-src/external/cddl/dtracetoolkit/dist/Net/tcpwdist.d (revision c29d51755812ace2e87aeefdb06cb2b4dac7087a)
1 #!/usr/sbin/dtrace -s
2 /*
3  * tcpwdist.d - simple TCP write distribution by process.
4  *              Written in DTrace (Solaris 10 3/05).
5  *
6  * This measures the size of writes from applications to the TCP level, which
7  * may well be much larger than the MTU size (this is application writes not
8  * packet writes). It can help identify which process is creating network
9  * traffic, and the size of the writes by that application. It uses a simple
10  * probe that produces meaningful output for most protocols.
11  *
12  * Tracking TCP activity by process is complex for a number of reasons,
13  * the greatest is that inbound TCP traffic is asynchronous to the process.
14  * The easiest TCP traffic to match is writes, which this script demonstrates.
15  * However there are still issues - for an inbound telnet connection the
16  * writes are associated with the command, for example "ls -l", not something
17  * meaningful such as "in.telnetd".
18  *
19  * Scripts that match TCP traffic properly include tcpsnoop and tcptop.
20  *
21  * $Id: tcpwdist.d,v 1.1.1.1 2015/09/30 22:01:09 christos Exp $
22  *
23  * USAGE:       tcpwdist.d          # wait several seconds, then hit Ctrl-C
24  *
25  * FIELDS:
26  *		PID	process ID
27  *		CMD	command and argument list
28  *		value	TCP write payload size in bytes
29  *		count	number of writes
30  *
31  * SEE ALSO:	tcpsnoop, tcptop
32  *
33  * COPYRIGHT: Copyright (c) 2005, 2006 Brendan Gregg.
34  *
35  * CDDL HEADER START
36  *
37  *  The contents of this file are subject to the terms of the
38  *  Common Development and Distribution License, Version 1.0 only
39  *  (the "License").  You may not use this file except in compliance
40  *  with the License.
41  *
42  *  You can obtain a copy of the license at Docs/cddl1.txt
43  *  or http://www.opensolaris.org/os/licensing.
44  *  See the License for the specific language governing permissions
45  *  and limitations under the License.
46  *
47  * CDDL HEADER END
48  *
49  * 09-Jul-2004	Brendan Gregg	Created this.
50  * 14-Jun-2005	   "      "	Rewrote this as tcpwdist.d.
51  * 20-Apr-2006	   "      "	Last update.
52  */
53 
54 #pragma D option quiet
55 
56 /*
57  * Print header
58  */
59 dtrace:::BEGIN
60 {
61 	printf("Tracing... Hit Ctrl-C to end.\n");
62 }
63 
64 /*
65  * Process TCP Write
66  */
67 fbt:ip:tcp_output:entry
68 {
69 	/* fetch details */
70 	this->size = msgdsize(args[1]);
71 
72 	/* store details */
73 	@Size[pid, curpsinfo->pr_psargs] = quantize(this->size);
74 }
75 
76 /*
77  * Print final report
78  */
79 dtrace:::END
80 {
81 	printa(" PID: %-6d CMD: %S\n%@d\n", @Size);
82 }
83