File: apicalls.stp

package info (click to toggle)
db5.3 5.3.28%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 158,500 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,264; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (51 lines) | stat: -rwxr-xr-x 1,296 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/stap
/*
 * Copyright (c) 2011, 2013 Oracle and/or its affiliates.  All rights reserved.
 *
 * apicalls - Summarize DB API call count grouped by thread.
 *
 * This summarizes the count of DB apicalls grouped by thread or process.
 *
 * The path to the DB library is required to be the first argument.
 *
 * To limit tracing to a particular process use one of the stap options:
 *	-x <pid> or
 *	-c "<program> [<program arguments>..]"
 *
 */

global calls

probe begin
{
	printf("DB API call counts of ");
	if (target() == 0)
		printf("processes using \"%s\"", @1)
	else
		printf("process %d", target());
	printf("; interrupt to display summary\n")
}

probe process(@1).function("db_*create").call,
      process(@1).function("__*pp").call
{
	calls[(target() == 0 ? pid() : tid()), probefunc()] <<< 1;
}

probe end
{
	any_seen = 0;
	/* Display counts grouped by process, or by thread. */
	if (target() == 0)
		printf("%-20s %7s %9s\n",
		    "Function", "process", "callcount")
	else
		printf("%-20s %7s %9s for process %d\n",
		    "Function", "thread", "callcount", target());
	foreach ([a,b] in calls+) {
		printf("%-20s %7d %9d\n", b, a, @count(calls[a,b]));
		any_seen = 1;
	}
	if (!any_seen)
		printf("No probes were triggered in %s; it might not be the correct library\n", @1);
}