From: Luis Chamberlain <mcgrof@kernel.org>
To: raymond.barbiero.dev@gmail.com
Cc: fstests@vger.kernel.org, jack@suse.cz,
mgorman@techsingularity.net, dave@stgolabs.net,
Luis Chamberlain <mcgrof@kernel.org>
Subject: [PATCH 2/4] Defer reporting of execution times
Date: Wed, 9 Feb 2022 14:18:47 -0800 [thread overview]
Message-ID: <20220209221849.434616-3-mcgrof@kernel.org> (raw)
In-Reply-To: <20220209221849.434616-1-mcgrof@kernel.org>
From: Mel Gorman <mgorman@techsingularity.net>
If loadfiles are completed rapidly, there is a large amount of data
sent to stddout and then recorded which generates IO in itself. This
patch buffers durations and runtimes for a time. In some cases, it'll
be buffered until the end of the benchmark.
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
child.c | 38 ++++++++++++++++++++++++++++++++++----
1 file changed, 34 insertions(+), 4 deletions(-)
diff --git a/child.c b/child.c
index e4ae230..828295d 100644
--- a/child.c
+++ b/child.c
@@ -309,9 +309,19 @@ finished:
return 0;
}
+void dump_samples(int id, unsigned int *duration, unsigned int *runtime, unsigned int nr_samples)
+{
+ unsigned int i;
+
+ for (i = 0; i < nr_samples; i++) {
+ printf("%4d completed in %u ms at time %u ms\n", id,
+ duration[i], runtime[i]);
+ }
+}
/* run a test that simulates an approximate netbench client load */
#define MAX_PARM_LEN 1024
+#define MAX_SAMPLES 130672
void child_run(struct child_struct *child0, const char *loadfile)
{
int i;
@@ -326,7 +336,16 @@ void child_run(struct child_struct *child0, const char *loadfile)
int have_random = 0;
unsigned loop_count = 0;
z_off_t loop_start = 0;
- struct timeval start;
+ struct timeval start, begin;
+ unsigned nr_samples = 0;
+
+ unsigned int *sample_duration = malloc(sizeof(unsigned int) * (MAX_SAMPLES + 1));
+ unsigned int *sample_runtime = malloc(sizeof(unsigned int) * (MAX_SAMPLES + 1));
+
+ if (!sample_duration || !sample_runtime) {
+ printf("ENOMEM for samples\n");
+ exit(1);
+ }
gzf = gzopen(loadfile, "r");
if (gzf == NULL) {
@@ -345,6 +364,8 @@ void child_run(struct child_struct *child0, const char *loadfile)
memset(sparams[i], 0, MAX_PARM_LEN);
}
+ gettimeofday(&begin, NULL);
+
again:
for (child=child0;child<child0+options.clients_per_process;child++) {
nb_time_reset(child);
@@ -534,16 +555,23 @@ loop_again:
if (options.show_execute_time) {
struct timeval end;
- unsigned int duration;
+ unsigned int duration, runtime;
gettimeofday(&end, NULL);
duration = (end.tv_sec - start.tv_sec) * 1000 +
(end.tv_usec - start.tv_usec) / 1000;
+ runtime = (end.tv_sec - begin.tv_sec) * 1000 +
+ (end.tv_usec - begin.tv_usec) / 1000;
if (options.machine_readable)
printf("@E@%d@%u\n", child0->id, duration);
else {
- printf("%4d completed in %u ms\n", child0->id,
- duration);
+ sample_duration[nr_samples] = duration;
+ sample_runtime[nr_samples] = runtime;
+ nr_samples++;
+ if (nr_samples == MAX_SAMPLES) {
+ dump_samples(child0->id, sample_duration, sample_runtime, nr_samples);
+ nr_samples = 0;
+ }
}
}
@@ -556,6 +584,8 @@ loop_again:
done:
gzclose(gzf);
+ usleep(child0->id * 5000);
+ dump_samples(child0->id, sample_duration, sample_runtime, nr_samples);
for (child=child0;child<child0+options.clients_per_process;child++) {
child->cleanup = 1;
fflush(stdout);
--
2.34.1
next prev parent reply other threads:[~2022-02-09 22:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-09 22:18 [PATCH 0/4] dbench: few enhancements from mmtests Luis Chamberlain
2022-02-09 22:18 ` [PATCH 1/4] Allow reporting of workload execution times Luis Chamberlain
2022-02-09 22:18 ` Luis Chamberlain [this message]
2022-02-09 22:18 ` [PATCH 3/4] libnfs: Include stdint.h Luis Chamberlain
2022-02-09 22:18 ` [PATCH 4/4] Check if parent is alive once per loadfile processed Luis Chamberlain
2022-02-10 9:44 ` [PATCH 0/4] dbench: few enhancements from mmtests Jan Kara
2022-02-10 10:16 ` Mel Gorman
2022-02-10 13:04 ` Davidlohr Bueso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220209221849.434616-3-mcgrof@kernel.org \
--to=mcgrof@kernel.org \
--cc=dave@stgolabs.net \
--cc=fstests@vger.kernel.org \
--cc=jack@suse.cz \
--cc=mgorman@techsingularity.net \
--cc=raymond.barbiero.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.