commit 09923039ddefe431d8822db046dfe51f123069ac Author: CentOS Sources Date: Tue May 7 09:49:33 2019 -0400 import rt-tests-1.3-13.el8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..06179b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/rt-tests-1.3.tar.gz diff --git a/.rt-tests.metadata b/.rt-tests.metadata new file mode 100644 index 0000000..ca835b7 --- /dev/null +++ b/.rt-tests.metadata @@ -0,0 +1 @@ +0df302aeb536bbc4fc64922815bbd2426efb3184 SOURCES/rt-tests-1.3.tar.gz diff --git a/SOURCES/Add-queuelat-manpage.patch b/SOURCES/Add-queuelat-manpage.patch new file mode 100644 index 0000000..bae08c5 --- /dev/null +++ b/SOURCES/Add-queuelat-manpage.patch @@ -0,0 +1,83 @@ +From f234e04e76e24d497754876f5e7c896dc9693f3e Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Tue, 4 Sep 2018 08:56:35 -0300 +Subject: [PATCH 2/2] Add queuelat manpage + +Add a man page for queuelat, with a short introduction +and description for each option. + +Signed-off-by: Marcelo Tosatti +Signed-off-by: John Kacur +--- + src/queuelat/queuelat.8 | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 59 insertions(+) + create mode 100644 src/queuelat/queuelat.8 + +diff --git a/src/queuelat/queuelat.8 b/src/queuelat/queuelat.8 +new file mode 100644 +index 000000000000..d68beb98bff7 +--- /dev/null ++++ b/src/queuelat/queuelat.8 +@@ -0,0 +1,59 @@ ++.\" Hey, EMACS: -*- nroff -*- ++.TH QUEUELAT 8 "Sept 3, 2018" ++.\" Please adjust this date whenever revising the manpage. ++.\" ++.\" Some roff macros, for reference: ++.\" .nh disable hyphenation ++.\" .hy enable hyphenation ++.\" .ad l left justify ++.\" .ad b justify to both left and right margins ++.\" .nf disable filling ++.\" .fi enable filling ++.\" .br insert line break ++.\" .sp insert n+1 empty lines ++.\" for manpage-specific macros, see man(7) ++.SH NAME ++queuelat \- Queue latency test program ++.SH SYNOPSIS ++.B queuelat ++.RI "[\-h] [\-m " max-queue-len "] [\-c " cycles-per-packet "] [\-p " mpps "] [\-f " tsc-freq "] [\-t " timeout "] \ ++ ++.SH DESCRIPTION ++queuelat simulates a network queue checking for latency ++violations in packet processing. ++ ++.SH OPTIONS ++A summary of options is included below. ++.TP ++.B \-h ++Show help ++.br ++.TP ++.B \-m max-queue-len ++Maximum allowed latency, in nanoseconds. If latency to process ++.br ++any packet exceeds this value, the program quits, ++writing ++.br ++a message to the trace buffer. ++.TP ++.B \-c cycles-per-packet ++Estimated number of cycles it takes to process one packet. ++.br ++This value should come from the envisioned packet ++.br ++forwarding application being simulated. ++.TP ++.B \-p mpps ++Million packets per second that arrive for processing. ++.TP ++.B \-f tsc-freq-mhz ++TSC frequency in MHz. ++.TP ++.B \-t timeout ++Timeout in seconds to quit the program. ++ ++ ++.SH AUTHOR ++queuelat was written by Marcelo Tosatti ++.br +-- +2.14.4 + diff --git a/SOURCES/Remove-numa-option.patch b/SOURCES/Remove-numa-option.patch new file mode 100644 index 0000000..23e4d80 --- /dev/null +++ b/SOURCES/Remove-numa-option.patch @@ -0,0 +1,93 @@ +From be3ef7f9d228c3753ba805a9d25ee4dd26171d67 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 19 Jun 2018 01:38:48 +0200 +Subject: [PATCH] Remove --numa option + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 30 ++++++++++++++---------------- + src/cyclictest/rt_numa.h | 6 ------ + 2 files changed, 14 insertions(+), 22 deletions(-) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 1dce8fc2bb64..484ea7fa3130 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1207,7 +1207,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + {"spike-nodes", required_argument, NULL, OPT_TRIGGER_NODES }, + {"threads", optional_argument, NULL, OPT_THREADS }, + {"unbuffered", no_argument, NULL, OPT_UNBUFFERED }, +- {"numa", no_argument, NULL, OPT_NUMA }, + {"verbose", no_argument, NULL, OPT_VERBOSE }, + {"dbg_cyclictest", no_argument, NULL, OPT_DBGCYCLIC }, + {"policy", required_argument, NULL, OPT_POLICY }, +@@ -1215,7 +1214,7 @@ static void process_options (int argc, char *argv[], int max_cpus) + {"posix_timers", no_argument, NULL, OPT_POSIX_TIMERS }, + {NULL, 0, NULL, 0 }, + }; +- int c = getopt_long(argc, argv, "a::A::b:c:d:D:h:H:i:l:MNo:p:mqrRsSt::uUvD:x", ++ int c = getopt_long(argc, argv, "a::A::b:c:d:D:h:H:i:l:MNo:p:mqrRsSt::uvD:x", + long_options, &option_index); + if (c == -1) + break; +@@ -1350,20 +1349,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + case 'u': + case OPT_UNBUFFERED: + setvbuf(stdout, NULL, _IONBF, 0); break; +- case 'U': +- case OPT_NUMA: /* NUMA testing */ +- numa = 1; /* Turn numa on */ +- if (smp) +- fatal("numa and smp options are mutually exclusive\n"); +- numa_on_and_available(); +-#ifdef NUMA +- num_threads = max_cpus; +- setaffinity = AFFINITY_USEALL; +-#else +- warn("cyclictest was not built with the numa option\n"); +- warn("ignoring --numa or -U\n"); +-#endif +- break; + case 'v': + case OPT_VERBOSE: verbose = 1; break; + case 'x': +@@ -1399,6 +1384,19 @@ static void process_options (int argc, char *argv[], int max_cpus) + } + } + ++ if (!smp) { /* if smp wasn't requested, test for numa automatically */ ++#ifdef NUMA ++ if (numa_available() != -1) { ++ numa = 1; ++ num_threads = max_cpus; ++ setaffinity = AFFINITY_USEALL; ++#else ++ warn("cyclictest was not built with the numa option\n"); ++ numa = 0; ++#endif ++ } ++ } ++ + if (option_affinity) { + if (smp) { + warn("-a ignored due to --smp\n"); +diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h +index ec2994314e80..3970e681fe7b 100644 +--- a/src/cyclictest/rt_numa.h ++++ b/src/cyclictest/rt_numa.h +@@ -192,12 +192,6 @@ static inline void rt_bitmask_free(struct bitmask *mask) + + #endif /* LIBNUMA_API_VERSION */ + +-static void numa_on_and_available() +-{ +- if (numa && (numa_available() == -1)) +- fatal("--numa specified and numa functions not available.\n"); +-} +- + #else /* ! NUMA */ + + struct bitmask { +-- +2.14.4 + diff --git a/SOURCES/add-h-option-to-queuelat.patch b/SOURCES/add-h-option-to-queuelat.patch new file mode 100644 index 0000000..2aaaa20 --- /dev/null +++ b/SOURCES/add-h-option-to-queuelat.patch @@ -0,0 +1,72 @@ +From 05a1ceb9b490b2cb0aff2f10c4753849df05dec0 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Tue, 4 Sep 2018 08:56:34 -0300 +Subject: [PATCH 1/2] add -h option to queuelat + +Add -h (help) option to queuelat, which lists all +options. + +Signed-off-by: Marcelo Tosatti +Signed-off-by: John Kacur +--- + src/queuelat/README | 1 + + src/queuelat/queuelat.c | 17 ++++++++++++++++- + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/queuelat/README b/src/queuelat/README +index 790de3e13c17..4ffdb3753bbd 100644 +--- a/src/queuelat/README ++++ b/src/queuelat/README +@@ -51,6 +51,7 @@ cycles_per_packet: number of cycles to process one packet (int). + mpps(million-packet-per-sec): million packets per second (float). + tsc_freq_mhz: TSC frequency in MHz, as measured by TSC PIT calibration + (search for "Detected XXX MHz processor" in dmesg, and use the integer part). ++timeout: timeout (in seconds). + + How it works + ============ +diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c +index 8bfed274ccab..2230d04bf391 100644 +--- a/src/queuelat/queuelat.c ++++ b/src/queuelat/queuelat.c +@@ -532,6 +532,18 @@ int calculate_nr_packets_drain_per_block(void) + return nr_packets_drain_per_block; + } + ++ ++void print_help(void) ++{ ++ printf("usage: queuelat [options]\n"); ++ printf("-h show this help menu\n"); ++ printf("-m max-queue-len (maximum latency allowed, in nanoseconds) (int)\n"); ++ printf("-c cycles-per-packet (number of cycles to process one packet (int)\n"); ++ printf("-p million-packet-per-sec (million packets per second) (float)\n"); ++ printf("-f tsc-freq-mhz (TSC frequency in MHz) (float)\n"); ++ printf("-t timeout (timeout, in seconds) (int)\n"); ++} ++ + int main(int argc, char **argv) + { + double tsc_freq_mhz; +@@ -549,7 +561,7 @@ int main(int argc, char **argv) + + opterr = 0; + +- while ((c = getopt (argc, argv, "m:c:p:f:t:q:")) != -1) ++ while ((c = getopt (argc, argv, "m:c:p:f:t:q:h")) != -1) + switch (c) + { + case 'm': +@@ -570,6 +582,9 @@ int main(int argc, char **argv) + case 'q': + qvalue = optarg; + break; ++ case 'h': ++ print_help(); ++ return 0; + case '?': + if (optopt == 'm' || optopt == 'c' || optopt == 'p' || + optopt == 'f' || optopt == 't' || optopt == 'q') +-- +2.14.4 + diff --git a/SOURCES/cyclictest-remove-ftrace-code.patch b/SOURCES/cyclictest-remove-ftrace-code.patch new file mode 100644 index 0000000..30a323f --- /dev/null +++ b/SOURCES/cyclictest-remove-ftrace-code.patch @@ -0,0 +1,881 @@ +From f5ccfbe4d6641e48f56152be135d901dd31cba7e Mon Sep 17 00:00:00 2001 +From: Clark Williams +Date: Tue, 16 Jan 2018 15:37:17 -0600 +Subject: [PATCH 1/3] cyclictest: remove ftrace code + +Remove all the code that manipulates tracing values with the exception +of the breaktrace logic. Cyclictest now presumes that any tracing +will be done by the trace-cmd command and will only *stop* tracing +if the breaktrace value is hit. + +Signed-off-by: Clark Williams +(cherry picked from commit 26838f86d54e3ff74223165cbbcc2d211becdaf2) +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 537 +++----------------------------------------- + 1 file changed, 32 insertions(+), 505 deletions(-) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 8d9ec80fc239..1dce8fc2bb64 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -118,23 +118,8 @@ extern int clock_nanosleep(clockid_t __clock_id, int __flags, + #define MSR_SMI_COUNT 0x00000034 + #define MSR_SMI_COUNT_MASK 0xFFFFFFFF + +-int enable_events; +- + static char *policyname(int policy); + +-enum { +- NOTRACE, +- CTXTSWITCH, +- IRQSOFF, +- PREEMPTOFF, +- PREEMPTIRQSOFF, +- WAKEUP, +- WAKEUPRT, +- LATENCY, +- FUNCTION, +- CUSTOM, +-}; +- + /* Struct to transfer parameters to the thread */ + struct thread_param { + int prio; +@@ -201,14 +186,9 @@ static void trigger_update(struct thread_param *par, int diff, int64_t ts); + + static int shutdown; + static int tracelimit = 0; +-static int notrace = 0; +-static int trace_marker = 0; +-static int ftrace = 0; +-static int kernelversion; + static int verbose = 0; + static int oscope_reduction = 1; + static int lockall = 0; +-static int tracetype = NOTRACE; + static int histogram = 0; + static int histofall = 0; + static int duration = 0; +@@ -243,20 +223,10 @@ static pthread_barrier_t align_barr; + static pthread_barrier_t globalt_barr; + static struct timespec globalt; + +-/* Backup of kernel variables that we modify */ +-static struct kvars { +- char name[KVARNAMELEN]; +- char value[KVALUELEN]; +-} kv[KVARS]; +- + static char *procfileprefix = "/proc/sys/kernel/"; + static char *fileprefix; +-static char tracer[MAX_PATH]; + static char fifopath[MAX_PATH]; + static char histfile[MAX_PATH]; +-static char **traceptr; +-static int traceopt_count; +-static int traceopt_size; + + static struct thread_param **parameters; + static struct thread_stat **statistics; +@@ -311,101 +281,14 @@ static void set_latency_target(void) + } + + +-enum kernelversion { +- KV_NOT_SUPPORTED, +- KV_26_LT18, +- KV_26_LT24, +- KV_26_33, +- KV_30 +-}; +- + enum { + ERROR_GENERAL = -1, + ERROR_NOTFOUND = -2, + }; + +-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) +-{ +- char filename[128]; +- int retval = 1; +- int path; +- size_t len_prefix = strlen(fileprefix), len_name = strlen(name); +- +- if (len_prefix + len_name + 1 > sizeof(filename)) { +- errno = ENOMEM; +- return 1; +- } +- +- memcpy(filename, fileprefix, len_prefix); +- memcpy(filename + len_prefix, name, len_name + 1); +- +- path = open(filename, mode); +- if (path >= 0) { +- if (mode == O_RDONLY) { +- int got; +- if ((got = read(path, value, sizeofvalue)) > 0) { +- retval = 0; +- value[got-1] = '\0'; +- } +- } else if (mode == O_WRONLY) { +- if (write(path, value, sizeofvalue) == sizeofvalue) +- retval = 0; +- } +- close(path); +- } +- return retval; +-} +- +-static void setkernvar(const char *name, char *value) +-{ +- int i; +- char oldvalue[KVALUELEN]; +- +- if (kernelversion < KV_26_33) { +- if (kernvar(O_RDONLY, name, oldvalue, sizeof(oldvalue))) +- fprintf(stderr, "could not retrieve %s\n", name); +- else { +- for (i = 0; i < KVARS; i++) { +- if (!strcmp(kv[i].name, name)) +- break; +- if (kv[i].name[0] == '\0') { +- strncpy(kv[i].name, name, +- sizeof(kv[i].name)); +- strncpy(kv[i].value, oldvalue, +- sizeof(kv[i].value)); +- break; +- } +- } +- if (i == KVARS) +- fprintf(stderr, "could not backup %s (%s)\n", +- name, oldvalue); +- } +- } +- if (kernvar(O_WRONLY, name, value, strlen(value))) +- fprintf(stderr, "could not set %s to %s\n", name, value); +- +-} +- +-static void restorekernvars(void) +-{ +- int i; +- +- for (i = 0; i < KVARS; i++) { +- if (kv[i].name[0] != '\0') { +- if (kernvar(O_WRONLY, kv[i].name, kv[i].value, +- strlen(kv[i].value))) +- fprintf(stderr, "could not restore %s to %s\n", +- kv[i].name, kv[i].value); +- } +- } +-} +- + static inline void tsnorm(struct timespec *ts) + { + while (ts->tv_nsec >= NSEC_PER_SEC) { +@@ -422,8 +305,7 @@ static inline int tsgreater(struct timespec *a, struct timespec *b) + + static inline int64_t calcdiff(struct timespec t1, struct timespec t2) + { +- int64_t diff; +- diff = USEC_PER_SEC * (long long)((int) t1.tv_sec - (int) t2.tv_sec); ++ int64_t diff = USEC_PER_SEC * (long long)((int) t1.tv_sec - (int) t2.tv_sec); + diff += ((int) t1.tv_nsec - (int) t2.tv_nsec) / 1000; + return diff; + } +@@ -444,32 +326,13 @@ static inline int64_t calctime(struct timespec t) + return time; + } + +-static void traceopt(char *option) +-{ +- char *ptr; +- if (traceopt_count + 1 > traceopt_size) { +- traceopt_size += 16; +- printf("expanding traceopt buffer to %d entries\n", traceopt_size); +- traceptr = realloc(traceptr, sizeof(char*) * traceopt_size); +- if (traceptr == NULL) +- fatal ("Error allocating space for %d trace options\n", +- traceopt_count+1); +- } +- ptr = malloc(strlen(option)+1); +- if (ptr == NULL) +- fatal("error allocating space for trace option %s\n", option); +- printf("adding traceopt %s\n", option); +- strcpy(ptr, option); +- traceptr[traceopt_count++] = ptr; +-} +- + static int trace_file_exists(char *name) + { +- struct stat sbuf; +- char *tracing_prefix = get_debugfileprefix(); +- char path[MAX_PATH]; +- strcat(strcpy(path, tracing_prefix), name); +- return stat(path, &sbuf) ? 0 : 1; ++ struct stat sbuf; ++ char *tracing_prefix = get_debugfileprefix(); ++ char path[MAX_PATH]; ++ strcat(strcpy(path, tracing_prefix), name); ++ return stat(path, &sbuf) ? 0 : 1; + } + + #define TRACEBUFSIZ 1024 +@@ -483,7 +346,7 @@ static void tracemark(char *fmt, ...) + + /* bail out if we're not tracing */ + /* or if the kernel doesn't support trace_mark */ +- if (tracemark_fd < 0) ++ if (tracemark_fd < 0 || trace_fd < 0) + return; + + va_start(ap, fmt); +@@ -497,45 +360,6 @@ static void tracemark(char *fmt, ...) + write(trace_fd, "0\n", 2); + } + +- +- +-static void tracing(int on) +-{ +- if (notrace) +- return; +- +- if (on) { +- switch (kernelversion) { +- case KV_26_LT18: gettimeofday(0,(struct timezone *)1); break; +- case KV_26_LT24: prctl(0, 1); break; +- case KV_26_33: +- case KV_30: +- write(trace_fd, "1", 1); +- break; +- default: break; +- } +- } else { +- switch (kernelversion) { +- case KV_26_LT18: gettimeofday(0,0); break; +- case KV_26_LT24: prctl(0, 0); break; +- case KV_26_33: +- case KV_30: +- write(trace_fd, "0", 1); +- break; +- default: break; +- } +- } +-} +- +-static int settracer(char *tracer) +-{ +- if (valid_tracer(tracer)) { +- setkernvar("current_tracer", tracer); +- return 0; +- } +- return -1; +-} +- + static void open_tracemark_fd(void) + { + char path[MAX_PATH]; +@@ -557,7 +381,7 @@ static void open_tracemark_fd(void) + * open the tracing_on file so that we can stop the trace + * if we hit a breaktrace threshold + */ +- if (notrace && trace_fd < 0) { ++ if (trace_fd < 0) { + sprintf(path, "%s/%s", fileprefix, "tracing_on"); + if ((trace_fd = open(path, O_WRONLY)) < 0) + warn("unable to open tracing_on file: %s\n", path); +@@ -569,166 +393,19 @@ static void debugfs_prepare(void) + if (mount_debugfs(NULL)) + fatal("could not mount debugfs"); + +- if (kernelversion >= KV_26_33) { +- char testname[MAX_PATH]; +- +- fileprefix = get_debugfileprefix(); +- if (!trace_file_exists("tracing_enabled") && +- !trace_file_exists("tracing_on")) +- warn("tracing_enabled or tracing_on not found\n" +- "debug fs not mounted, " +- "TRACERs not configured?\n", testname); +- } else +- fileprefix = procfileprefix; ++ fileprefix = get_debugfileprefix(); ++ if (!trace_file_exists("tracing_enabled") && ++ !trace_file_exists("tracing_on")) ++ warn("tracing_enabled or tracing_on not found\n" ++ "debug fs not mounted"); + } + + static void enable_trace_mark(void) + { +- if (!trace_marker) +- return; +- +- if (!tracelimit) +- fatal("--tracemark requires -b\n"); +- + debugfs_prepare(); + open_tracemark_fd(); + } + +-static void setup_tracer(void) +-{ +- if (!tracelimit || notrace) +- return; +- +- debugfs_prepare(); +- +- if (kernelversion >= KV_26_33) { +- int ret; +- +- if (trace_file_exists("tracing_enabled") && +- !trace_file_exists("tracing_on")) +- setkernvar("tracing_enabled", "1"); +- +- /* ftrace_enabled is a sysctl variable */ +- /* turn it on if you're doing anything but nop or event tracing */ +- +- fileprefix = procfileprefix; +- if (tracetype) +- setkernvar("ftrace_enabled", "1"); +- else +- setkernvar("ftrace_enabled", "0"); +- fileprefix = get_debugfileprefix(); +- +- /* +- * Set default tracer to nop. +- * this also has the nice side effect of clearing out +- * old traces. +- */ +- ret = settracer("nop"); +- +- switch (tracetype) { +- case NOTRACE: +- /* no tracer specified, use events */ +- enable_events = 1; +- break; +- case FUNCTION: +- ret = settracer("function"); +- break; +- case IRQSOFF: +- ret = settracer("irqsoff"); +- break; +- case PREEMPTOFF: +- ret = settracer("preemptoff"); +- break; +- case PREEMPTIRQSOFF: +- ret = settracer("preemptirqsoff"); +- break; +- case CTXTSWITCH: +- if (valid_tracer("sched_switch")) +- ret = settracer("sched_switch"); +- else { +- if ((ret = event_enable("sched/sched_wakeup"))) +- break; +- ret = event_enable("sched/sched_switch"); +- } +- break; +- case WAKEUP: +- ret = settracer("wakeup"); +- break; +- case WAKEUPRT: +- ret = settracer("wakeup_rt"); +- break; +- default: +- if (strlen(tracer)) { +- ret = settracer(tracer); +- if (strcmp(tracer, "events") == 0 && ftrace) +- ret = settracer(functiontracer); +- } +- else { +- printf("cyclictest: unknown tracer!\n"); +- ret = 0; +- } +- break; +- } +- +- if (enable_events) +- /* turn on all events */ +- event_enable_all(); +- +- if (ret) +- fprintf(stderr, "Requested tracer '%s' not available\n", tracer); +- +- setkernvar(traceroptions, "print-parent"); +- setkernvar(traceroptions, "latency-format"); +- if (verbose) { +- setkernvar(traceroptions, "sym-offset"); +- setkernvar(traceroptions, "sym-addr"); +- setkernvar(traceroptions, "verbose"); +- } else { +- setkernvar(traceroptions, "nosym-offset"); +- setkernvar(traceroptions, "nosym-addr"); +- setkernvar(traceroptions, "noverbose"); +- } +- if (traceopt_count) { +- int i; +- for (i = 0; i < traceopt_count; i++) +- setkernvar(traceroptions, traceptr[i]); +- } +- setkernvar("tracing_max_latency", "0"); +- if (trace_file_exists("latency_hist")) +- setkernvar("latency_hist/wakeup/reset", "1"); +- +- /* open the tracing on file descriptor */ +- if (trace_fd == -1) { +- char path[MAX_PATH]; +- strcpy(path, fileprefix); +- if (trace_file_exists("tracing_on")) +- strcat(path, "tracing_on"); +- else +- strcat(path, "tracing_enabled"); +- if ((trace_fd = open(path, O_WRONLY)) == -1) +- fatal("unable to open %s for tracing", path); +- } +- +- open_tracemark_fd(); +- } else { +- setkernvar("trace_all_cpus", "1"); +- setkernvar("trace_freerunning", "1"); +- setkernvar("trace_print_on_crash", "0"); +- setkernvar("trace_user_triggered", "1"); +- setkernvar("trace_user_trigger_irq", "-1"); +- setkernvar("trace_verbose", "0"); +- setkernvar("preempt_thresh", "0"); +- setkernvar("wakeup_timing", "0"); +- setkernvar("preempt_max_latency", "0"); +- if (ftrace) +- setkernvar("mcount_enabled", "1"); +- setkernvar("trace_enabled", "1"); +- setkernvar("latency_hist/wakeup_latency/reset", "1"); +- } +- +- tracing(1); +-} +- + /* + * parse an input value as a base10 value followed by an optional + * suffix. The input value is presumed to be in seconds, unless +@@ -987,7 +664,9 @@ static void *timerthread(void *param) + int stopped = 0; + cpu_set_t mask; + pthread_t thread; +- unsigned long smi_now, smi_old; ++ unsigned long smi_now, smi_old = 0; ++ ++ memset(&stop, 0, sizeof(stop)); + + /* if we're running in numa mode, set our memory node */ + if (par->node != -1) +@@ -1195,7 +874,6 @@ static void *timerthread(void *param) + stopped++; + tracemark("hit latency threshold (%llu > %d)", + (unsigned long long) diff, tracelimit); +- tracing(0); + shutdown++; + pthread_mutex_lock(&break_thread_id_lock); + if (break_thread_id == 0) +@@ -1281,18 +959,6 @@ out: + /* Print usage information */ + static void display_help(int error) + { +- char tracers[MAX_PATH]; +- char *prefix; +- +- prefix = get_debugfileprefix(); +- if (prefix[0] == '\0') +- strcpy(tracers, "unavailable (debugfs not mounted)"); +- else { +- fileprefix = prefix; +- if (kernvar(O_RDONLY, "available_tracers", tracers, sizeof(tracers))) +- strcpy(tracers, "none"); +- } +- + printf("cyclictest V %1.2f\n", VERSION); + printf("Usage:\n" + "cyclictest \n\n" +@@ -1309,17 +975,13 @@ static void display_help(int error) + #endif + "-A USEC --aligned=USEC align thread wakeups to a specific offset\n" + "-b USEC --breaktrace=USEC send break trace command when latency > USEC\n" +- "-B --preemptirqs both preempt and irqsoff tracing (used with -b)\n" + "-c CLOCK --clock=CLOCK select clock\n" + " 0 = CLOCK_MONOTONIC (default)\n" + " 1 = CLOCK_REALTIME\n" +- "-C --context context switch tracing (used with -b)\n" + "-d DIST --distance=DIST distance of thread intervals in us, default=500\n" + "-D --duration=TIME specify a length for the test run.\n" + " Append 'm', 'h', or 'd' to specify minutes, hours or days.\n" + " --latency=PM_QOS write PM_QOS to /dev/cpu_dma_latency\n" +- "-E --event event tracing (used with -b)\n" +- "-f --ftrace function trace (when -b is active)\n" + "-F --fifo= create a named pipe at path and write stats to it\n" + "-h --histogram=US dump a latency histogram to stdout after the run\n" + " US is the max latency time to be be tracked in microseconds\n" +@@ -1327,7 +989,6 @@ static void display_help(int error) + "-H --histofall=US same as -h except with an additional summary column\n" + " --histfile= dump the latency histogram to instead of stdout\n" + "-i INTV --interval=INTV base interval of thread in us default=1000\n" +- "-I --irqsoff Irqsoff tracing (used with -b)\n" + "-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n" + " --laptop Save battery when running cyclictest\n" + " This will give you poorer realtime results\n" +@@ -1335,12 +996,9 @@ static void display_help(int error) + "-m --mlockall lock current and future memory allocations\n" + "-M --refresh_on_max delay updating the screen until a new max\n" + " latency is hit. Userful for low bandwidth.\n" +- " --notrace suppress tracing\n" + "-N --nsecs print results in ns instead of us (default us)\n" + "-o RED --oscope=RED oscilloscope mode, reduce verbose output by RED\n" +- "-O TOPT --traceopt=TOPT trace option\n" + "-p PRIO --priority=PRIO priority of highest prio thread\n" +- "-P --preemptoff Preempt off tracing (used with -b)\n" + " --policy=NAME policy of measurement thread, where NAME may be one\n" + " of: other, normal, batch, idle, fifo or rr.\n" + " --priospread spread priority levels starting at specified value\n" +@@ -1366,8 +1024,6 @@ static void display_help(int error) + " without NUM, threads = max_cpus\n" + " without -t default = 1\n" + " --tracemark write a trace mark when -b latency is exceeded\n" +- "-T TRACE --tracer=TRACER set tracing function\n" +- " configured tracers: %s\n" + "-u --unbuffered force unbuffered output for live processing\n" + #ifdef NUMA + "-U --numa Standard NUMA testing (similar to SMP option)\n" +@@ -1375,11 +1031,8 @@ static void display_help(int error) + #endif + "-v --verbose output values on stdout for statistics\n" + " format: n:c:v n=tasknum c=count v=value in us\n" +- "-w --wakeup task wakeup tracing (used with -b)\n" +- "-W --wakeuprt rt task wakeup tracing (used with -b)\n" + " --dbg_cyclictest print info useful for debugging cyclictest\n" +- "-x --posix_timers use POSIX timers instead of clock_nanosleep.\n", +- tracers ++ "-x --posix_timers use POSIX timers instead of clock_nanosleep.\n" + ); + if (error) + exit(EXIT_FAILURE); +@@ -1497,17 +1150,17 @@ static char *policyname(int policy) + + + enum option_values { +- OPT_AFFINITY=1, OPT_NOTRACE, OPT_BREAKTRACE, OPT_PREEMPTIRQ, OPT_CLOCK, +- OPT_CONTEXT, OPT_DISTANCE, OPT_DURATION, OPT_LATENCY, OPT_EVENT, +- OPT_FTRACE, OPT_FIFO, OPT_HISTOGRAM, OPT_HISTOFALL, OPT_HISTFILE, +- OPT_INTERVAL, OPT_IRQSOFF, OPT_LOOPS, OPT_MLOCKALL, OPT_REFRESH, +- OPT_NANOSLEEP, OPT_NSECS, OPT_OSCOPE, OPT_TRACEOPT, OPT_PRIORITY, +- OPT_PREEMPTOFF, OPT_QUIET, OPT_PRIOSPREAD, OPT_RELATIVE, OPT_RESOLUTION, +- OPT_SYSTEM, OPT_SMP, OPT_THREADS, OPT_TRACER, OPT_TRIGGER, +- OPT_TRIGGER_NODES, OPT_UNBUFFERED, OPT_NUMA, OPT_VERBOSE, OPT_WAKEUP, +- OPT_WAKEUPRT, OPT_DBGCYCLIC, OPT_POLICY, OPT_HELP, OPT_NUMOPTS, +- OPT_ALIGNED, OPT_SECALIGNED, OPT_LAPTOP, OPT_SMI, OPT_TRACEMARK, +- OPT_POSIX_TIMERS, ++ OPT_AFFINITY=1, OPT_BREAKTRACE, OPT_CLOCK, ++ OPT_DISTANCE, OPT_DURATION, OPT_LATENCY, ++ OPT_FIFO, OPT_HISTOGRAM, OPT_HISTOFALL, OPT_HISTFILE, ++ OPT_INTERVAL, OPT_LOOPS, OPT_MLOCKALL, OPT_REFRESH, ++ OPT_NANOSLEEP, OPT_NSECS, OPT_OSCOPE, OPT_PRIORITY, ++ OPT_QUIET, OPT_PRIOSPREAD, OPT_RELATIVE, OPT_RESOLUTION, ++ OPT_SYSTEM, OPT_SMP, OPT_THREADS, OPT_TRIGGER, ++ OPT_TRIGGER_NODES, OPT_UNBUFFERED, OPT_NUMA, OPT_VERBOSE, ++ OPT_DBGCYCLIC, OPT_POLICY, OPT_HELP, OPT_NUMOPTS, ++ OPT_ALIGNED, OPT_SECALIGNED, OPT_LAPTOP, OPT_SMI, ++ OPT_TRACEMARK, OPT_POSIX_TIMERS, + }; + + /* Process commandline options */ +@@ -1524,32 +1177,24 @@ static void process_options (int argc, char *argv[], int max_cpus) + */ + static struct option long_options[] = { + {"affinity", optional_argument, NULL, OPT_AFFINITY}, +- {"notrace", no_argument, NULL, OPT_NOTRACE }, + {"aligned", optional_argument, NULL, OPT_ALIGNED }, + {"breaktrace", required_argument, NULL, OPT_BREAKTRACE }, +- {"preemptirqs", no_argument, NULL, OPT_PREEMPTIRQ }, + {"clock", required_argument, NULL, OPT_CLOCK }, +- {"context", no_argument, NULL, OPT_CONTEXT }, + {"distance", required_argument, NULL, OPT_DISTANCE }, + {"duration", required_argument, NULL, OPT_DURATION }, + {"latency", required_argument, NULL, OPT_LATENCY }, +- {"event", no_argument, NULL, OPT_EVENT }, +- {"ftrace", no_argument, NULL, OPT_FTRACE }, + {"fifo", required_argument, NULL, OPT_FIFO }, + {"histogram", required_argument, NULL, OPT_HISTOGRAM }, + {"histofall", required_argument, NULL, OPT_HISTOFALL }, + {"histfile", required_argument, NULL, OPT_HISTFILE }, + {"interval", required_argument, NULL, OPT_INTERVAL }, +- {"irqsoff", no_argument, NULL, OPT_IRQSOFF }, + {"laptop", no_argument, NULL, OPT_LAPTOP }, + {"loops", required_argument, NULL, OPT_LOOPS }, + {"mlockall", no_argument, NULL, OPT_MLOCKALL }, + {"refresh_on_max", no_argument, NULL, OPT_REFRESH }, + {"nsecs", no_argument, NULL, OPT_NSECS }, + {"oscope", required_argument, NULL, OPT_OSCOPE }, +- {"traceopt", required_argument, NULL, OPT_TRACEOPT }, + {"priority", required_argument, NULL, OPT_PRIORITY }, +- {"preemptoff", no_argument, NULL, OPT_PREEMPTOFF }, + {"quiet", no_argument, NULL, OPT_QUIET }, + {"priospread", no_argument, NULL, OPT_PRIOSPREAD }, + {"relative", no_argument, NULL, OPT_RELATIVE }, +@@ -1561,20 +1206,16 @@ static void process_options (int argc, char *argv[], int max_cpus) + {"spike", required_argument, NULL, OPT_TRIGGER }, + {"spike-nodes", required_argument, NULL, OPT_TRIGGER_NODES }, + {"threads", optional_argument, NULL, OPT_THREADS }, +- {"tracemark", no_argument, NULL, OPT_TRACEMARK }, +- {"tracer", required_argument, NULL, OPT_TRACER }, + {"unbuffered", no_argument, NULL, OPT_UNBUFFERED }, + {"numa", no_argument, NULL, OPT_NUMA }, + {"verbose", no_argument, NULL, OPT_VERBOSE }, +- {"wakeup", no_argument, NULL, OPT_WAKEUP }, +- {"wakeuprt", no_argument, NULL, OPT_WAKEUPRT }, + {"dbg_cyclictest", no_argument, NULL, OPT_DBGCYCLIC }, + {"policy", required_argument, NULL, OPT_POLICY }, + {"help", no_argument, NULL, OPT_HELP }, + {"posix_timers", no_argument, NULL, OPT_POSIX_TIMERS }, +- {NULL, 0, NULL, 0} ++ {NULL, 0, NULL, 0 }, + }; +- int c = getopt_long(argc, argv, "a::A::b:Bc:Cd:D:Efh:H:i:Il:MNo:O:p:PmqrRsSt::uUvD:wWT:x", ++ int c = getopt_long(argc, argv, "a::A::b:c:d:D:h:H:i:l:MNo:p:mqrRsSt::uUvD:x", + long_options, &option_index); + if (c == -1) + break; +@@ -1607,15 +1248,10 @@ static void process_options (int argc, char *argv[], int max_cpus) + case 'b': + case OPT_BREAKTRACE: + tracelimit = atoi(optarg); break; +- case 'B': +- case OPT_PREEMPTIRQ: +- tracetype = PREEMPTIRQSOFF; break; + case 'c': + case OPT_CLOCK: + clocksel = atoi(optarg); break; + case 'C': +- case OPT_CONTEXT: +- tracetype = CTXTSWITCH; break; + case 'd': + case OPT_DISTANCE: + distance = atoi(optarg); break; +@@ -1623,17 +1259,11 @@ static void process_options (int argc, char *argv[], int max_cpus) + case OPT_DURATION: + duration = parse_time_string(optarg); break; + case 'E': +- case OPT_EVENT: +- enable_events = 1; break; +- case 'f': +- case OPT_FTRACE: +- tracetype = FUNCTION; ftrace = 1; break; + case 'F': + case OPT_FIFO: + use_fifo = 1; + strncpy(fifopath, optarg, strlen(optarg)); + break; +- + case 'H': + case OPT_HISTOFALL: + histofall = 1; /* fall through */ +@@ -1647,16 +1277,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + case 'i': + case OPT_INTERVAL: + interval = atoi(optarg); break; +- case 'I': +- case OPT_IRQSOFF: +- if (tracetype == PREEMPTOFF) { +- tracetype = PREEMPTIRQSOFF; +- strncpy(tracer, "preemptirqsoff", sizeof(tracer)); +- } else { +- tracetype = IRQSOFF; +- strncpy(tracer, "irqsoff", sizeof(tracer)); +- } +- break; + case 'l': + case OPT_LOOPS: + max_cycles = atoi(optarg); break; +@@ -1672,25 +1292,12 @@ static void process_options (int argc, char *argv[], int max_cpus) + case 'o': + case OPT_OSCOPE: + oscope_reduction = atoi(optarg); break; +- case 'O': +- case OPT_TRACEOPT: +- traceopt(optarg); break; + case 'p': + case OPT_PRIORITY: + priority = atoi(optarg); + if (policy != SCHED_FIFO && policy != SCHED_RR) + policy = SCHED_FIFO; + break; +- case 'P': +- case OPT_PREEMPTOFF: +- if (tracetype == IRQSOFF) { +- tracetype = PREEMPTIRQSOFF; +- strncpy(tracer, "preemptirqsoff", sizeof(tracer)); +- } else { +- tracetype = PREEMPTOFF; +- strncpy(tracer, "preemptoff", sizeof(tracer)); +- } +- break; + case 'q': + case OPT_QUIET: + quiet = 1; break; +@@ -1740,11 +1347,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + if (trigger) + trigger_list_size = atoi(optarg); + break; +- case 'T': +- case OPT_TRACER: +- tracetype = CUSTOM; +- strncpy(tracer, optarg, sizeof(tracer)); +- break; + case 'u': + case OPT_UNBUFFERED: + setvbuf(stdout, NULL, _IONBF, 0); break; +@@ -1764,12 +1366,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + break; + case 'v': + case OPT_VERBOSE: verbose = 1; break; +- case 'w': +- case OPT_WAKEUP: +- tracetype = WAKEUP; break; +- case 'W': +- case OPT_WAKEUPRT: +- tracetype = WAKEUPRT; break; + case 'x': + case OPT_POSIX_TIMERS: + use_nanosleep = MODE_CYCLIC; break; +@@ -1787,8 +1383,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + if (latency_target_value < 0) + latency_target_value = 0; + break; +- case OPT_NOTRACE: +- notrace = 1; break; + case OPT_POLICY: + handlepolicy(optarg); break; + case OPT_DBGCYCLIC: +@@ -1802,9 +1396,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + fatal("--smi is not available on your arch\n"); + #endif + break; +- case OPT_TRACEMARK: +- notrace = 1; /* using --tracemark implies --notrace */ +- trace_marker = 1; break; + } + } + +@@ -1887,43 +1478,6 @@ static void process_options (int argc, char *argv[], int max_cpus) + } + } + +-static int check_kernel(void) +-{ +- struct utsname kname; +- int maj, min, sub, kv, ret; +- +- ret = uname(&kname); +- if (ret) { +- fprintf(stderr, "uname failed: %s. Assuming not 2.6\n", +- strerror(errno)); +- return KV_NOT_SUPPORTED; +- } +- sscanf(kname.release, "%d.%d.%d", &maj, &min, &sub); +- if (maj == 2 && min == 6) { +- if (sub < 18) +- kv = KV_26_LT18; +- else if (sub < 24) +- kv = KV_26_LT24; +- else if (sub < 28) { +- kv = KV_26_33; +- strcpy(functiontracer, "ftrace"); +- strcpy(traceroptions, "iter_ctrl"); +- } else { +- kv = KV_26_33; +- strcpy(functiontracer, "function"); +- strcpy(traceroptions, "trace_options"); +- } +- } else if (maj >= 3) { +- kv = KV_30; +- strcpy(functiontracer, "function"); +- strcpy(traceroptions, "trace_options"); +- +- } else +- kv = KV_NOT_SUPPORTED; +- +- return kv; +-} +- + static int check_timer(void) + { + struct timespec ts; +@@ -1952,8 +1506,6 @@ static void sighand(int sig) + shutdown = 1; + if (refresh_on_max) + pthread_cond_signal(&refresh_on_max_cond); +- if (tracelimit) +- tracing(0); + } + + static void print_tids(struct thread_param *par[], int nthreads) +@@ -2240,14 +1792,8 @@ int main(int argc, char **argv) + /* use the /dev/cpu_dma_latency trick if it's there */ + set_latency_target(); + +- kernelversion = check_kernel(); +- +- if (kernelversion == KV_NOT_SUPPORTED) +- warn("Running on unknown kernel version...YMMV\n"); +- +- setup_tracer(); +- +- enable_trace_mark(); ++ if (tracelimit) ++ enable_trace_mark(); + + if (check_timer()) + warn("High resolution timers not available\n"); +@@ -2597,35 +2143,16 @@ int main(int argc, char **argv) + threadfree(parameters[i], sizeof(struct thread_param), parameters[i]->node); + } + out: +- /* ensure that the tracer is stopped */ +- if (tracelimit) +- tracing(0); +- +- + /* close any tracer file descriptors */ + if (tracemark_fd >= 0) + close(tracemark_fd); + if (trace_fd >= 0) + close(trace_fd); + +- if (enable_events) +- /* turn off all events */ +- event_disable_all(); +- +- /* turn off the function tracer */ +- fileprefix = procfileprefix; +- if (tracetype && !notrace) +- setkernvar("ftrace_enabled", "0"); +- fileprefix = get_debugfileprefix(); +- + /* unlock everything */ + if (lockall) + munlockall(); + +- /* Be a nice program, cleanup */ +- if (kernelversion < KV_26_33) +- restorekernvars(); +- + /* close the latency_target_fd if it's open */ + if (latency_target_fd >= 0) + close(latency_target_fd); +-- +2.14.3 + diff --git a/SOURCES/queuelat-use-mfence-for-rdtsc-ordering.patch b/SOURCES/queuelat-use-mfence-for-rdtsc-ordering.patch new file mode 100644 index 0000000..4db3c3e --- /dev/null +++ b/SOURCES/queuelat-use-mfence-for-rdtsc-ordering.patch @@ -0,0 +1,31 @@ +From 5c7ee5d6a0444f785a96811b88e604954a1f1ef4 Mon Sep 17 00:00:00 2001 +From: Marcelo Tosatti +Date: Mon, 7 Jan 2019 15:35:56 -0200 +Subject: [PATCH] queuelat: use mfence for rdtsc ordering + +cpuid is causing register corruption: use mfence instead. + +Signed-off-by: Marcelo Tosatti + +v2: fix signed-off-by line +Signed-off-by: John Kacur +--- + src/queuelat/queuelat.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c +index 2230d04bf391..3b291f168768 100644 +--- a/src/queuelat/queuelat.c ++++ b/src/queuelat/queuelat.c +@@ -265,7 +265,7 @@ static inline unsigned long long __rdtscll(void) + { + DECLARE_ARGS(val, low, high); + +- asm volatile("cpuid; rdtsc" : EAX_EDX_RET(val, low, high)); ++ asm volatile("mfence; rdtsc" : EAX_EDX_RET(val, low, high)); + + return EAX_EDX_VAL(val, low, high); + } +-- +2.20.1 + diff --git a/SOURCES/rt-tests-Makefile-Change-syntax-for-python3.patch b/SOURCES/rt-tests-Makefile-Change-syntax-for-python3.patch new file mode 100644 index 0000000..f1902cd --- /dev/null +++ b/SOURCES/rt-tests-Makefile-Change-syntax-for-python3.patch @@ -0,0 +1,29 @@ +From 026f2a31c505b244bbb4a811ba5329225e3f66f1 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Wed, 13 Jun 2018 01:53:11 +0200 +Subject: [PATCH] rt-tests: Makefile: Change syntax for python3 + +When testing for the PYLIB version, we need to explicitly +specify python3 and fix the print syntax + +Signed-off-by: John Kacur +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index cffb255d96d1..8b08385890fe 100644 +--- a/Makefile ++++ b/Makefile +@@ -33,7 +33,7 @@ CFLAGS ?= -Wall -Wno-nonnull + CPPFLAGS += -D_GNU_SOURCE -Isrc/include + LDFLAGS ?= + +-PYLIB ?= $(shell python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib()') ++PYLIB ?= $(shell python3 -c 'import distutils.sysconfig; print (distutils.sysconfig.get_python_lib())') + + ifndef DEBUG + CFLAGS += -O2 -g +-- +2.14.4 + diff --git a/SOURCES/rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch b/SOURCES/rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch new file mode 100644 index 0000000..914e00a --- /dev/null +++ b/SOURCES/rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch @@ -0,0 +1,64 @@ +From 1b68647387067fea4779a1c80d4155be2187ed21 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 8 Oct 2018 15:11:43 +0200 +Subject: [PATCH] rt-tests: Remove install and build of backfire and sendme + +Leave the source code in place but remove the install and build of +backfire and sendme for now as it is broken + +Signed-off-by: John Kacur +--- + Makefile | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/Makefile b/Makefile +index 5447ca9de108..26dd96f0c5fd 100644 +--- a/Makefile ++++ b/Makefile +@@ -11,7 +11,6 @@ sources = cyclictest.c \ + pmqtest.c \ + ptsematest.c \ + rt-migrate-test.c \ +- sendme.c \ + signaltest.c \ + sigwaittest.c \ + svsematest.c \ +@@ -83,7 +82,6 @@ VPATH += src/ptsematest: + VPATH += src/sigwaittest: + VPATH += src/svsematest: + VPATH += src/pmqtest: +-VPATH += src/backfire: + VPATH += src/lib: + VPATH += src/hackbench: + VPATH += src/sched_deadline: +@@ -139,9 +137,6 @@ svsematest: $(OBJDIR)/svsematest.o $(OBJDIR)/librttest.a + pmqtest: $(OBJDIR)/pmqtest.o $(OBJDIR)/librttest.a + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS) + +-sendme: $(OBJDIR)/sendme.o $(OBJDIR)/librttest.a +- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS) +- + pip_stress: $(OBJDIR)/pip_stress.o $(OBJDIR)/librttest.a + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) + +@@ -180,9 +175,6 @@ install: all install_hwlatdetect + mkdir -p "$(DESTDIR)$(bindir)" "$(DESTDIR)$(mandir)/man4" + mkdir -p "$(DESTDIR)$(srcdir)" "$(DESTDIR)$(mandir)/man8" + cp $(TARGETS) "$(DESTDIR)$(bindir)" +- install -D -m 644 src/backfire/backfire.c "$(DESTDIR)$(srcdir)/backfire/backfire.c" +- install -m 644 src/backfire/Makefile "$(DESTDIR)$(srcdir)/backfire/Makefile" +- gzip -c src/backfire/backfire.4 >"$(DESTDIR)$(mandir)/man4/backfire.4.gz" + gzip -c src/cyclictest/cyclictest.8 >"$(DESTDIR)$(mandir)/man8/cyclictest.8.gz" + gzip -c src/pi_tests/pi_stress.8 >"$(DESTDIR)$(mandir)/man8/pi_stress.8.gz" + gzip -c src/ptsematest/ptsematest.8 >"$(DESTDIR)$(mandir)/man8/ptsematest.8.gz" +@@ -190,7 +182,6 @@ install: all install_hwlatdetect + gzip -c src/sigwaittest/sigwaittest.8 >"$(DESTDIR)$(mandir)/man8/sigwaittest.8.gz" + gzip -c src/svsematest/svsematest.8 >"$(DESTDIR)$(mandir)/man8/svsematest.8.gz" + gzip -c src/pmqtest/pmqtest.8 >"$(DESTDIR)$(mandir)/man8/pmqtest.8.gz" +- gzip -c src/backfire/sendme.8 >"$(DESTDIR)$(mandir)/man8/sendme.8.gz" + gzip -c src/hackbench/hackbench.8 >"$(DESTDIR)$(mandir)/man8/hackbench.8.gz" + gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz" + gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" +-- +2.14.4 + diff --git a/SOURCES/rt-tests-cyclictest-Remove-numa-from-help.patch b/SOURCES/rt-tests-cyclictest-Remove-numa-from-help.patch new file mode 100644 index 0000000..0bfba17 --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Remove-numa-from-help.patch @@ -0,0 +1,85 @@ +From 7ea837b01d7e75e403a935bb40b11824f8568d4a Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 5 Nov 2018 15:11:31 +0100 +Subject: [PATCH] rt-tests: cyclictest: Remove numa from help + +The numa mode is invoked automatically now, and not from the commandline. +Remove it from help and the man page as well. +Clean-up messages to refer to "numa" or "numa" mode instead of "--numa" + +Even though --smp can still be invoked, change messages to "smp mode" +for consistency. + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.8 | 3 --- + src/cyclictest/cyclictest.c | 10 +++------- + src/cyclictest/rt_numa.h | 2 +- + 3 files changed, 4 insertions(+), 11 deletions(-) + +diff --git a/src/cyclictest/cyclictest.8 b/src/cyclictest/cyclictest.8 +index 36edacc3209f..a05d1f4c9d4a 100644 +--- a/src/cyclictest/cyclictest.8 ++++ b/src/cyclictest/cyclictest.8 +@@ -185,9 +185,6 @@ of the trace functions available from /kernel/debug/tracing/ + .B \-u, \-\-unbuffered + force unbuffered output for live processing + .TP +-.B \-U, --numa +-Standard NUMA testing (similar to SMP option) thread data structures allocated from local node. +-.TP + .B \-v, \-\-verbose + Output values on stdout for statistics. This option is used to gather statistical information about the latency distribution. The output is sent to stdout. The output format is: + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 8bba9fc63ee3..188a202c5171 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1025,10 +1025,6 @@ static void display_help(int error) + " without -t default = 1\n" + " --tracemark write a trace mark when -b latency is exceeded\n" + "-u --unbuffered force unbuffered output for live processing\n" +-#ifdef NUMA +- "-U --numa Standard NUMA testing (similar to SMP option)\n" +- " thread data structures allocated from local node\n" +-#endif + "-v --verbose output values on stdout for statistics\n" + " format: n:c:v n=tasknum c=count v=value in us\n" + " --dbg_cyclictest print info useful for debugging cyclictest\n" +@@ -1329,7 +1325,7 @@ static void process_options (int argc, char *argv[], int max_cpus) + case 't': + case OPT_THREADS: + if (smp) { +- warn("-t ignored due to --smp\n"); ++ warn("-t ignored due to smp mode\n"); + break; + } + if (optarg != NULL) +@@ -1399,9 +1395,9 @@ static void process_options (int argc, char *argv[], int max_cpus) + + if (option_affinity) { + if (smp) { +- warn("-a ignored due to --smp\n"); ++ warn("-a ignored due to smp mode\n"); + } else if (numa) { +- warn("-a ignored due to --numa\n"); ++ warn("-a ignored due to numa mode\n"); + } + } + +diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h +index 3970e681fe7b..e8cd7f481baa 100644 +--- a/src/cyclictest/rt_numa.h ++++ b/src/cyclictest/rt_numa.h +@@ -253,7 +253,7 @@ static inline void rt_bitmask_free(struct bitmask *mask) + static void numa_on_and_available() + { + if (numa) /* NUMA is not defined here */ +- fatal("--numa specified and numa functions not available.\n"); ++ fatal("numa mode and numa functions not available.\n"); + } + + #endif /* NUMA */ +-- +2.14.5 + diff --git a/SOURCES/rt-tests-deadline_test-Add-NULL-check-before-freeing.patch b/SOURCES/rt-tests-deadline_test-Add-NULL-check-before-freeing.patch new file mode 100644 index 0000000..14fb0f8 --- /dev/null +++ b/SOURCES/rt-tests-deadline_test-Add-NULL-check-before-freeing.patch @@ -0,0 +1,30 @@ +From ed58e7ad038f11a8e5f194fb9314ebc791e21b99 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 15 Nov 2018 13:00:06 +0100 +Subject: [PATCH] rt-tests: deadline_test: Add NULL check before freeing + setcpu_buf + +setcpu_buf doesn't always call malloc, so NULL check it before freeing + +Signed-off-by: John Kacur +--- + src/sched_deadline/deadline_test.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c +index 2a63c5f91639..b213c206559c 100644 +--- a/src/sched_deadline/deadline_test.c ++++ b/src/sched_deadline/deadline_test.c +@@ -2092,6 +2092,8 @@ int main (int argc, char **argv) + printf("\n"); + } + +- free(setcpu_buf); ++ if (!setcpu_buf) ++ free(setcpu_buf); ++ + return 0; + } +-- +2.14.5 + diff --git a/SOURCES/rt-tests-deadline_test-Add-a-manpage.patch b/SOURCES/rt-tests-deadline_test-Add-a-manpage.patch new file mode 100644 index 0000000..15cc291 --- /dev/null +++ b/SOURCES/rt-tests-deadline_test-Add-a-manpage.patch @@ -0,0 +1,101 @@ +From 803c33cfe83a8e215bdb4f393f90d1e175f78318 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 2 Nov 2018 16:16:45 +0100 +Subject: [PATCH] rt-tests: deadline_test: Add a manpage + +Add an initial manpage for deadline_test. +Modify the Makefile to install it too. + +Signed-off-by: John Kacur +--- + Makefile | 1 + + src/sched_deadline/deadline_test.8 | 65 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 66 insertions(+) + create mode 100644 src/sched_deadline/deadline_test.8 + +diff --git a/Makefile b/Makefile +index 26dd96f0c5fd..06f399cc629d 100644 +--- a/Makefile ++++ b/Makefile +@@ -186,6 +186,7 @@ install: all install_hwlatdetect + gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz" + gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" + gzip -c src/queuelat/queuelat.8 >"$(DESTDIR)$(mandir)/man8/queuelat.8.gz" ++ gzip -c src/sched_deadline/deadline_test.8 >"$(DESTDIR)$(mandir)/man8/deadline_test.8.gz" + + .PHONY: install_hwlatdetect + install_hwlatdetect: hwlatdetect +diff --git a/src/sched_deadline/deadline_test.8 b/src/sched_deadline/deadline_test.8 +new file mode 100644 +index 000000000000..5dc99c0bfc63 +--- /dev/null ++++ b/src/sched_deadline/deadline_test.8 +@@ -0,0 +1,65 @@ ++.\" Hey, EMACS: -*- nroff -*- ++.TH DEADLINE_TEST 8 "November 1, 2018" ++.\" Please adjust this date whenever revising the manpage. ++.\" ++.\" Some roff macros, for reference: ++.\" .nh disable hyphenation ++.\" .hy enable hyphenation ++.\" .ad l left justify ++.\" .ad b justify to both left and right margins ++.\" .nf disable filling ++.\" .fi enable filling ++.\" .br insert line break ++.\" .sp insert n+1 empty lines ++.\" for manpage-specific macros, see man(7) ++.SH NAME ++deadline_test \- High resolution test program ++.SH DESCRIPTION ++.PP ++This program is used to test the deadline scheduler (SCHED_DEADLINE tasks) ++.SH SYNOPSIS ++.B deadline_test ++.RI "[ \-hb ] [ \-r prio ] [ \-c cpulist ] [ \-i interval ] [ \-p percent ] [ \-P percent ] [ \-t threads ] [ \-s step[us) ]" ++ ++.SH OPTIONS ++.TP ++.B \-h ++Show this help menu ++.br ++.TP ++.B \-b ++Bind on the last cpu. (shortcut for -c ) ++.br ++.TP ++.B \-r prio ++Add an RT task with given prio to stress system ++.br ++.TP ++.B \-c cpulist ++Comma/hyphen separated list of CPUs to run deadline tasks on ++.br ++.TP ++.B \-i interval ++The shortest deadline for the tasks ++.br ++.TP ++.B \-p percent ++The percent of bandwidth to use (1-90%) ++.br ++.TP ++.B \-P percent ++The percent of runtime for execution completion ++ (Default 100%) ++.br ++.TP ++.B \-t threads ++The number of threads to run as deadline (default 1) ++.br ++.TP ++.B \-s step(us) ++The amount to increase the deadline for each task (default 500us) ++.br ++.SH AUTHOR ++Deadline test was written by Steven Rostedt ++.PP ++This manual page was written by John Kacur +-- +2.14.5 + diff --git a/SOURCES/rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch b/SOURCES/rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch new file mode 100644 index 0000000..c8bb2b6 --- /dev/null +++ b/SOURCES/rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch @@ -0,0 +1,30 @@ +From 77be335d8b09afa662eb0965b9b18a6105fa9dcc Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 18 Sep 2018 02:30:00 +0200 +Subject: [PATCH] rt-tests: manpages: Modify makefile for queuelat.8 and + pip_stress.8 + +Modify the manpage to include queuelat.8 and pip_stress.8 for the +install + +Signed-off-by: John Kacur +--- + Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Makefile b/Makefile +index 8b08385890fe..5447ca9de108 100644 +--- a/Makefile ++++ b/Makefile +@@ -193,6 +193,8 @@ install: all install_hwlatdetect + gzip -c src/backfire/sendme.8 >"$(DESTDIR)$(mandir)/man8/sendme.8.gz" + gzip -c src/hackbench/hackbench.8 >"$(DESTDIR)$(mandir)/man8/hackbench.8.gz" + gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz" ++ gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" ++ gzip -c src/queuelat/queuelat.8 >"$(DESTDIR)$(mandir)/man8/queuelat.8.gz" + + .PHONY: install_hwlatdetect + install_hwlatdetect: hwlatdetect +-- +2.14.4 + diff --git a/SOURCES/rt-tests-pi_stress-remove-unused-report-options.patch b/SOURCES/rt-tests-pi_stress-remove-unused-report-options.patch new file mode 100644 index 0000000..e5ba8a1 --- /dev/null +++ b/SOURCES/rt-tests-pi_stress-remove-unused-report-options.patch @@ -0,0 +1,32 @@ +From 4b58d4277496b5ad61b66cbc6fb4aea91ceec6dd Mon Sep 17 00:00:00 2001 +From: Juri Lelli +Date: Fri, 14 Sep 2018 12:04:48 +0200 +Subject: [PATCH 1/5] rt-tests: pi_stress: remove unused report option from + help + +Command line --report option is not actually implemented (even if +advertised on --help). + +Remove it from the help banner. + +Signed-off-by: Juri Lelli +Signed-off-by: John Kacur +--- + src/pi_tests/pi_stress.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/pi_tests/pi_stress.c b/src/pi_tests/pi_stress.c +index 36b64ca1672c..ac7646cd2613 100644 +--- a/src/pi_tests/pi_stress.c ++++ b/src/pi_tests/pi_stress.c +@@ -1032,7 +1032,6 @@ void usage(void) + ngroups); + printf + ("\t--inversions=- number of inversions per group [infinite]\n"); +- printf("\t--report=\t- output to file [/dev/null]\n"); + printf("\t--rr\t\t- use SCHED_RR for test threads [SCHED_FIFO]\n"); + printf("\t--sched\t\t- scheduling options per thread type:\n"); + printf("\t\tid=[high|med|low]\t\t\t- select thread\n"); +-- +2.14.4 + diff --git a/SOURCES/rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch b/SOURCES/rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch new file mode 100644 index 0000000..12566e7 --- /dev/null +++ b/SOURCES/rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch @@ -0,0 +1,70 @@ +From 2342d8be62a510569f8cbc9fe41574b6bc370073 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 17 Sep 2018 23:13:53 +0200 +Subject: [PATCH 3/5] rt-tests: pip_stress: Add an initial man page for + pip_stress + +This adds a man page for pip_stress + +Signed-off-by: John Kacur +--- + src/pi_tests/pip_stress.8 | 47 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 47 insertions(+) + create mode 100644 src/pi_tests/pip_stress.8 + +diff --git a/src/pi_tests/pip_stress.8 b/src/pi_tests/pip_stress.8 +new file mode 100644 +index 000000000000..1808330b2e17 +--- /dev/null ++++ b/src/pi_tests/pip_stress.8 +@@ -0,0 +1,47 @@ ++.\" ++.TH PIP\ STRESS 8 "September 17, 2018" ++.SH NAME ++.B pip_stress \- Priority Inheritance with processes ++.SH SYNOPSIS ++.B pip_stress ++ ++.SH DESCRIPTION ++This program demonstrates the technique of using priority inheritance (PI) ++mutexes with processes instead of threads. ++The way to do this is to obtain some shared memory - in this case with ++mmap that backs a pthread_mutex_t since this will support PI. ++Pay particular attention to how this is intialized to support processes. ++Function init_shared_pthread_mutex() does this by setting the ++pthread_mutexattr to PTHREAD_PROCESS_SHARED and the mutex protocol to ++PTHREAD_PRIO_INHERIT. ++In this program we purposely try to invoke a classic priority inversion. ++A low priority process grabs the mutex and does some work. ++A high priority process comes a long and is blocked since the mutex is taken. ++A medium priority process that doesn't require the mutex then takes the ++processor. Because the processes are restricted to one cpu, the low priority ++processes never makes any progress because the medium priority process ++runs in an infinite loop. This is a priority inversion because the ++medium priority process is running at the expensive of the high priority ++process. However, since we have used PRIO_INHERIT and are running on a ++machine that supports preemption, the high priority process will lend it's ++priority to the low priority process which will preempt the medium priority ++process. The low priority process will then release the mutex which the ++high priority process can obtain. When the high priority process gets to run ++it kills the medium priority process. ++The state structure keeps track of the progress. Although this program ++is set up to likely trigger an inversion, there is no guarantee that ++scheduling will make that happen. After the program completes it reports ++whether a priority inversion occurred or not. In either case this program ++demonstrates how to use priority inheritance mutexes with processes. ++In fact, you would be better off to avoid scenarios in which a priority ++inversion occurs if possible - this program tries to trigger them just ++to show that it works. If you are having difficulty triggering an inversion, ++merely increase the time that the low priority process sleeps while ++holding the lock. (usleep); ++Also note that you have to run as a user with permission to change ++scheduling priorities. ++.BR ++.SH AUTHOR ++pip_stress was written by John Kacur ++.PP ++This manual page was also written by John Kacur +-- +2.14.4 + diff --git a/SPECS/rt-tests.spec b/SPECS/rt-tests.spec new file mode 100644 index 0000000..fa808d3 --- /dev/null +++ b/SPECS/rt-tests.spec @@ -0,0 +1,712 @@ +Summary: Programs that test various rt-features +Name: rt-tests +# These will be setup by the "make rpm" logic +# Version: 1.0 +# BuildRequires: numactl-devel +# Numa argument to make: NUMA=1 +# +Version: 1.3 +Release: 13%{?dist} +License: GPLv2 +Group: Development/Tools +URL: git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git +Source0: https://www.kernel.org/pub/linux/utils/rt-tests/%{name}-%{version}.tar.gz + +Patch1: cyclictest-remove-ftrace-code.patch +Patch2: rt-tests-Makefile-Change-syntax-for-python3.patch +Patch3: Remove-numa-option.patch +Patch4: rt-tests-pi_stress-remove-unused-report-options.patch +Patch5: rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch +Patch6: add-h-option-to-queuelat.patch +Patch7: Add-queuelat-manpage.patch +Patch8: rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch +Patch9: rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch +Patch10: rt-tests-deadline_test-Add-a-manpage.patch +Patch11: rt-tests-cyclictest-Remove-numa-from-help.patch +Patch12: rt-tests-deadline_test-Add-NULL-check-before-freeing.patch +Patch13: queuelat-use-mfence-for-rdtsc-ordering.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root +Obsoletes: cyclictest signaltest pi_tests +ExclusiveArch: x86_64 +BuildRequires: numactl-devel python3-devel +%{?__python3:Requires: %{__python3}} + +%description +rt-tests is a set of programs that test and measure various components of +real-time kernel behavior. This package measures timer, signal, and hardware +latency. It also tests the functioning of priority-inheritance mutexes. + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 + +%build +make NUMA=1 HAVE_PARSE_CPUSTRING_ALL=1 + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT/%{python3_sitelib} +make DESTDIR=$RPM_BUILD_ROOT prefix=/usr install + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%{python3_sitelib}/hwlatdetect.py* +%{python3_sitelib}/__pycache__/hwlatdetect* +%caps(cap_sys_rawio+ep) /usr/bin/cyclictest +/usr/bin/pi_stress +/usr/bin/signaltest +/usr/bin/hwlatdetect +/usr/bin/rt-migrate-test +/usr/bin/pip_stress +/usr/bin/ptsematest +/usr/bin/sigwaittest +/usr/bin/svsematest +/usr/bin/pmqtest +/usr/bin/hackbench +/usr/bin/cyclicdeadline +/usr/bin/deadline_test +/usr/bin/queuelat +%doc +/usr/share/man/man8/cyclictest.8.gz +/usr/share/man/man8/hackbench.8.gz +/usr/share/man/man8/hwlatdetect.8.gz +/usr/share/man/man8/pi_stress.8.gz +/usr/share/man/man8/pmqtest.8.gz +/usr/share/man/man8/ptsematest.8.gz +/usr/share/man/man8/rt-migrate-test.8.gz +/usr/share/man/man8/signaltest.8.gz +/usr/share/man/man8/sigwaittest.8.gz +/usr/share/man/man8/svsematest.8.gz +/usr/share/man/man8/pip_stress.8.gz +/usr/share/man/man8/queuelat.8.gz +/usr/share/man/man8/deadline_test.8.gz + +%changelog +* Tue Jan 08 2019 John Kacur - 1.3-13 +- queuelat: use mfence for rdtsc ordering +Resolves: rhbz#1663865 + +* Thu Nov 15 2018 John Kacur - 1.3-12 +- Add NULL check before freeing setcpu_buf +Resolves: rhbz#1641971 + +* Tue Nov 06 2018 John Kacur - 1.3-11 +- Fix the spec file to remove debuginfo from the standard queuelat files +Resolves: rhbz#1641978 + +* Mon Nov 05 2018 John Kacur - 1.3-10 +- Remove numa from help since it is invokved automatically +Resolves: rhbz#1646121 + +* Fri Nov 02 2018 John Kacur - 1.3-9 +- Add a manpage for deadline_test +Resolves: rhbz#1645071 + +* Mon Oct 08 2018 John Kacur - 1.3-8 +- Remove backfire and sendme +Resolves: rhbz#1624885 + +* Fri Sep 28 2018 John Kacur - 1.3-7 +- Change python3 to platform-python +Resolves: rhbz#1633607 + +* Mon Sep 17 2018 John Kacur - 1.3-6 +- rt-tests-pi_stress-remove-unused-report-options.patch +- rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch +- add-h-option-to-queuelat.patch +- Add-queuelat-manpage.patch +- Modify makefile for queuelat.8 and pip_stress.8 +Resolves: rhbz#1614783 + +* Fri Jun 22 2018 John Kacur - 1.3-5 +- Reimplement the removal of --numa, and automate it's detction +Resolves: rhbz#1594273 + +* Tue Jun 12 2018 John Kacur - 1.3-4 +- A few more python3 changes + +* Wed May 30 2018 John Kacur - 1.3-3 +- Add patches that remove --sma and --numa and automate it +Resolves: rhbz#1518708 + +* Wed May 30 2018 John Kacur - 1.3-2 +- cyclictest: remove tracing, in favour of external tracing +Resolves: rhbz#1518268 + +* Mon Apr 30 2018 John Kacur - 1.3-1 +- New build +- Add test queuelat +- Adds changes for python3 in hwlatdetect +Resolves: rhbz#1543030 +Resolves: rhbz#1559520 + +* Tue Mar 27 2018 John Kacur - 1.2-1 +- Remove old patches from the source files +Resolves: rhbz#1559930 + +* Mon Mar 26 2018 John Kacur - 1.2-0 +- Initial Build for 8.0 +Resolves: rhbz#1559930 + +* Wed Dec 20 2017 John Kacur - 1.0.13 +- rt-tests-Need-to-generate-debug-info-for-rpms.patch +Resolves: rhbz#1523752 + +* Thu Nov 02 2017 John Kacur - 1.0.12 +- cyclictest: cannot stop when running with -M option +Resolves: rhbz#1473786 + +* Tue Apr 25 2017 John Kacur - 1.0.11 +- cyclictest-touch-threadstacks-on-numa-to-pre-fault-t.patch +Resolves: rhbz1445058 + +* Thu Mar 23 2017 John Kacur - 1.0.10 +- hwlatdetect: modify hwlatdetector.py to use the ftrace hwlatdetector +- hwlatdetect: removed smi_detector support +Resolves: rhbz1365961 + +* Thu Mar 23 2017 John Kacur - 1.0.9 +- hwlatdetect: Add --hardlimit to define the real test failing criteria +Resolves: rhbz1434827 + +* Thu Mar 23 2017 John Kacur - 1.0.8 +- cyclicdeadline: Fix minor spelling mistake +- cyclictest: Correct short option 's' +Resolves: rhbz1434825 + +* Tue Mar 21 2017 John Kacur - 1.0.7 +- rt-tests: hwlatdetect: Improve message if max latency is below threshold +Resolves: rhbz1366289 + +* Thu Jun 30 2016 John Kacur - 1.0-6 +- deadline_test: Made '-i' work and added help text for it +Resolves: rhbz1346771 + +* Tue Jun 28 2016 John Kacur - 1.0-5 +- z-stream release + +* Thu Jun 23 2016 John Kacur - 1.0-4 +- Add cyclicdeadline and deadline_test to rt-tests +Resolves: rhbz#1349032 + +* Fri Jun 17 2016 John Kacur - 1.0-3 +- Install cyclictest with cap_sys_rawio to access msr and cpuid registers +- Fixed url in Source0 +Resolves: rhbz#1346771 + +* Wed Jun 01 2016 John Kacur - 1.0-2 +- cyclictest: new CPUs with SMI counter support +Resolves: rhbz#1341226 + +* Fri May 20 2016 John Kacur - 1.0-1 +- Upgrade to 1.0 +Clark Williams (1): + cyclictest: stop any tracing after hitting a breaktrace threshold +John Kacur (8): + rt-tests: Makefile: Assume numa_parse_cpustring_all available + rt-tests: Add man page for rt-migrate-test + rt-tests: Update the cyclictest man page + rt-tests: Add missing option to hwlatdetect man page + rt-tests: Housekeeping fix some spelling errors. + rt-tests: hwlat.txt: smidetect renamed to hwlatdetect + rt-tests: Remove doc/release-checklist.txt + rt-tests: Makefile - bump version to 1.0 +- Add patch to install rt-migrate-test.8-man-page +Resolves: rhbz#1283264 +- The latest build also includes fixes for undocumented options in cyclictest and hwlatdetect, as well as many more documentation fixes. +Resolves: rhbz#1263718 +- Also documenting here that the new feature cyclictest: SMI count/detection via MSR/SMI counter was added in v0.97 +Resolves: rhbz#1314869 + +* Tue May 10 2016 John Kacur - 0.97-3 +- cyclictest: stop any tracing after hitting a breaktrace threshold +- Resolves: rhbz#1333762 + +* Tue Apr 26 2016 John Kacur - 0.97-2 +- Change spec file to compile with HAVE_PARSE_CPUSTRING_ALL=1 + - This makes numa_parse_cpustring_all() available which is needed for + running cyclictest on isolated cpus. +- Resolves: rhbz#1330468 + +* Mon Apr 04 2016 John Kacur - 0.97-1 +- Changes from v0.93 to v0.97 +Clark Williams (9): + hwlatdetect: initial cut at tracking the amount of SMIs that occurred + during a run + rt-migrate-test: updated to latest code from rostedt + Makefile: add target to create OBJDIR before use + specfile: add signaltest manpage to files section and remove trailing + whitespace in changelog + Makefile: have distclean remove .asc file for tarball + Makefile: fixed dropped quote in help target text + hwlatdetect: handle hwlat_detector being builtin rather than module + hwlatdetect: modify to handle python3 prints + hwlatdetect: make reading sample date work with python2 and python3 +Daniel Bristot de Oliveira (2): + cyclictest: SMI count/detection via MSR/SMI counter + cyclictest: Add --smi description on cyclictest man page +Darren Hart (2): + rt-tests: Allow for user-specified PYLIB + rt-tests: Break out install_hwlatdetect +Henrik Austad (10): + Add CROSS_COMPILE-switch to CC and AR + Add syscall-number for sched_(gs)etattr() for tile + Add a rebuild-switch to Makefile + Makefile: add librttest to rt-migrate-test + android: adjust target for android + cyclictest: move redefine of CPUSET back to uclib + Android: clean up the bypass ifdeffery + Android: rename arch from bionic to android + Android: Expand match for android in ostype + rt-sched.h: do not unconditionally define syscall-numbers +John Kacur (26): + Fix VERSION in rt-migrate-test + numa_on_and_available: Remove from main in cyclictest + Version bump to v0.94 + Explicitly separate VPATH paths with a colon + build: Generate .o, .a, and .d files in bld dir + signaltest: call process_options before calling check_privs + signaltest: Check the status of pthread_create + rt-utils: Add John Kacur to the copyright + rt-utils: Fix some checkpatch errors in rt-utils.c + signaltest: Add a man page to signaltest + Makefile: Document certain compiling options + Makefile: Only call cc -dumpmachine once in the makefile + Bionic: Move android functionality into it's own arch Makefile + maintainence: VERSION bump and Change-log update + cyclictest: Clean-ups in timerthread before working on it + Makefile: OBJDIR should be an order-only-prerequisite + Makefile: Move TARGETS back to a more logical place in the Makefile + cyclictest: Add a feature to record spikes + cyclictest: fix #ifdef broken by NO_PTHREAD_SETAFFINITY + Makefile: Version bump to v0.96 + Remove rt-tests.spec-in + gitattributes: add doc, remove rt.spec-in + Makefile: Remove anything to do with rpms, specs etc + Revert changes to rt-migrate-test for exit(1) + cyclictest: Make the tracemark option imply notrace + rt-tests: Makefile: Bump version number to 0.97 +Josh Cartwright (8): + rt-tests: workaround poor gzip implementations + hackbench: cleanup error handling in create_worker + cyclictest: consistently make all functions 'static' + cyclictest: use correct type when allocating cpu bitmask size + cyclictest: drop impossible use_fifo conditional + cyclictest: fail if use_fifo && thread creation failed + error: mark fatal, err_exit, err_quit as being noreturn + cyclictest: add option for dumping the histogram in a file +Khem Raj (1): + Makefile: Set CC/AR variable only if it doesn't have a value +Luiz Capitulino (5): + don't use exit(-1) for failures + cyclictest: move tracemark_fd handling to its own function + cyclictest: tracing(): check for notrace + cyclictest: move debugfs init code to its own function + cyclictest: add --tracemark option +Uwe Kleine-König (5): + backfire: remove unused header file + remove several unused Makefiles + rt-migrate-test: remove space before \n + drop compiling without NPTL support + Fix some trivial typos found by codespell(1) +- Resolves: rhbz#1283264 + + * Wed Aug 12 2015 Clark Williams - 0.93-1 +John Kacur (6): + makefile: Create an rt-tests.tar file using git-archiv + makefile: Change VERSION_STRING to VERSIO + Add .tar files to .gitignor + Create a .gitattribute file to specify what files git-archive should ignore + pi_stress: Fix possible exit on error without releasing mutex + pip_stress: Fix warning: unused variable ‘c’ +Alexander Stein (1): + cyclictest: Fix long priority help text option +Clark Williams (3): + hwlatdetect: added --watch option to watch output in realtime + doc: fix VERSION in release-checklist.tx + makefile: fixed release targ + + * Tue Jun 09 2015 John Kacur - 0.92-1 +Anna-Maria Gleixner (2): + cyclictest: Convert the offset of the alignment option to microseconds + cyclictest: Align measurement threads to the next full second + cyclictest: Ensure that next wakeup time is never in the past +Daniel Wagner (1): + pi_stress: Clear affinity for DEADLINE tasks +John Kacur (3): + Fix minor grammar mistake in the help output + Allow building with -DHAVE_PARSE_CPUSTRING_ALL + Add a MAINTAINERS file +Michael Olbrich (2): + Makefile: pi_stress need librttest.a so it should depend on it + Makefile: cleanup linking to librttest.a +Sebastian Andrzej Siewior (1): + cyclictest: consider the 4 as the major version + + * Tue Feb 17 2015 Clark Williams - 0.91-1 +- From Boris Egorov + - rt-migrate-test: exit early if nr_runs is non-positive + - rt-migrate-test: use variables instead of macros +- From Uwe Kleine-König + - pi_stress: remove timestamp of compilation from version output +- rt-migrate-test: make sure input parameters are converted to correct units +- rt-migrate-test: sanity check --prio value + +* Tue Jan 27 2015 Clark Williams - 0.90-1 +- pip_stress: parameterize usleep value to work-around platform issues +- From Daniel Wagner : + - pi_stress: Store schedule attributes per thread + - rt-utils: Add gettid() + - rt-utils: Add helper to parse/print scheduling policies + - rt-sched: Add sched_setattr/sched_getattr API + - pi_stress: Use error.h for logging and debugging + - error: Add debug() function + - pi_stress: Remove unused TIMER_SIGNAL definition + - rt-tests.h: Remove unused header file + - hackbench: Don't re-assign context for each fd +- From Joakim Hernberg : + - cyclictest: make affinity option only use number of online cpus +- From John Kacur : + - cyclictest: Add long option --laptop to preserve battery power + - cyclictest: Fix help for long options only + - cyclictest: Change the output from function sighand() to stderr + - cyclictest: Always print an err message if write of 0 to cpu-dma_latency fails + - rt_numa.h: Suppress discards 'const' qualifier warning + - lib: Rework err_msg_n to output strerror after message +- From Alexey Brodkin : + - Makefile: allow building selected tests with non-NPTL toolchain + +* Sun Mar 30 2014 Clark Williams - 0.89-1 +- clean up debugging comments and printfs from last release +- ran hwlatdetect.py through 2to3, works for both python2 and 3 + +* Fri Mar 28 2014 Clark Williams - 0.88-1 +- From Uwe Kleine-König : + - cyclictest: Fix tracemark output when the latency threshold is hit on ARM +- From Gary S. Robertson : + - cyclictest: Restore CPU affinity function for non-NUMA builds + - cyclictest: Don't offer --numa option when unavailable + +* Wed Dec 11 2013 Clark Williams - 0.87-1 +- From Aaron Fabbri : + - cyclictest: CPU affinity now takes arbitrary set of cpus + +* Fri Nov 15 2013 Clark Williams - 0.86-1 +- cyclictest: allow break threshold without doing any tracing +- cyclictest: add named fifo for statistics +- from John Kacur : + - cyclictest: Align option fixes + - Makefile: Don't tag files in dir BUILD from rpm builds + - Makefile: Add BUILDROOT and SPECS to the dirs to remove for distclean + - Makefile: Add tmp dir to distclean and "make release" call distclean + - Makefile: Don't tag tmp files created when making a release +- from Nicholas Mc Guire : + - cyclictest: add align thread wakeup times option +- cyclictest: modify option handling to use enumerated types +- from Sebastian Andrzej Siewior : + - hackbench: init child's struct before using it +- from Jim Somerville : + - cyclictest: finish removal of 1 second first loops +- from Frank Rowand : + - rt-tests: NUMA optional for make rpm + - cyclictest: white space cleanup + +* Tue Nov 13 2012 Clark Williams - 0.85-1 +- [cyclictest] add tracemark function back to breaktrace logic +- from Frank Rowand : + - [cyclictest] report large measured clock latency + - [cyclictest] cleanup getopt_long() parameters +- from John Kacur : + - [Makefile] add CPPFLAGS to pattern rule for dependencies + - [gitignore] exclude patches and .a archives +- from Uwe Kleine-König : + - Makefile: separate CFLAGS and CPPFLAGS + - have printf use %s format for strings +- from Bhavesh Davda : + - cyclictest: histogram overflow instance tracking + - cyclictest: whitespace cleanup + +* Wed May 9 2012 Clark Williams - 0.84-1 +- [cyclictest] added -Q/--priospread option to +- from Markus Kohlhase + - [docs] added description from osadl.org +- from Darren Hart + - Makefile: Support user supplied CFLAGS and LDFLAGS +- from Steven Rostedt + - rt-tests: Update rt-migrate-test to use ftrace infrastructure +- from John Kacur + - .gitignore: differentiate between program names and directories + - pi_stress: Check the status of sched_getaffinity + - Makefile: Introduce a static library + - Move info, warn, and fatal functions to error.[ch] + - install: Fix failed to create symbolic link hwlatdetect file exists + - cyclictest: Make cyclictest fail if it cannot run with requested priority +- from Frank Rowand + - cyclictest: segfault with '-a' + - cyclictest: avoid unneeded warning + - cyclictest: warn of interaction between '-a', '--smp', and '--numa' + - Makefile: get machinetype from compiler instead of uname + - cyclictest: incorrect first latency value for --verbose option + - cyclictest: printf format compile warning + +* Mon Sep 26 2011 Clark Williams - 0.83-1 +- modified Makefile to be smarter about building with NUMA + +* Wed Sep 21 2011 Clark Williams - 0.82-1 +- fix print that causes error in histogram processing + +* Tue Sep 20 2011 Clark Williams - 0.81-1 +- cleaned up previous hack for /dev/cpu_dma_latency interface + +* Tue Sep 20 2011 Clark Williams - 0.80-1 +- use /dev/cpu_dma_latency interface to prevent cstate transitions + in cyclictest + +* Thu Sep 15 2011 Clark Williams - 0.79-1 +- added signal_workers routine to hackbench +- added -F/--fifo option to hackbench + +* Wed Sep 14 2011 Clark Williams - 0.78-1 +- modified hackebench signal logic + +* Fri Sep 9 2011 Clark Williams - 0.77-1 +- removed tracemark functions (too much contention on multiprocessors) + +* Wed Sep 7 2011 Clark Williams - 0.76-1 +- only turn on /proc/sys/kernel/ftrace_enabled for a tracer that + needs it +- make sure to set current_tracer to function for -f switch + +* Fri Sep 2 2011 Clark Williams - 0.75-1 +- added utility routines for mounting debugfs and event/tracing manipulation +- from Steven Rostedt : + - allow events for all tracers + - Have -I and -P together also be -B + - do not touch tracing_thresh + - only check file descriptor in tracemark() function + - use interval on first loop instead of 1 second + - allow tracemark() to take variable args + +* Thu Aug 18 2011 Clark Williams - 0.74-1 +- changes to deal with 3.0 kernel +- fixed buildrequires in specfile for Python +- fixed spelling error in printf in cyclictest +- from John Kacur + - Make the function header style consistent with the rest of cyclictest. + - Spelling clean-ups +- from Uwe Kleine-König + - fix possible buffer overflow in string handling + +* Mon May 9 2011 Clark Williams - 0.73-1 +- fixed signal handling in hackbench (avoid thousands of zombies) +- from Geunsik Lim + - fix incorrect wakeup interface in cyclictest +- from Wolfram Sang + - Simplify Makefile using -D option to install +- from Carsten Emde + - add histogram summary column option (-H) to cyclictest +- from Daniel Sangorrin + - fix sched_setaffinity type error when building with UCLIB +- from Uwe Kleine-König + - install backfire's Makefile + - modernize backfire's Makefile + +* Fri Jun 25 2010 Clark Williams - 0.72-1 +- changed 'diff' variable in timerthread() routine to be unsigned + 64-bit to avoid overflow issues in debugging +- included and changed all 'long long' declarations to + use uint64_t and int64_t + +* Tue May 18 2010 Clark Williams - 0.71-1 +- from Michal Schmit : + - fix accumulating overruns in periodic timer mode + +* Fri Apr 9 2010 Clark Williams - 0.70-1 +- from Olaf Hering + - skip python dependency during install if python not available + +* Fri Apr 9 2010 Clark Williams - 0.69-1 +- fix bus error in cyclictest on NUMA systems with more than 16 cores +- reset default cyclictest policy to SCHED_OTHER +- from Carsten Emde + - add pmqest program for testing posix message queue performance + - misc doc fixes + +* Fri Mar 19 2010 Clark Williams - 0.68-1 +- fix tracing difference between 2.6.24 and 2.6.33 + +* Tue Mar 16 2010 Clark Williams - 0.67-1 +- modified specfile to add hackbench +- modified internal ftrace logic for correct tracing +- Changed rpm %description field to be more descriptive (BZ# 572323) +- from Carsten Emde + - added smp option to svsematest + - fixed policy display in cyclictest +- from John Kacur + - changed default scheduling policy to SCHED_FIFO + - fixed spelling mistake on cyclictest man page + - use symbolic names for scheduling policy + - reverted commit 582be2a52c43801a10d318de7491f1cc7243d5cf to + deal with bug in priority distribution +- from Uwe Kleine-König + - renamed pip to pip_stress + - eliminated use of temp files in dependency generation + - install backfire.c module source in /usr/src/backfire +- from David Sommerseth + - added new-and-improved hackbench to rt-tests + +* Mon Feb 15 2010 Clark Williams - 0.66-1 +- fix incorrect usage of sched_setscheduler in check_privs() + +* Mon Feb 8 2010 Clark Williams - 0.65-1 +- add workaround to hwlatdetect for incorrect initializer in + smi_detector.ko + +* Fri Jan 29 2010 Clark Williams - 0.64-1 +- from John Kacur + - automatic dependency generation + - style cleanups + - libnuma code cleanups + - add copyright to rt_numa.h + +* Wed Jan 27 2010 Clark Williams - 0.63-1 +- added support for libnuma V1 API + +* Tue Jan 26 2010 Clark Williams - 0.62-1 +- added NUMA option +- patch from Uwe Kleine-König + to clarify source copyrights +- moved hwlatdetect to python site-library + +* Wed Jan 13 2010 Clark Williams - 0.61-1 +- added --smp/-S option to setup for basic SMP testing +- added warn() and fatal() utility functions + +* Tue Dec 29 2009 Clark Williams - 0.60-1 +- John Kacur : + - added pip test (process based priority inheritance) + - refactored some error routines into the common library + - added 'make tags' option to Makefile +- Michael Olbrich added an unbuffered + output option to cyclictest (-u/--unbuffered) + +* Mon Dec 21 2009 Clark Williams - 0.59-1 +- deleted classic_pi +- David Sommerseth : + - added help text for -M (refresh-on-max) option for cyclictest + - fixed parsing of --mlockall in signaltest +- Carsten Emde provided a better explaination + for using the kernel module with the backfire program +- John Kacur cleaned up the trailing comments + on the guard macros in src/lib/rt-utils.h + +* Mon Dec 21 2009 Clark Williams - 0.58-1 +- merged jkacur's portable getcpu() code +- fixed inadvertent conversion of some source to DOS text files + +* Mon Dec 14 2009 Clark Williams - 0.57-1 +- John Kacur folded in Carsten Emde's tests + - ptsematest + - sigwaittest + - svsematest + - sendme +- Carsten Emde created a utility library + moving functions from cyclictest into src/lib/rt-utils.c +- Makefile cleanups from jkacur + +* Thu Dec 10 2009 Clark Williams - 0.56-1 +- cyclictest: added code to print break thread id with -b + +* Thu Nov 19 2009 Clark Williams - 0.55-1 +- pi_stress: cosmetic newline added +- fixes from John Kacur + - pi_stress: Remove racy state variables that cause watchdog to trigger + - pi_stress: Check whether quiet is set, before taking shutdown_mtx + - pi_stress: Use a pthread_mutex_t for the global variable shutdown + +* Tue Nov 17 2009 Clark Williams - 0.54-1 +- patches from John Kacur + - fix source style issues in pi_stress + - add a DEBUG option to the Makefile + - use CFLAGS for C compiler options + - label targets as PHONY if not generating actual file +- patch to remove rt-tests.spec from .PHONY in Makefile + +* Mon Nov 16 2009 Clark Williams - 0.53-2 +- added back missing dist tag for release + +* Tue Oct 6 2009 Clark Williams - 0.53-1 +- fixed incorrect format string in hwlatdetect.py +- added docs/release-checklist.txt + +* Mon Sep 21 2009 Clark Williams - 0.52-1 +- fixes and cleanups to pi_stress from jkacur +- added rostedt's rt-migrate-test + +* Thu Sep 3 2009 Clark Williams - 0.51-1 +- two manpage fixes from Uwe Kleine-König +- added -M option from Arnaldo Carvahlo de Melo + (for use on low-bandwidth connections, defer's update until new max hit) + +* Fri Jul 24 2009 Clark Williams - 0.50-2 +- minor patch to fix reporting option of hwlatdetect + +* Thu Jul 16 2009 Clark Williams - 0.50-1 +- patch to cyclictest from Sebastian Andrzej Siewior + to process options before checking for root user +- patch to cyclictest from Sebastian Andrzej Siewior + to exit with proper error code on exit +- added scripts/do-git-push script +- added push target to Makefile +- rewrite of hwlatdetect script to handle old smi_detector module + +* Sun Jul 5 2009 Clark Williams - 0.47-1 +- patch from GeunSik Lim to reorder options for readability +- patch from GeunSik Lim to add --policy option +- patch from GeunSik Lim to clarify -h option usage +- modified --policy to take scheduler policy name instead of integers + +* Thu Jul 2 2009 Clark Williams - 0.46-1 +- added fix from Daniel Gollub (doomsday latency) + +* Thu Jul 2 2009 Clark Williams - 0.45-1 +- bugfix from Daniel Gollub (fix cyclictest segfault) +- cyclictest format change from Sven-Thorsten Dietrich +- added help target to Makefile + +* Tue Jun 30 2009 Clark Williams - 0.44-1 +- fix to specfile (renamed smidetect to hwlatdetect) +- added code to hwlatdetect allow setting window and width properly + +* Thu Jun 25 2009 Clark Williams - 0.43-1 +- manpage fixes from Uwe Kleine-Konig + +* Fri Jun 12 2009 Clark Williams - 0.42-1 +- renamed smidetect -> hwlatdetect + +* Thu May 28 2009 Clark Williams - 0.41-1 +- added Stefan Agner's patch to fix calculating time difference + when delta is bigger than 2147 seconds + +* Wed May 13 2009 Clark Williams - 0.40-1 +- added smidetect + +* Thu Jan 03 2008 Clark Williams - 0.18-1 +- Initial build.