Você pode fazer isso usando systemtap
. De um dos exemplos em seu site:
general/stopwatches.stp - See the amount of wall clock time a process spends in various states keywords: TIME
The stopwatch.stp script illustrates how to use multiple stopwatches record how much wallclock time a process spends in kernel- and user-space. On exit the script prints out the time in seconds, milliseconds, microseconds, and nanoseconds. Note that this output of this script is not directly comparable to the time command because time records the time that the process is actually active in kernel- and user-space.
# stap stopwatches.stp -c "sleep 1"
Código daquele exemplo reproduzido aqui para ser completo:
#! /usr/bin/env stap
# Copyright (C) 2012 Red Hat, Inc.
# by William Cohen <[email protected]>
#
# exercise the stopwatch tapset
probe begin
{
start_stopwatch("wall");
/* The next two lines assumes that target is running and in user-space. */
start_stopwatch("user");
stop_stopwatch("system")
}
probe syscall.*
{
if (pid() != target()) next
stop_stopwatch("user")
start_stopwatch("system")
}
probe syscall.*.return
{
if (pid() != target()) next
start_stopwatch("user")
stop_stopwatch("system")
}
probe end
{
stop_stopwatch("wall")
stop_stopwatch("user")
stop_stopwatch("system")
w = read_stopwatch_us("wall")
u = read_stopwatch_us("user")
s = read_stopwatch_us("system")
printf ("wall clock %12dus\n", w);
printf ("wall clock in user-space %12dus\n", u);
printf ("wall clock in kernel-space %12dus\n", s);
delete_stopwatch("wall")
delete_stopwatch("user")
delete_stopwatch("system")
}