import rt-tests-1.10-3.el8
This commit is contained in:
parent
df1f80b723
commit
cc4f093a57
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/rt-tests-1.8.tar.xz
|
||||
SOURCES/rt-tests-1.10.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
50737a762ff27d6440798f10a33f720f476e1438 SOURCES/rt-tests-1.8.tar.xz
|
||||
7befc28537ebfa23b989037da99dd4eb842ee9b6 SOURCES/rt-tests-1.10.tar.xz
|
||||
|
@ -1,84 +0,0 @@
|
||||
From b07c57b33e4e24e873e680b8327f9be4f321caa9 Mon Sep 17 00:00:00 2001
|
||||
From: Yunfeng Ye <yeyunfeng@huawei.com>
|
||||
Date: Wed, 22 Apr 2020 10:19:52 +0800
|
||||
Subject: [PATCH] cyclictest: Fix setaffinity error on large NUMA machines
|
||||
|
||||
An Error occurs when run: ./cyclictest -v -t 5 -p 80 -i 1000 -a 3
|
||||
|
||||
On large NUMA machines still getting the following error
|
||||
WARN: Couldn't setaffinity in main thread: Invalid argument
|
||||
|
||||
Instead of calling numa_bitmask_alloc() with max_cpus, use
|
||||
numa_allocate_cpumask() to fix this.
|
||||
|
||||
Also, make sure numa_available() is called before any other calls to the
|
||||
numa library. Depending on how the options were invoked this could
|
||||
happen in parse_cpumask for example. Note, this did not seem to cause
|
||||
any problems in practice, but let's adhere to the library contract.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/cyclictest.c | 26 +++++++++++++++++++-------
|
||||
1 file changed, 19 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
|
||||
index c5f1fd46567a..79bb1cb71c68 100644
|
||||
--- a/src/cyclictest/cyclictest.c
|
||||
+++ b/src/cyclictest/cyclictest.c
|
||||
@@ -1135,7 +1135,7 @@ static void use_current_cpuset(const int max_cpus)
|
||||
|
||||
pid = getpid();
|
||||
|
||||
- curmask = numa_bitmask_alloc(sizeof(struct bitmask));
|
||||
+ curmask = numa_allocate_cpumask();
|
||||
numa_sched_getaffinity(pid, curmask);
|
||||
|
||||
/* Clear bits that are not set in both the cpuset from the environment,
|
||||
@@ -1225,6 +1225,20 @@ enum option_values {
|
||||
OPT_TRACEMARK, OPT_POSIX_TIMERS,
|
||||
};
|
||||
|
||||
+/* numa_available() must be called before any other calls to the numa library */
|
||||
+static void numa_initialize(void)
|
||||
+{
|
||||
+ static int is_initialized;
|
||||
+
|
||||
+ if (is_initialized == 1)
|
||||
+ return;
|
||||
+
|
||||
+ if (numa_available() != -1)
|
||||
+ numa = 1;
|
||||
+
|
||||
+ is_initialized = 1;
|
||||
+}
|
||||
+
|
||||
/* Process commandline options */
|
||||
static void process_options (int argc, char *argv[], int max_cpus)
|
||||
{
|
||||
@@ -1288,6 +1302,7 @@ static void process_options (int argc, char *argv[], int max_cpus)
|
||||
/* smp sets AFFINITY_USEALL in OPT_SMP */
|
||||
if (smp)
|
||||
break;
|
||||
+ numa_initialize();
|
||||
if (optarg != NULL) {
|
||||
parse_cpumask(optarg, max_cpus);
|
||||
setaffinity = AFFINITY_SPECIFIED;
|
||||
@@ -1460,12 +1475,9 @@ static void process_options (int argc, char *argv[], int max_cpus)
|
||||
/* if smp wasn't requested, test for numa automatically */
|
||||
if (!smp) {
|
||||
#ifdef NUMA
|
||||
- if (numa_available() != -1) {
|
||||
- numa = 1;
|
||||
- if (setaffinity == AFFINITY_UNSPECIFIED) {
|
||||
- setaffinity = AFFINITY_USEALL;
|
||||
- }
|
||||
- }
|
||||
+ numa_initialize();
|
||||
+ if (setaffinity == AFFINITY_UNSPECIFIED)
|
||||
+ setaffinity = AFFINITY_USEALL;
|
||||
#else
|
||||
warn("cyclictest was not built with the numa option\n");
|
||||
numa = 0;
|
||||
--
|
||||
2.21.3
|
||||
|
38
SOURCES/oslat-Use-cpuset-size-as-upper-bound.patch
Normal file
38
SOURCES/oslat-Use-cpuset-size-as-upper-bound.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From 6d5aa2b00d41ecdb6eb1355309737647e177e5e6 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Wagner <dwagner@suse.de>
|
||||
Date: Wed, 10 Feb 2021 17:54:07 +0100
|
||||
Subject: [PATCH 2/3] oslat: Use cpuset size as upper bound
|
||||
|
||||
To assign the threads to the correct CPU we need to use the cpuset
|
||||
size as upper bound for the loop and not the number of threads.
|
||||
|
||||
Fixes: 85b0763dacd9 ("oslat: Use parse_cpumask() from rt-numa.h")
|
||||
Reported-by: Peter Xu <peterx@redhat.com>
|
||||
Signed-off-by: Daniel Wagner <dwagner@suse.de>
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/oslat/oslat.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
|
||||
index 7826c277f26d..2fe550b3ee12 100644
|
||||
--- a/src/oslat/oslat.c
|
||||
+++ b/src/oslat/oslat.c
|
||||
@@ -747,9 +747,12 @@ int main(int argc, char *argv[])
|
||||
n_cores = numa_bitmask_weight(cpu_set);
|
||||
|
||||
TEST(threads = calloc(1, n_cores * sizeof(threads[0])));
|
||||
- for (i = 0; i < n_cores; ++i)
|
||||
- if (numa_bitmask_isbitset(cpu_set, i) && move_to_core(i) == 0)
|
||||
+ for (i = 0; n_cores && i < cpu_set->size; i++) {
|
||||
+ if (numa_bitmask_isbitset(cpu_set, i) && move_to_core(i) == 0) {
|
||||
threads[g.n_threads_total++].core_i = i;
|
||||
+ n_cores--;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
if (numa_bitmask_isbitset(cpu_set, 0) && g.rtprio)
|
||||
printf("WARNING: Running SCHED_FIFO workload on CPU 0 may hang the thread\n");
|
||||
--
|
||||
2.26.2
|
||||
|
73
SOURCES/oslat-allow-scheduling-on-all-possible-cores.patch
Normal file
73
SOURCES/oslat-allow-scheduling-on-all-possible-cores.patch
Normal file
@ -0,0 +1,73 @@
|
||||
From 29884cff6352856fee9fffecb4a715efd70e08f5 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Xu <peterx@redhat.com>
|
||||
Date: Thu, 18 Feb 2021 14:27:29 -0500
|
||||
Subject: [PATCH] oslat: Fix --cpu-list won't allow to schedule on all possible
|
||||
cores
|
||||
|
||||
parse_cpumask() is too strict for oslat, in that use_current_cpuset() will
|
||||
filter out all the cores that are not allowed for current process to run. This
|
||||
seems to be unnecessary at least for oslat. For example, the bash process that
|
||||
runs the oslat program may have a sched affinity of 0-2, however it's still
|
||||
legal to have it start a oslat thread running on the cores outside 0-2 as long
|
||||
as the follow up sched_setaffinity() will succeed.
|
||||
|
||||
numa_parse_cpustring_all() suites exactly for this case, which should already
|
||||
have considered sysconf(_SC_NPROCESSORS_ONLN) limit. Use that instead.
|
||||
|
||||
Since at it, also remove initialization of cpu_set variable otherwise it's
|
||||
leaked in previous parse_cpumask too: numa_parse_cpustring_all() will return a
|
||||
newly allocated buffer already. Quotting from manual:
|
||||
|
||||
numa_parse_nodestring() parses a character string list of nodes into a bit
|
||||
mask. The bit mask is allocated by numa_allocate_nodemask().
|
||||
|
||||
numa_parse_nodestring_all() is similar to numa_parse_nodestring, but can
|
||||
parse all possible nodes, not only current nodeset.
|
||||
|
||||
Cc: John Kacur <jkacur@redhat.com>
|
||||
Cc: Daniel Wagner <dwagner@suse.de>
|
||||
Cc: Clark Williams <williams@redhat.com>
|
||||
Reported-by: Pradipta Kumar Sahoo <psahoo@redhat.com>
|
||||
Reported-by: Mike Stowell <mstowell@redhat.com>
|
||||
Signed-off-by: Peter Xu <peterx@redhat.com>
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/oslat/oslat.c | 8 ++------
|
||||
1 file changed, 2 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
|
||||
index b2c5373388fb..465a694cdd1d 100644
|
||||
--- a/src/oslat/oslat.c
|
||||
+++ b/src/oslat/oslat.c
|
||||
@@ -785,7 +785,6 @@ int main(int argc, char *argv[])
|
||||
struct thread *threads;
|
||||
int i, n_cores;
|
||||
struct bitmask *cpu_set = NULL;
|
||||
- int max_cpus = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
|
||||
#ifdef FRC_MISSING
|
||||
printf("This architecture is not yet supported. "
|
||||
@@ -797,10 +796,6 @@ int main(int argc, char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
|
||||
- cpu_set = numa_allocate_cpumask();
|
||||
- if (!cpu_set)
|
||||
- fatal("oslat: Could not allocate cpumask\n");
|
||||
-
|
||||
g.app_name = argv[0];
|
||||
g.rtprio = 0;
|
||||
g.bucket_size = BUCKET_SIZE;
|
||||
@@ -817,7 +812,8 @@ int main(int argc, char *argv[])
|
||||
if (!g.cpu_list)
|
||||
g.cpu_list = strdup("all");
|
||||
|
||||
- if (parse_cpumask(g.cpu_list, max_cpus, &cpu_set) != 0)
|
||||
+ cpu_set = numa_parse_cpustring_all(g.cpu_list);
|
||||
+ if (!cpu_set)
|
||||
fatal("oslat: parse_cpumask failed.\n");
|
||||
n_cores = numa_bitmask_weight(cpu_set);
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,39 +0,0 @@
|
||||
From 3359c4464c2a13ab04f15598b1c79040399978f5 Mon Sep 17 00:00:00 2001
|
||||
From: Clark Williams <williams@redhat.com>
|
||||
Date: Tue, 21 Jul 2020 16:10:22 -0500
|
||||
Subject: [PATCH] pi_stress: limit the number of inversion groups to the number
|
||||
of online cores
|
||||
|
||||
Each inversion group is three SCHED_FIFO threads, so the chances of more groups
|
||||
than online cores actually getting to run is very slim. Limit the number of
|
||||
groups requested to be <= the number of online cpus.
|
||||
|
||||
Signed-off-by: Clark Williams <williams@redhat.com>
|
||||
|
||||
Changing the conversion in printf to %ld since the number of online
|
||||
processors is a long.
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/pi_tests/pi_stress.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/pi_tests/pi_stress.c b/src/pi_tests/pi_stress.c
|
||||
index 0ed844c636cd..eba21d7727bc 100644
|
||||
--- a/src/pi_tests/pi_stress.c
|
||||
+++ b/src/pi_tests/pi_stress.c
|
||||
@@ -1327,6 +1327,12 @@ void process_command_line(int argc, char **argv)
|
||||
break;
|
||||
case 'g':
|
||||
ngroups = strtol(optarg, NULL, 10);
|
||||
+ if (ngroups > num_processors) {
|
||||
+ pi_error("the number of groups cannot exceed "
|
||||
+ "the number of online processors (%ld)\n",
|
||||
+ num_processors);
|
||||
+ exit(-1);
|
||||
+ }
|
||||
pi_info("number of groups set to %d\n", ngroups);
|
||||
break;
|
||||
case 'r':
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 82aa302cc1b5fba57792dbf43721897aa3305cff Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Mon, 6 Jul 2020 13:18:40 -0400
|
||||
Subject: [PATCH 4/7] rt-tests: Add a man page for get_cyclictest_snapshot
|
||||
|
||||
Add a man page for get_cyclictest_snapshot based on -h
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/get_cyclictest_snapshot.8 | 44 ++++++++++++++++++++++++
|
||||
1 file changed, 44 insertions(+)
|
||||
create mode 100644 src/cyclictest/get_cyclictest_snapshot.8
|
||||
|
||||
diff --git a/src/cyclictest/get_cyclictest_snapshot.8 b/src/cyclictest/get_cyclictest_snapshot.8
|
||||
new file mode 100644
|
||||
index 000000000000..e9251a8e821f
|
||||
--- /dev/null
|
||||
+++ b/src/cyclictest/get_cyclictest_snapshot.8
|
||||
@@ -0,0 +1,44 @@
|
||||
+.\" Hey, EMACS: -*- nroff -*-
|
||||
+.TH GET_CYCLICTEST_SNAPSHOT 8 "July 6, 2020"
|
||||
+.\" 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 <n> insert n+1 empty lines
|
||||
+.\" for manpage-specific macros, see man(7)
|
||||
+.SH NAME
|
||||
+get_cyclictest_snapshot \- Get a snapshot of running instances of cyclictest
|
||||
+.SH SYNOPSIS
|
||||
+.SY get_cyclictest_snapshot
|
||||
+.OP [\-h]\ [\-l]\ [\-s\ [pid [pid ...]]]
|
||||
+.br
|
||||
+.OP [\-p\ [pid\ [pid ...]]]
|
||||
+.SH OPTIONS
|
||||
+Without options, this program will send USR2 to cyclictest to create a snapshot and then print it out.
|
||||
+.br
|
||||
+.TP
|
||||
+Optional arguments:
|
||||
+.TP
|
||||
+.B -h, --help
|
||||
+show this help message and exit
|
||||
+.TP
|
||||
+.B -l, --list
|
||||
+list the main pid(s) of running instances of cyclictest
|
||||
+.TP
|
||||
+.B -s [pid [pid ...]], --snapshot [pid [pid ...]]
|
||||
+take a snapshot of running instances of cyclictest
|
||||
+.br
|
||||
+by sending USR2 to cyclictest
|
||||
+.TP
|
||||
+.B -p [pid [pid ...]], --print [pid [pid ...]]
|
||||
+print the snapshots
|
||||
+.SH SEE ALSO
|
||||
+.BR cyclictest (8),
|
||||
+.SH AUTHOR
|
||||
+get_cyclictest_snapshot was written by John Kacur <jkacur at redhat dot com>
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 7731b805fa5a38e7e2dc0e551e102d2d5e6fa8d7 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Mon, 6 Jul 2020 23:19:24 -0400
|
||||
Subject: [PATCH] rt-tests: Install new man page get_cyclictest_snapshot.8
|
||||
|
||||
Install the new man page, get_cyclictest_snapshot.8
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
Makefile | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 05fc5eda71fa..be7831277c88 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -47,7 +47,8 @@ MANPAGES = src/cyclictest/cyclictest.8 \
|
||||
src/queuelat/queuelat.8 \
|
||||
src/sched_deadline/deadline_test.8 \
|
||||
src/ssdd/ssdd.8 \
|
||||
- src/sched_deadline/cyclicdeadline.8
|
||||
+ src/sched_deadline/cyclicdeadline.8 \
|
||||
+ src/cyclictest/get_cyclictest_snapshot.8
|
||||
|
||||
ifdef PYLIB
|
||||
MANPAGES += src/hwlatdetect/hwlatdetect.8
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 89f9ce00774c02388bd29e0da05147282d24830e Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Mon, 6 Jul 2020 13:21:42 -0400
|
||||
Subject: [PATCH 5/7] rt-tests: Tweak the cyclictest man page
|
||||
|
||||
Tweak the cyclictest man page with the .SY macro to make the cyclictest
|
||||
command stand out apart from the options
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/cyclictest.8 | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/cyclictest/cyclictest.8 b/src/cyclictest/cyclictest.8
|
||||
index 00e2d2403996..44b5d0dbcc4a 100644
|
||||
--- a/src/cyclictest/cyclictest.8
|
||||
+++ b/src/cyclictest/cyclictest.8
|
||||
@@ -15,7 +15,7 @@
|
||||
.SH NAME
|
||||
cyclictest \- High resolution test program
|
||||
.SH SYNOPSIS
|
||||
-.B cyclictest
|
||||
+.SY cyclictest
|
||||
.RI "[ \-hfmnqrsvMS ] [\-a " proc " ] [\-A " align " ] [\-b " usec " ] [\-c " clock " ] [\-d " dist " ] \
|
||||
[\-h " histogram " ] [\-i " intv " ] [\-l " loop " ] [\-o " red " ] [\-p " prio " ] \
|
||||
[\-t " num " ] [\-D " time "] [\-w] [\-W] [\-y " policy " ] [ \-S | \-U ]"
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,259 +0,0 @@
|
||||
From dc433f68c9f19eb0a28e0f00342dfd33f319f0fa Mon Sep 17 00:00:00 2001
|
||||
From: Peter Xu <peterx@redhat.com>
|
||||
Date: Mon, 17 Aug 2020 17:55:04 -0400
|
||||
Subject: [PATCH 1/2] rt-tests: cyclictest: Move ftrace helpers into
|
||||
rt-utils.[ch]
|
||||
|
||||
Then they can be further used by other programs too.
|
||||
|
||||
Two trivial things to mention.
|
||||
|
||||
Firstly, move trace_marker out of enable_trace_mark(). No functional change.
|
||||
|
||||
Secondly, remove the fileprefix setting in process_options(), because if
|
||||
tracelimit is non-zero, fileprefix will be after all replaced by a further call
|
||||
to get_debugfileprefix() in debugfs_prepare().
|
||||
|
||||
Signed-off-by: Peter Xu <peterx@redhat.com>
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/cyclictest.c | 90 +------------------------------------
|
||||
src/include/rt-utils.h | 3 ++
|
||||
src/lib/rt-utils.c | 82 +++++++++++++++++++++++++++++++++
|
||||
3 files changed, 86 insertions(+), 89 deletions(-)
|
||||
|
||||
diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
|
||||
index eb61be394f2e..dd418939a0c2 100644
|
||||
--- a/src/cyclictest/cyclictest.c
|
||||
+++ b/src/cyclictest/cyclictest.c
|
||||
@@ -219,8 +219,6 @@ static pthread_barrier_t align_barr;
|
||||
static pthread_barrier_t globalt_barr;
|
||||
static struct timespec globalt;
|
||||
|
||||
-static char *procfileprefix = "/proc/sys/kernel/";
|
||||
-static char *fileprefix;
|
||||
static char fifopath[MAX_PATH];
|
||||
static char histfile[MAX_PATH];
|
||||
|
||||
@@ -330,89 +328,6 @@ static inline int64_t calctime(struct timespec t)
|
||||
return time;
|
||||
}
|
||||
|
||||
-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;
|
||||
-}
|
||||
-
|
||||
-#define TRACEBUFSIZ 1024
|
||||
-static __thread char tracebuf[TRACEBUFSIZ];
|
||||
-
|
||||
-static void tracemark(char *fmt, ...) __attribute__((format(printf, 1, 2)));
|
||||
-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 || trace_fd < 0)
|
||||
- return;
|
||||
-
|
||||
- va_start(ap, fmt);
|
||||
- len = vsnprintf(tracebuf, TRACEBUFSIZ, fmt, ap);
|
||||
- va_end(ap);
|
||||
-
|
||||
- /* write the tracemark message */
|
||||
- write(tracemark_fd, tracebuf, len);
|
||||
-
|
||||
- /* now stop any trace */
|
||||
- write(trace_fd, "0\n", 2);
|
||||
-}
|
||||
-
|
||||
-static void open_tracemark_fd(void)
|
||||
-{
|
||||
- char path[MAX_PATH];
|
||||
-
|
||||
- /*
|
||||
- * open the tracemark file if it's not already open
|
||||
- */
|
||||
- if (tracemark_fd < 0) {
|
||||
- sprintf(path, "%s/%s", fileprefix, "trace_marker");
|
||||
- tracemark_fd = open(path, O_WRONLY);
|
||||
- if (tracemark_fd < 0) {
|
||||
- warn("unable to open trace_marker file: %s\n", path);
|
||||
- return;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- /*
|
||||
- * if we're not tracing and the tracing_on fd is not open,
|
||||
- * open the tracing_on file so that we can stop the trace
|
||||
- * if we hit a breaktrace threshold
|
||||
- */
|
||||
- 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);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static void debugfs_prepare(void)
|
||||
-{
|
||||
- if (mount_debugfs(NULL))
|
||||
- fatal("could not mount debugfs");
|
||||
-
|
||||
- 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;
|
||||
-
|
||||
- debugfs_prepare();
|
||||
- open_tracemark_fd();
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* Raise the soft priority limit up to prio, if that is less than or equal
|
||||
* to the hard limit
|
||||
@@ -1498,9 +1413,6 @@ static void process_options (int argc, char *argv[], int max_cpus)
|
||||
"on this processor\n");
|
||||
}
|
||||
|
||||
- if (tracelimit)
|
||||
- fileprefix = procfileprefix;
|
||||
-
|
||||
if (clocksel < 0 || clocksel > ARRAY_SIZE(clocksources))
|
||||
error = 1;
|
||||
|
||||
@@ -2065,7 +1977,7 @@ int main(int argc, char **argv)
|
||||
/* use the /dev/cpu_dma_latency trick if it's there */
|
||||
set_latency_target();
|
||||
|
||||
- if (tracelimit)
|
||||
+ if (tracelimit && trace_marker)
|
||||
enable_trace_mark();
|
||||
|
||||
if (check_timer())
|
||||
diff --git a/src/include/rt-utils.h b/src/include/rt-utils.h
|
||||
index 6ec2b2011959..51489b408e6c 100644
|
||||
--- a/src/include/rt-utils.h
|
||||
+++ b/src/include/rt-utils.h
|
||||
@@ -27,4 +27,7 @@ pid_t gettid(void);
|
||||
|
||||
int parse_time_string(char *val);
|
||||
|
||||
+void enable_trace_mark(void);
|
||||
+void tracemark(char *fmt, ...) __attribute__((format(printf, 1, 2)));
|
||||
+
|
||||
#endif /* __RT_UTILS.H */
|
||||
diff --git a/src/lib/rt-utils.c b/src/lib/rt-utils.c
|
||||
index 1998a327d036..f786588706cd 100644
|
||||
--- a/src/lib/rt-utils.c
|
||||
+++ b/src/lib/rt-utils.c
|
||||
@@ -24,7 +24,13 @@
|
||||
#include "rt-sched.h"
|
||||
#include "error.h"
|
||||
|
||||
+#define TRACEBUFSIZ 1024
|
||||
+
|
||||
static char debugfileprefix[MAX_PATH];
|
||||
+static char *fileprefix;
|
||||
+static int trace_fd = -1;
|
||||
+static int tracemark_fd = -1;
|
||||
+static __thread char tracebuf[TRACEBUFSIZ];
|
||||
|
||||
/*
|
||||
* Finds the tracing directory in a mounted debugfs
|
||||
@@ -355,3 +361,79 @@ int parse_time_string(char *val)
|
||||
}
|
||||
return t;
|
||||
}
|
||||
+
|
||||
+void open_tracemark_fd(void)
|
||||
+{
|
||||
+ char path[MAX_PATH];
|
||||
+
|
||||
+ /*
|
||||
+ * open the tracemark file if it's not already open
|
||||
+ */
|
||||
+ if (tracemark_fd < 0) {
|
||||
+ sprintf(path, "%s/%s", fileprefix, "trace_marker");
|
||||
+ tracemark_fd = open(path, O_WRONLY);
|
||||
+ if (tracemark_fd < 0) {
|
||||
+ warn("unable to open trace_marker file: %s\n", path);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * if we're not tracing and the tracing_on fd is not open,
|
||||
+ * open the tracing_on file so that we can stop the trace
|
||||
+ * if we hit a breaktrace threshold
|
||||
+ */
|
||||
+ 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);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+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;
|
||||
+}
|
||||
+
|
||||
+void debugfs_prepare(void)
|
||||
+{
|
||||
+ if (mount_debugfs(NULL))
|
||||
+ fatal("could not mount debugfs");
|
||||
+
|
||||
+ 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");
|
||||
+}
|
||||
+
|
||||
+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 || trace_fd < 0)
|
||||
+ return;
|
||||
+
|
||||
+ va_start(ap, fmt);
|
||||
+ len = vsnprintf(tracebuf, TRACEBUFSIZ, fmt, ap);
|
||||
+ va_end(ap);
|
||||
+
|
||||
+ /* write the tracemark message */
|
||||
+ write(tracemark_fd, tracebuf, len);
|
||||
+
|
||||
+ /* now stop any trace */
|
||||
+ write(trace_fd, "0\n", 2);
|
||||
+}
|
||||
+
|
||||
+void enable_trace_mark(void)
|
||||
+{
|
||||
+ debugfs_prepare();
|
||||
+ open_tracemark_fd();
|
||||
+}
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,32 +0,0 @@
|
||||
From caaec484d88fe4dfc1f83b8ce2e2ff1167193517 Mon Sep 17 00:00:00 2001
|
||||
From: Yunfeng Ye <yeyunfeng@huawei.com>
|
||||
Date: Thu, 2 Jul 2020 10:22:21 +0800
|
||||
Subject: [PATCH] rt-tests: cyclictest: remove the debug log "pid = xxx" in
|
||||
rstat_shm_open()
|
||||
|
||||
The infomation "pid = xxx" is printed with other infomation on the same
|
||||
line. so remove this left over debug message in rstat_shm_open().
|
||||
|
||||
Signed-off-by: yeyunfeng <yeyunfeng@huawei.com>
|
||||
|
||||
Edited the descriptioin in the log a little bit.
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/cyclictest.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
|
||||
index 79bb1cb71c68..eb61be394f2e 100644
|
||||
--- a/src/cyclictest/cyclictest.c
|
||||
+++ b/src/cyclictest/cyclictest.c
|
||||
@@ -1921,7 +1921,6 @@ static int rstat_shm_open(void)
|
||||
pid_t pid;
|
||||
|
||||
pid = getpid();
|
||||
- printf("pid = %d", pid);
|
||||
|
||||
snprintf(shm_name, SHM_BUF_SIZE, "%s%d", "/cyclictest", pid);
|
||||
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,76 +0,0 @@
|
||||
From c7b4217ff2b04d774ee5e2728eeb5da1cba275ff Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Mon, 6 Jul 2020 16:07:17 -0400
|
||||
Subject: [PATCH 7/7] rt-tests: get_cyclictest_snapshot: Warn if no cyclictest
|
||||
instance found
|
||||
|
||||
- Print a warning if no cyclictest instance is found.
|
||||
- Also fix up the method take_snapshot for the case when the user
|
||||
provides a pid.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/get_cyclictest_snapshot.py | 23 +++++++++++++++++++++--
|
||||
1 file changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cyclictest/get_cyclictest_snapshot.py b/src/cyclictest/get_cyclictest_snapshot.py
|
||||
index 27fc629ca53e..aed9681e4cc5 100755
|
||||
--- a/src/cyclictest/get_cyclictest_snapshot.py
|
||||
+++ b/src/cyclictest/get_cyclictest_snapshot.py
|
||||
@@ -19,6 +19,14 @@ args = parser.parse_args()
|
||||
class Snapshot:
|
||||
""" Class for getting a snapshot of a running cyclictest instance """
|
||||
|
||||
+ warned = False
|
||||
+
|
||||
+ def print_warning():
|
||||
+ """ print a warning one time only even if called multiple times """
|
||||
+ if not Snapshot.warned:
|
||||
+ Snapshot.warned = True
|
||||
+ print("No cyclictest instance found")
|
||||
+
|
||||
def __init__(self):
|
||||
self.pids = []
|
||||
self.shm_files = []
|
||||
@@ -36,18 +44,27 @@ class Snapshot:
|
||||
def take_snapshot(self, spids=None):
|
||||
""" Send USR2 to all running instances of cyclictest,
|
||||
or just to a specific pid (spids) if specified. """
|
||||
- for pid in self.pids:
|
||||
- if (spids is None) or (pid in spids):
|
||||
+ if spids is None:
|
||||
+ if not self.pids:
|
||||
+ Snapshot.print_warning()
|
||||
+ for pid in self.pids:
|
||||
+ subprocess.run(["kill", "-s", "USR2", pid])
|
||||
+ else:
|
||||
+ for pid in spids:
|
||||
subprocess.run(["kill", "-s", "USR2", pid])
|
||||
|
||||
def print_pids(self):
|
||||
""" Print the list of pids of running cyclictest instances. """
|
||||
+ if not self.pids:
|
||||
+ Snapshot.print_warning()
|
||||
for pid in self.pids:
|
||||
print(pid)
|
||||
|
||||
def print(self, spids=None):
|
||||
""" Print the data in /dev/shm/cyclictest* """
|
||||
if spids is None:
|
||||
+ if not self.shm_files:
|
||||
+ Snapshot.print_warning()
|
||||
for shm_file in self.shm_files:
|
||||
with open(shm_file, 'r') as f:
|
||||
data = f.read()
|
||||
@@ -59,6 +76,8 @@ class Snapshot:
|
||||
with open(shm_file, 'r') as f:
|
||||
data = f.read()
|
||||
print(data)
|
||||
+ else:
|
||||
+ Snapshot.print_warning()
|
||||
|
||||
snapshot = Snapshot()
|
||||
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,114 +0,0 @@
|
||||
From 3ee764c75dd0cdb2ade1a832ed3769ed4964cd30 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Thu, 2 Jul 2020 21:19:55 -0400
|
||||
Subject: [PATCH 1/7] rt-tests: improvements to the python style in
|
||||
get_cyclictest_snapshot
|
||||
|
||||
Improvements to the python style in get_cyclictest_snapshot
|
||||
|
||||
- Add comments to the methods, functions, class and moduleb
|
||||
- Put imports on individual lines
|
||||
- Use "is" and "is not" with None insteald of == or !=
|
||||
- Don't compare the length of lists to zero, to determine if they are
|
||||
empty
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/cyclictest/get_cyclictest_snapshot.py | 38 +++++++++++++----------
|
||||
1 file changed, 22 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/cyclictest/get_cyclictest_snapshot.py b/src/cyclictest/get_cyclictest_snapshot.py
|
||||
index 7dddfc5d65b0..27fc629ca53e 100755
|
||||
--- a/src/cyclictest/get_cyclictest_snapshot.py
|
||||
+++ b/src/cyclictest/get_cyclictest_snapshot.py
|
||||
@@ -1,9 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
+""" Program to get a snapshot of a running instance of cyclictest """
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2020 John Kacur <jkacur@redhat.com>
|
||||
|
||||
-import subprocess, signal, argparse, re, glob, sys
|
||||
+import subprocess
|
||||
+import argparse
|
||||
+import re
|
||||
+import glob
|
||||
+import sys
|
||||
|
||||
parser = argparse.ArgumentParser(description='Get a snapshot of running instances of cyclictest')
|
||||
parser.add_argument('-l', '--list', action='store_true', help='list the main pid(s) of running instances of cyclictest')
|
||||
@@ -11,8 +16,8 @@ parser.add_argument('-s', '--snapshot', nargs='*', metavar='pid', help='take a s
|
||||
parser.add_argument('-p', '--print', nargs='*', metavar='pid', help='print the snapshots')
|
||||
args = parser.parse_args()
|
||||
|
||||
-
|
||||
class Snapshot:
|
||||
+ """ Class for getting a snapshot of a running cyclictest instance """
|
||||
|
||||
def __init__(self):
|
||||
self.pids = []
|
||||
@@ -20,6 +25,7 @@ class Snapshot:
|
||||
self.refresh()
|
||||
|
||||
def refresh(self):
|
||||
+ """ Create a list of running cyclictest instances. """
|
||||
self.pids = []
|
||||
self.shm_files = glob.glob('/dev/shm/cyclictest*')
|
||||
self.shm_files.sort()
|
||||
@@ -27,21 +33,21 @@ class Snapshot:
|
||||
pid = re.search('[0-9]*$', shm_file).group()
|
||||
self.pids += [pid]
|
||||
|
||||
- # Send USR2 to all running instances of cyclictest or just to
|
||||
- # a specific pid (spid) if specified
|
||||
def take_snapshot(self, spids=None):
|
||||
+ """ Send USR2 to all running instances of cyclictest,
|
||||
+ or just to a specific pid (spids) if specified. """
|
||||
for pid in self.pids:
|
||||
- if (spids == None) or (pid in spids):
|
||||
- # print("kill -s USR2 ", pid)
|
||||
+ if (spids is None) or (pid in spids):
|
||||
subprocess.run(["kill", "-s", "USR2", pid])
|
||||
|
||||
def print_pids(self):
|
||||
+ """ Print the list of pids of running cyclictest instances. """
|
||||
for pid in self.pids:
|
||||
print(pid)
|
||||
|
||||
- # Print the data in /dev/shm/cyclictest*
|
||||
def print(self, spids=None):
|
||||
- if spids == None:
|
||||
+ """ Print the data in /dev/shm/cyclictest* """
|
||||
+ if spids is None:
|
||||
for shm_file in self.shm_files:
|
||||
with open(shm_file, 'r') as f:
|
||||
data = f.read()
|
||||
@@ -59,17 +65,17 @@ snapshot = Snapshot()
|
||||
if args.list:
|
||||
snapshot.print_pids()
|
||||
|
||||
-if args.snapshot != None:
|
||||
- if len(args.snapshot) == 0:
|
||||
- snapshot.take_snapshot()
|
||||
- else:
|
||||
+if args.snapshot is not None:
|
||||
+ if args.snapshot:
|
||||
snapshot.take_snapshot(args.snapshot)
|
||||
-
|
||||
-if args.print != None:
|
||||
- if len(args.print) == 0:
|
||||
- snapshot.print()
|
||||
else:
|
||||
+ snapshot.take_snapshot()
|
||||
+
|
||||
+if args.print is not None:
|
||||
+ if args.print:
|
||||
snapshot.print(args.print)
|
||||
+ else:
|
||||
+ snapshot.print()
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
snapshot.take_snapshot()
|
||||
--
|
||||
2.21.3
|
||||
|
47
SOURCES/rt-tests-oslat-Allocate-memory-for-cpu_set.patch
Normal file
47
SOURCES/rt-tests-oslat-Allocate-memory-for-cpu_set.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From 5821269dde6a778b0af06c172bc2f19bbe324bda Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Fri, 12 Feb 2021 12:22:23 -0500
|
||||
Subject: [PATCH 3/3] rt-tests: oslat: Allocate memory for cpu_set
|
||||
|
||||
- cpu_set is a pointer to a bitmask struct
|
||||
Memory needs to be allocated for the struct, so call
|
||||
numa_allocate_cpumask()
|
||||
|
||||
- use rt-tests fatal to exit on error conditions
|
||||
|
||||
Reviewed-by: Daniel Wagner <dwagner@suse.de>
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/oslat/oslat.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
|
||||
index 2fe550b3ee12..2a3be393a268 100644
|
||||
--- a/src/oslat/oslat.c
|
||||
+++ b/src/oslat/oslat.c
|
||||
@@ -727,6 +727,10 @@ int main(int argc, char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
|
||||
+ cpu_set = numa_allocate_cpumask();
|
||||
+ if (!cpu_set)
|
||||
+ fatal("oslat: Could not allocate cpumask\n");
|
||||
+
|
||||
g.app_name = argv[0];
|
||||
g.rtprio = 0;
|
||||
g.bucket_size = BUCKET_SIZE;
|
||||
@@ -742,8 +746,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (!g.cpu_list)
|
||||
g.cpu_list = strdup("all");
|
||||
- if (parse_cpumask(g.cpu_list, max_cpus, &cpu_set))
|
||||
- exit(1);
|
||||
+
|
||||
+ if (parse_cpumask(g.cpu_list, max_cpus, &cpu_set) != 0)
|
||||
+ fatal("oslat: parse_cpumask failed.\n");
|
||||
n_cores = numa_bitmask_weight(cpu_set);
|
||||
|
||||
TEST(threads = calloc(1, n_cores * sizeof(threads[0])));
|
||||
--
|
||||
2.26.2
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
54
SOURCES/rt-tests-oslat-print-version-string.patch
Normal file
54
SOURCES/rt-tests-oslat-print-version-string.patch
Normal file
@ -0,0 +1,54 @@
|
||||
From 2f4d564fb5557f7a420c183ddd3938647c231a8c Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Wed, 10 Feb 2021 22:18:41 -0500
|
||||
Subject: [PATCH 1/3] rt-tests: oslat: print version string
|
||||
|
||||
During the streamlining of the command line options something went awry
|
||||
with the version. The author of oslat wishes to always print the version
|
||||
string. This allows us to just exit in the case of -v
|
||||
|
||||
Fixes e411219d27b1
|
||||
|
||||
Reported-by: Pradipta Kumar Sahoo <psahoo@redhat.com>
|
||||
Reported-by: Reported-by: Peter Xu <peterx@redhat.com>
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/oslat/oslat.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
|
||||
index 5b7e0d5b5d5c..7826c277f26d 100644
|
||||
--- a/src/oslat/oslat.c
|
||||
+++ b/src/oslat/oslat.c
|
||||
@@ -512,7 +512,6 @@ static void handle_alarm(int code)
|
||||
|
||||
static void usage(int error)
|
||||
{
|
||||
- printf("oslat V %1.2f\n", VERSION);
|
||||
printf("Usage:\n"
|
||||
"oslat <options>\n\n"
|
||||
"This is an OS latency detector by running busy loops on specified cores.\n"
|
||||
@@ -657,8 +656,8 @@ static void parse_options(int argc, char *argv[])
|
||||
break;
|
||||
case 'v':
|
||||
/*
|
||||
- * Because we always dump the version even before parsing options,
|
||||
- * what we need to do is to quit..
|
||||
+ * We always print the version before parsing options
|
||||
+ * so just exit
|
||||
*/
|
||||
exit(0);
|
||||
break;
|
||||
@@ -736,7 +735,7 @@ int main(int argc, char *argv[])
|
||||
g.workload_mem_size = WORKLOAD_MEM_SIZE;
|
||||
/* Run the main thread on cpu0 by default */
|
||||
g.cpu_main_thread = 0;
|
||||
-
|
||||
+ printf("oslat V %1.2f\n", VERSION);
|
||||
parse_options(argc, argv);
|
||||
|
||||
TEST(mlockall(MCL_CURRENT | MCL_FUTURE) == 0);
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 868ee948b626dced91bb98207ebd6b3a52f9fcfc Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Fri, 3 Jul 2020 13:28:39 -0400
|
||||
Subject: [PATCH 2/7] rt-tests: pi_stress.8: Remove unused -t n from the
|
||||
manpage
|
||||
|
||||
The -t option was replaced with the -D, --duration=TIME option
|
||||
Remove it from the manpage as well.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/pi_tests/pi_stress.8 | 6 ------
|
||||
1 file changed, 6 deletions(-)
|
||||
|
||||
diff --git a/src/pi_tests/pi_stress.8 b/src/pi_tests/pi_stress.8
|
||||
index 5e2af6189ca1..ed03ad6187e7 100644
|
||||
--- a/src/pi_tests/pi_stress.8
|
||||
+++ b/src/pi_tests/pi_stress.8
|
||||
@@ -15,8 +15,6 @@ pi_stress \- a stress test for POSIX Priority Inheritance mutexes
|
||||
.B pi_stress
|
||||
.RB [ \-i|\-\-inversions
|
||||
.IR inversions ]
|
||||
-.RB [ \-t|\-\-duration
|
||||
-.IR seconds ]
|
||||
.RB [ \-g|\-\-groups
|
||||
.IR groups
|
||||
.RB [ \-d|\-\-debug ]
|
||||
@@ -50,10 +48,6 @@ Run for
|
||||
.I n
|
||||
number of inversion conditions. This is the total number of inversions
|
||||
for all inversion groups. Default is \-1 for infinite.
|
||||
-.IP "\-t n|\-\-duration=n"
|
||||
-Run the test for
|
||||
-.I n
|
||||
-seconds and then terminate.
|
||||
.IP "\-g n|\-\-groups=n"
|
||||
The number of inversion groups to run. Defaults to 10.
|
||||
.IP \-d|\-\-debug
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,41 +0,0 @@
|
||||
From e554f3d5d95330ba0b961bc7e7ecf3a19485b1c9 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Fri, 3 Jul 2020 19:15:41 -0400
|
||||
Subject: [PATCH 3/7] rt-tests: ptsematest.8: Update the ptsematest man page
|
||||
|
||||
The smp option should be a capital (-S)
|
||||
Also fix the update synopsis to include missing and options
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/ptsematest/ptsematest.8 | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/ptsematest/ptsematest.8 b/src/ptsematest/ptsematest.8
|
||||
index 8f76bca4b6a8..5ee7d694d50d 100644
|
||||
--- a/src/ptsematest/ptsematest.8
|
||||
+++ b/src/ptsematest/ptsematest.8
|
||||
@@ -2,9 +2,9 @@
|
||||
.SH "NAME"
|
||||
.LP
|
||||
\fBptsematest\fR \- Start two threads and measure the latency of interprocess communication with POSIX mutex.
|
||||
-.SH "SYNTAX"
|
||||
+.SH "SYNOPSIS"
|
||||
.LP
|
||||
-ptsematest [-a|-a PROC] [-b USEC] [-d DIST] [-i INTV] [-l loops] [-p PRIO] [-t|-t NUM]
|
||||
+ptsematest [-a|--affinity [PROC]] [-b|--breaktrace USEC] [-d|--distance DIST] [-D|--duration TIME][-i|--interval INTV] [-l|--loops LOOPS] [-p|--prio PRIO] [-S|--smp] [-t|--threads [NUM]]
|
||||
.br
|
||||
.SH "DESCRIPTION"
|
||||
.LP
|
||||
@@ -35,7 +35,7 @@ Set the number of loops. The default is 0 (endless). This option is useful for a
|
||||
.B \-p, \-\-prio=PRIO
|
||||
Set the priority of the process.
|
||||
.TP
|
||||
-.B \-s, \-\-smp
|
||||
+.B \-S, \-\-smp
|
||||
SMP testing: options -a -t and same priority
|
||||
.TP
|
||||
.B \-t, \-\-threads[=NUM]
|
||||
--
|
||||
2.21.3
|
||||
|
@ -1,111 +0,0 @@
|
||||
From 41a3f9e53920d50b48c04593bfa3eb0e87fcf49f Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Tue, 12 May 2020 11:02:39 -0400
|
||||
Subject: [PATCH] rt-tests: queuelat: Fix storing unsigned long long in int
|
||||
|
||||
queuelat can occassionally hang because of overflow mixing
|
||||
unsigned long long and int
|
||||
|
||||
Attaching to process 173912
|
||||
Reading symbols from /root/rt-tests/queuelat...done.
|
||||
Reading symbols from /lib64/librt.so.1...Reading symbols from /usr/lib/debug/usr/lib64/librt-2.28.so.debug...done.
|
||||
done.
|
||||
Reading symbols from /lib64/libpthread.so.0...Reading symbols from /usr/lib/debug/usr/lib64/libpthread-2.28.so.debug...done.
|
||||
done.
|
||||
[Thread debugging using libthread_db enabled]
|
||||
Using host libthread_db library "/lib64/libthread_db.so.1".
|
||||
Reading symbols from /lib64/libc.so.6...Reading symbols from /usr/lib/debug/usr/lib64/libc-2.28.so.debug...done.
|
||||
done.
|
||||
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug/usr/lib64/ld-2.28.so.debug...done.
|
||||
done.
|
||||
__memmove_avx_unaligned_erms ()
|
||||
at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:254
|
||||
254 rep movsb
|
||||
(gdb) c
|
||||
Continuing.
|
||||
|
||||
Program received signal SIGSEGV, Segmentation fault.
|
||||
0x0000000000400c02 in account (val=18446744071562067968)
|
||||
at src/queuelat/queuelat.c:93
|
||||
93 buckets[bucket_nr]++;
|
||||
(gdb) bt full
|
||||
at src/queuelat/queuelat.c:93
|
||||
bucket_nr = -193273529
|
||||
a = 825932047802952
|
||||
b = 825925371232340
|
||||
dest = 0xf322b0
|
||||
src = 0xf4e3f0
|
||||
i = 45749
|
||||
delta = -2147483648
|
||||
loops = 50000
|
||||
time = 6500
|
||||
bucket_nr = 65
|
||||
n = 115000
|
||||
delta = 3500
|
||||
at src/queuelat/queuelat.c:671
|
||||
tsc_freq_mhz = 2398.5039999999999
|
||||
max_queue_len_f = 159.900284
|
||||
mvalue = 0x7ffc99d3021c "20000"
|
||||
cvalue = 0x7ffc99d30225 "300"
|
||||
pvalue = 0x7ffc99d30238 "6.1"
|
||||
fvalue = 0x7ffc99d3022c "2398.504"
|
||||
tvalue = 0x7ffc99d3023f "30"
|
||||
qvalue = 0x0
|
||||
index = 0
|
||||
c = -1
|
||||
|
||||
Fix the above by declaring delta as an unsigned long long
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
src/queuelat/queuelat.c | 11 +++++------
|
||||
1 file changed, 5 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c
|
||||
index 7e5e35768a8b..22b68a84d6ae 100644
|
||||
--- a/src/queuelat/queuelat.c
|
||||
+++ b/src/queuelat/queuelat.c
|
||||
@@ -354,9 +354,9 @@ static void trace_write(char *buf, int len)
|
||||
|
||||
static void run_n(int n)
|
||||
{
|
||||
- u64 a, b;
|
||||
+ u64 a, b, delta;
|
||||
void *dest, *src;
|
||||
- int i, delta, loops = 50000;
|
||||
+ int i, loops = 50000;
|
||||
|
||||
init_buckets();
|
||||
|
||||
@@ -445,9 +445,8 @@ static void print_exit_info(void)
|
||||
|
||||
void main_loop(void)
|
||||
{
|
||||
- u64 a, b;
|
||||
+ u64 a, b, delta;
|
||||
void *dest, *src;
|
||||
- int delta;
|
||||
int queue_size = 0;
|
||||
|
||||
trace_open();
|
||||
@@ -500,7 +499,7 @@ void main_loop(void)
|
||||
continue;
|
||||
|
||||
ret = sprintf(buf, "memmove block queue_size=%d queue_dec=%d"
|
||||
- " queue_inc=%d delta=%d ns\n", queue_size,
|
||||
+ " queue_inc=%d delta=%llu ns\n", queue_size,
|
||||
nr_packets_drain_per_block,
|
||||
nr_packets_fill, delta);
|
||||
trace_write(buf, ret);
|
||||
@@ -536,7 +535,7 @@ static void install_signals(void)
|
||||
|
||||
int calculate_nr_packets_drain_per_block(void)
|
||||
{
|
||||
- int maxcount;
|
||||
+ unsigned long long maxcount;
|
||||
int i, time;
|
||||
int found = 0;
|
||||
int bucket_nr = find_highest_count_bucket();
|
||||
--
|
||||
2.21.3
|
||||
|
@ -5,8 +5,8 @@ Name: rt-tests
|
||||
# BuildRequires: numactl-devel
|
||||
# Numa argument to make: NUMA=1
|
||||
#
|
||||
Version: 1.8
|
||||
Release: 11%{?dist}
|
||||
Version: 1.10
|
||||
Release: 3%{?dist}
|
||||
License: GPLv2
|
||||
Group: Development/Tools
|
||||
URL: git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
|
||||
@ -14,25 +14,17 @@ Source0: https://www.kernel.org/pub/linux/utils/rt-tests/%{name}-%{version}.tar.
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||
ExclusiveArch: x86_64
|
||||
BuildRequires: numactl-devel python3-devel
|
||||
BuildRequires: gcc
|
||||
BuildRequires: numactl-devel
|
||||
BuildRequires: python3-devel
|
||||
%{?__python3:Requires: %{__python3}}
|
||||
Requires: bash bc
|
||||
|
||||
#Patches
|
||||
Patch1: cyclictest-Fix-setaffinity-error-on-large-NUMA-machines.patch
|
||||
Patch2: rt-tests-queuelat-Fix-storing-unsigned-long-long-int.patch
|
||||
Patch3: rt-tests-cyclictest-remove-the-debug-log-pid-xxx-in-.patch
|
||||
Patch4: rt-tests-improvements-to-the-python-style-in-get_cyc.patch
|
||||
Patch5: rt-tests-pi_stress.8-Remove-unused-t-n-from-the-manp.patch
|
||||
Patch6: rt-tests-ptsematest.8-Update-the-ptsematest-man-page.patch
|
||||
Patch7: rt-tests-Add-a-man-page-for-get_cyclictest_snapshot.patch
|
||||
Patch8: rt-tests-Tweak-the-cyclictest-man-page.patch
|
||||
Patch9: rt-tests-get_cyclictest_snapshot-Warn-if-no-cyclicte.patch
|
||||
Patch10: rt-tests-Install-new-man-page-get_cyclictest_snapshot.patch
|
||||
Patch11: pi_stress-limit-the-number-of-inversion-groups-to-th.patch
|
||||
Patch12: rt-tests-cyclictest-Move-ftrace-helpers-into-rt-util.patch
|
||||
Patch13: rt-tests-oslat-Init-commit.patch
|
||||
Patch14: rt-tests-oslat-Proper-reformat-of-code.patch
|
||||
Patch1: rt-tests-oslat-print-version-string.patch
|
||||
Patch2: oslat-Use-cpuset-size-as-upper-bound.patch
|
||||
Patch3: rt-tests-oslat-Allocate-memory-for-cpu_set.patch
|
||||
Patch4: oslat-allow-scheduling-on-all-possible-cores.patch
|
||||
|
||||
%description
|
||||
rt-tests is a set of programs that test and measure various components of
|
||||
@ -40,84 +32,99 @@ real-time kernel behavior. This package measures timer, signal, and hardware
|
||||
latency. It also tests the functioning of priority-inheritance mutexes.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%setup -q -n %{name}-%{version}
|
||||
%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
|
||||
%patch14 -p1
|
||||
|
||||
%build
|
||||
make NUMA=1 HAVE_PARSE_CPUSTRING_ALL=1
|
||||
%set_build_flags
|
||||
%make_build
|
||||
|
||||
%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
|
||||
rm -rf ${build_root}
|
||||
%make_install prefix=%{_prefix}
|
||||
|
||||
%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
|
||||
/usr/bin/ssdd
|
||||
/usr/bin/oslat
|
||||
/usr/bin/determine_maximum_mpps.sh
|
||||
/usr/bin/get_cpuinfo_mhz.sh
|
||||
/usr/bin/get_cyclictest_snapshot
|
||||
%{_bindir}/pi_stress
|
||||
%{_bindir}/signaltest
|
||||
%{_bindir}/hwlatdetect
|
||||
%{_bindir}/rt-migrate-test
|
||||
%{_bindir}/pip_stress
|
||||
%{_bindir}/ptsematest
|
||||
%{_bindir}/sigwaittest
|
||||
%{_bindir}/svsematest
|
||||
%{_bindir}/pmqtest
|
||||
%{_bindir}/hackbench
|
||||
%{_bindir}/cyclicdeadline
|
||||
%{_bindir}/deadline_test
|
||||
%{_bindir}/queuelat
|
||||
%{_bindir}/ssdd
|
||||
%{_bindir}/oslat
|
||||
%{_bindir}/determine_maximum_mpps.sh
|
||||
%{_bindir}/get_cyclictest_snapshot
|
||||
%{python3_sitelib}/get_cyclictest_snapshot.py*
|
||||
%{python3_sitelib}/__pycache__/get_cyclictest_snapshot*
|
||||
%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
|
||||
/usr/share/man/man8/cyclicdeadline.8.gz
|
||||
/usr/share/man/man8/ssdd.8.gz
|
||||
/usr/share/man/man8/oslat.8.gz
|
||||
/usr/share/man/man8/get_cyclictest_snapshot.8.gz
|
||||
%{_mandir}/man8/cyclictest.8.*
|
||||
%{_mandir}/man8/hackbench.8.*
|
||||
%{_mandir}/man8/hwlatdetect.8.*
|
||||
%{_mandir}/man8/pi_stress.8.*
|
||||
%{_mandir}/man8/pmqtest.8.*
|
||||
%{_mandir}/man8/ptsematest.8.*
|
||||
%{_mandir}/man8/rt-migrate-test.8.*
|
||||
%{_mandir}/man8/signaltest.8.*
|
||||
%{_mandir}/man8/sigwaittest.8.*
|
||||
%{_mandir}/man8/svsematest.8.*
|
||||
%{_mandir}/man8/pip_stress.8.*
|
||||
%{_mandir}/man8/queuelat.8.*
|
||||
%{_mandir}/man8/deadline_test.8.*
|
||||
%{_mandir}/man8/cyclicdeadline.8.*
|
||||
%{_mandir}/man8/ssdd.8.*
|
||||
%{_mandir}/man8/oslat.8.*
|
||||
%{_mandir}/man8/get_cyclictest_snapshot.8.*
|
||||
%{_mandir}/man8/determine_maximum_mpps.8.*
|
||||
|
||||
%changelog
|
||||
* Thu Aug 20 2020 John Kacur <jkacur@redhat.com> - 1.8.11
|
||||
* Fri Feb 19 2021 John Kacur <jkacur@redhat.com> - 1.10-3
|
||||
- parse_cpumask() is too strict for oslat, allow all possible cores
|
||||
Resolves: rhbz#1926578
|
||||
|
||||
* Thu Feb 18 2021 John Kacur <jkacur@redhat.com> - 1.10-2
|
||||
- print the version number in oslat everytime.
|
||||
- use cpuset size as upper bound in loop in oslat
|
||||
- allocate memory for cpu_set in oslat
|
||||
Resolves: rhbz#1926578
|
||||
|
||||
* Mon Jan 11 2021 John Kacur <jkacur@redhat.com> - 1.10-1
|
||||
- Upgrade to upstream rt-tests-1.10
|
||||
Resolves: rhbz#1890556
|
||||
|
||||
* Wed Dec 09 2020 John Kacur <jkacur@redhat.com> - 1.9-2
|
||||
- Don't compress manpages by default in the makefile
|
||||
- Add a menu to determine_maximum_mpps.sh
|
||||
- Add determine_maximum_mmps.8 manpage
|
||||
- Remove get_cpuinfo_mhz.sh and old Makefile in queuelat dir
|
||||
Resolves: rhbz#1906104
|
||||
|
||||
* Tue Nov 24 2020 John Kacur <jkacur@redhat.com> - 1.9-1
|
||||
- Update to upstream rt-tests-1.9
|
||||
- Add BuildRequires for gcc
|
||||
- use set_build_flags
|
||||
- use macros _bindir, _mandir and _prefix where possible
|
||||
- remove unnecessary clean section, simply build and install sections
|
||||
Resolves: rhbz#1894615
|
||||
|
||||
* Thu Aug 20 2020 John Kacur <jkacur@redhat.com> - 1.8-11
|
||||
- Add SPDX license to oslat, and reformat source code to match suite
|
||||
Resolves: rhbz#1870666
|
||||
|
||||
* Wed Aug 19 2020 John Kacur <jkacur@redhat.com> - 1.8.10
|
||||
* Wed Aug 19 2020 John Kacur <jkacur@redhat.com> - 1.8-10
|
||||
- Remove undated Obsoletes from the specfile
|
||||
Resolves: rhbz#1870212
|
||||
|
||||
@ -721,7 +728,7 @@ Sebastian Andrzej Siewior (1):
|
||||
* Tue Mar 16 2010 Clark Williams <williams@redhat.com> - 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)
|
||||
- Changed rpm %%description field to be more descriptive (BZ# 572323)
|
||||
- from Carsten Emde <c.emde@osadl.org>
|
||||
- added smp option to svsematest
|
||||
- fixed policy display in cyclictest
|
||||
|
Loading…
Reference in New Issue
Block a user