From: Michal Sojka Date: Fri, 3 Dec 2010 16:13:47 +0000 (+0100) Subject: Add ftrace support X-Git-Tag: fix-allnoconfig~274 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/commitdiff_plain/107f1a1e7afc57354c570406d37f243c592f6ef8?hp=-c Add ftrace support --- 107f1a1e7afc57354c570406d37f243c592f6ef8 diff --git a/latester/latester.c b/latester/latester.c index f418567..9f0a466 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -35,6 +35,8 @@ #include "histogram.h" +//#define FTRACE + #ifndef DEBUG #define dbg(level, fmt, arg...) do {} while (0) #else @@ -278,6 +280,42 @@ static inline get_tstamp(struct timespec *ts) clock_gettime(CLOCK_REALTIME, ts); } + +int trace_fd = -1; +int marker_fd = -1; + +int init_ftrace() +{ +#ifdef FTRACE + char *debugfs; + char path[256]; + FILE *f; + + debugfs = "/sys/kernel/debug"; + if (debugfs) { + strcpy(path, debugfs); + strcat(path,"/tracing/tracing_on"); + trace_fd = open(path, O_WRONLY); + if (trace_fd >= 0) + write(trace_fd, "1", 1); + + strcpy(path, debugfs); + strcat(path,"/tracing/trace_marker"); + marker_fd = open(path, O_WRONLY); + + strcpy(path, debugfs); + strcat(path,"/tracing/set_ftrace_pid"); + f = fopen(path, "w"); + fprintf(f, "%d\n", getpid()); + fclose(f); + system("echo function_graph > /sys/kernel/debug/tracing/current_tracer"); + system("echo can_send > /sys/kernel/debug/tracing/set_graph_function"); + system("echo > /sys/kernel/debug/tracing/trace"); + system("echo 1 > /sys/kernel/debug/tracing/tracing_enabled"); + } +#endif /* FTRACE */ +} + int send_frame(int socket) { struct can_frame frame; @@ -311,7 +349,17 @@ int send_frame(int socket) mi->length = frame.can_dlc; get_tstamp(&mi->ts_sent); mi->sent = frame; + + if (trace_fd >= 0) + write(trace_fd, "1", 1); ret = write(socket, &frame, sizeof(frame)); + if (marker_fd >= 0) { + char marker[100]; + sprintf(marker, "write returned %d\n", ret); + write(marker_fd, marker, strlen(marker)); + } + if (trace_fd >= 0) + write(trace_fd, "0", 1); return ret; } @@ -627,6 +675,8 @@ int main(int argc, const char *argv[]) ret = fcntl(completion_pipe[1], F_SETFL, O_NONBLOCK); if (ret == -1) error(1, errno, "pipe fcntl"); + + init_ftrace(); pthread_create(&thread, 0, measure_thread, NULL);