summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Kacur <jkacur@redhat.com>2012-11-09 16:25:18 +0100
committerJohn Kacur <jkacur@redhat.com>2012-11-09 16:25:18 +0100
commit93e525fac1402e79744cb1a9bb16ef96b98c272b (patch)
tree3717a82c437e0f1a9cb35cd833c5451d294f6503
parent9854a61da92d80ccce74e091ddc9d4c0e3983e79 (diff)
parent7667ff6946931558ff1c148c067faf34eba2bb5d (diff)
downloadrt-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.c33
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);