lkml.org 
[lkml]   [2012]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] FTRACE: Add a "-D usec" switch to limit execution time of "trace-cmd record"
Date
[Applies to trace-cmd.git:699f544895]

It is sometimes useful to have a fairly precise timelimit on the capture
rather than relying on a human to hit Cntrl-C in a timely manner. This
patch simply adds an optional timeout parameter which will automatically
terminate the capture after the specified duration.

Signed-off-by: Gregory Haskins <gregory.haskins@gmail.com>
CC: Steven Rostedt <rostedt@goodmis.org>
---

trace-record.c | 12 +++++++++++-
trace-usage.c | 3 ++-
2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/trace-record.c b/trace-record.c
index fcec28b..444745e 100644
--- a/trace-record.c
+++ b/trace-record.c
@@ -77,6 +77,7 @@ static int buffer_size;
static const char *output_file = "trace.dat";

static int latency;
+static int timeout = -1;
static int sleep_time = 1000;
static int cpu_count;
static int *pids;
@@ -1953,7 +1954,7 @@ void trace_record (int argc, char **argv)
{NULL, 0, NULL, 0}
};

- c = getopt_long (argc-1, argv+1, "+hae:f:Fp:cdo:O:s:r:vg:l:n:P:N:tb:kiT",
+ c = getopt_long (argc-1, argv+1, "+hae:f:Fp:cdo:O:s:r:vg:l:n:D:P:N:tb:kiT",
long_options, &option_index);
if (c == -1)
break;
@@ -2051,6 +2052,9 @@ void trace_record (int argc, char **argv)
optarg++;
optarg[0] = '\0';
break;
+ case 'D':
+ timeout = atoi(optarg);
+ break;
case 'd':
if (extract)
usage(argv);
@@ -2189,8 +2193,14 @@ void trace_record (int argc, char **argv)

if (record) {
signal(SIGINT, finish);
+ signal(SIGALRM, finish);
if (!latency)
start_threads();
+
+ if (timeout > 0) {
+ struct itimerval tv = { {0, 0}, {0, timeout}};
+ setitimer(ITIMER_REAL, &tv, NULL);
+ }
}

if (extract) {
diff --git a/trace-usage.c b/trace-usage.c
index 0e2194e..df41f76 100644
--- a/trace-usage.c
+++ b/trace-usage.c
@@ -17,7 +17,7 @@ static struct usage_help usage_help[] = {
"record",
"record a trace into a trace.dat file",
" %s record [-v][-e event [-f filter]][-p plugin][-F][-d][-o file] \\\n"
- " [-s usecs][-O option ][-l func][-g func][-n func] \\\n"
+ " [-s usecs][-D usecs][-O option ][-l func][-g func][-n func] \\\n"
" [-P pid][-N host:port][-t][-r prio][-b size][command ...]\n"
" -e run command with event enabled\n"
" -f filter for previous -e event\n"
@@ -35,6 +35,7 @@ static struct usage_help usage_help[] = {
" -O option to enable (or disable)\n"
" -r real time priority to run the capture threads\n"
" -s sleep interval between recording (in usecs) [default: 1000]\n"
+ " -D run-time duration (in usecs) [default: disabled]\n"
" -N host:port to connect to (see listen)\n"
" -t used with -N, forces use of tcp in live trace\n"
" -b change kernel buffersize (in kilobytes per CPU)\n"


\
 
 \ /
  Last update: 2012-01-24 23:17    [W:0.026 / U:0.048 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site