summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Saenz Julienne <nsaenzju@redhat.com>2021-07-07 10:48:49 +0200
committerJohn Kacur <jkacur@redhat.com>2021-07-09 14:06:55 -0400
commitf7f3bd7d076877b54c7c5b0af15cf9bc8ef0800f (patch)
treed904f110a5a67976eef1ec03571d7b5ffda24688
parente4984fbe3e9aa0b4d3103e969e58d8d4a315ffb4 (diff)
downloadrt-tests-f7f3bd7d076877b54c7c5b0af15cf9bc8ef0800f.tar.gz
oslat: Don't take trace_threshold into account during preheat
The point of preheat is to make sure CPUs are out of idle and running at max frequency by the time the real test starts. So it's expected to incur into extra latencies we don't really mean to measure. With this in mind, it doesn't make sense to take into account the trace threshold during that run. So don't do it. Note that this has been observed in practice. The threshold would be hit during preheat but not during the real test. Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: John Kacur <jkacur@redhat.com>
-rw-r--r--src/oslat/oslat.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/oslat/oslat.c b/src/oslat/oslat.c
index 1cba6fc..6ff5ba8 100644
--- a/src/oslat/oslat.c
+++ b/src/oslat/oslat.c
@@ -29,6 +29,7 @@
#include <numa.h>
#include <math.h>
#include <limits.h>
+#include <stdbool.h>
#include <sys/prctl.h>
#include <sys/stat.h>
@@ -150,6 +151,7 @@ struct thread {
struct global {
/* Configuration. */
unsigned int runtime_secs;
+ bool preheat;
/*
* Number of threads running for current test
* (either pre heat or real run)
@@ -299,7 +301,7 @@ static void insert_bucket(struct thread *t, stamp_t value)
us = index + 1;
assert(us > 0);
- if (g.trace_threshold && us >= g.trace_threshold) {
+ if (!g.preheat && g.trace_threshold && us >= g.trace_threshold) {
char *line = "%s: Trace threshold (%d us) triggered with %u us!\n"
"Stopping the test.\n";
tracemark(line, g.app_name, g.trace_threshold, us);
@@ -515,11 +517,12 @@ static void write_summary_json(FILE *f, void *data)
fprintf(f, " }\n");
}
-static void run_expt(struct thread *threads, int runtime_secs)
+static void run_expt(struct thread *threads, int runtime_secs, bool preheat)
{
int i;
g.runtime_secs = runtime_secs;
+ g.preheat = preheat;
g.n_threads_started = 0;
g.n_threads_running = 0;
g.n_threads_finished = 0;
@@ -846,14 +849,14 @@ int main(int argc, char *argv[])
g.n_threads = 1;
else
g.n_threads = g.n_threads_total;
- run_expt(threads, 1);
+ run_expt(threads, 1, true);
record_bias(threads);
if (!g.quiet)
printf("Test starts...\n");
/* Reset n_threads to always run on all the cores */
g.n_threads = g.n_threads_total;
- run_expt(threads, g.runtime);
+ run_expt(threads, g.runtime, false);
if (!g.quiet)
printf("Test completed.\n\n");