libdb/util/systemtap/apicalls.stp

52 lines
1.3 KiB
Text
Raw Normal View History

#!/usr/bin/stap
/*
2012-11-14 20:13:24 +00:00
* Copyright (c) 2011, 2012 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);
}