diff options
author | John Kacur <jkacur@redhat.com> | 2012-11-09 16:25:18 +0100 |
---|---|---|
committer | John Kacur <jkacur@redhat.com> | 2012-11-09 16:25:18 +0100 |
commit | 93e525fac1402e79744cb1a9bb16ef96b98c272b (patch) | |
tree | 3717a82c437e0f1a9cb35cd833c5451d294f6503 | |
parent | 9854a61da92d80ccce74e091ddc9d4c0e3983e79 (diff) | |
parent | 7667ff6946931558ff1c148c067faf34eba2bb5d (diff) | |
download | rt-tests-93e525fac1402e79744cb1a9bb16ef96b98c272b.tar.gz |
Merge branch 'clrkwllms/work' into rt-tests-0.84-devel
Signed-off-by: John Kacur <jkacur@redhat.com>
-rw-r--r-- | src/cyclictest/cyclictest.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c index 807041d..abf3e8b 100644 --- a/src/cyclictest/cyclictest.c +++ b/src/cyclictest/cyclictest.c @@ -249,6 +249,7 @@ static char functiontracer[MAX_PATH]; static char traceroptions[MAX_PATH]; static int trace_fd = -1; +static int tracemark_fd = -1; static int kernvar(int mode, const char *name, char *value, size_t sizeofvalue) { @@ -378,6 +379,27 @@ static int trace_file_exists(char *name) return stat(path, &sbuf) ? 0 : 1; } +#define TRACEBUFSIZ 1024 +static __thread char tracebuf[TRACEBUFSIZ]; + +static void tracemark(char *fmt, ...) +{ + va_list ap; + int len; + + /* bail out if we're not tracing */ + /* or if the kernel doesn't support trace_mark */ + if (tracemark_fd < 0) + return; + + va_start(ap, fmt); + len = vsnprintf(tracebuf, TRACEBUFSIZ, fmt, ap); + va_end(ap); + write(tracemark_fd, tracebuf, len); +} + + + void tracing(int on) { if (on) { @@ -540,6 +562,14 @@ static void setup_tracer(void) fatal("unable to open %s for tracing", path); } + /* open the tracemark file descriptor */ + if (tracemark_fd == -1) { + char path[MAX_PATH]; + strcat(strcpy(path, fileprefix), "trace_marker"); + if ((tracemark_fd = open(path, O_WRONLY)) == -1) + warn("unable to open trace_marker file: %s\n", path); + } + } else { setkernvar("trace_all_cpus", "1"); setkernvar("trace_freerunning", "1"); @@ -839,6 +869,7 @@ void *timerthread(void *param) if (!stopped && tracelimit && (diff > tracelimit)) { stopped++; + tracemark("hit latency threshold (%d > %d)", diff, tracelimit); tracing(0); shutdown++; pthread_mutex_lock(&break_thread_id_lock); @@ -1830,6 +1861,8 @@ int main(int argc, char **argv) /* close any tracer file descriptors */ + if (tracemark_fd >= 0) + close(tracemark_fd); if (trace_fd >= 0) close(trace_fd); |