On Wed, 7 Jul 2021, Nicolas Saenz Julienne wrote: > 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@xxxxxxxxxx> > --- > src/oslat/oslat.c | 11 +++++++---- > 1 file 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"); > -- > 2.31.1 > > Signed-off-by: John Kacur <jkacur@xxxxxxxxxx>