From: Jens Axboe <axboe@kernel.dk>
To: Sitsofe Wheeler <sitsofe@gmail.com>
Cc: "fio@vger.kernel.org" <fio@vger.kernel.org>
Subject: Re: Exit all jobs on error
Date: Thu, 10 Dec 2015 11:15:04 -0700 [thread overview]
Message-ID: <20151210181504.GA21415@kernel.dk> (raw)
In-Reply-To: <CALjAwxjLXTCRe0Ky08DB6in2aq_czkx5Oz8Osi7Mo=+7eFH9PQ@mail.gmail.com>
On Thu, Dec 10 2015, Sitsofe Wheeler wrote:
> On 10 December 2015 at 17:11, Jens Axboe <axboe@kernel.dk> wrote:
> > On 12/10/2015 12:01 AM, Sitsofe Wheeler wrote:
> >>
> >> Hi,
> >>
> >> Is there an option to exit all jobs but only on error? If I have a job
> >> like this
> >>
> >> [global]
> >> stonewall=1
> >> verify=crc32
> >> rw=write
> >> [pass1]
> >> bs=4k
> >> [pass2]
> >> bs=8k
> >>
> >> I want fio to stop if pass1 fails verification and for pass2 not to be
> >> performed at all. I'm aware of "exitall" but using that will make fio
> >> quit even if pass1 is successful.
> >
> >
> > That doesn't exist, but we could add a exitall_on_error to have that
> > behavior. Should be pretty easy to add.
>
> That would work for me - that way it could be put in the global
> section or per (stonewall) group.
Something like the below should work. Apart from the 'adding the option'
sugar, it's a few lines of changes. If you could test, that'd be great.
diff --git a/HOWTO b/HOWTO
index eb9c8245d4e3..b21d27e3b15f 100644
--- a/HOWTO
+++ b/HOWTO
@@ -1227,6 +1227,9 @@ exitall When one job finishes, terminate the rest. The default is
to wait for each job to finish, sometimes that is not the
desired action.
+exitall_on_error When one job finishes in error, terminate the rest. The
+ default is to wait for each job to finish.
+
bwavgtime=int Average the calculated bandwidth over the given time. Value
is specified in milliseconds.
diff --git a/backend.c b/backend.c
index 425b0ee94c37..e37fffb7b183 100644
--- a/backend.c
+++ b/backend.c
@@ -974,7 +974,7 @@ reap:
if (!in_ramp_time(td) && should_check_rate(td)) {
if (check_min_rate(td, &comp_time)) {
- if (exitall_on_terminate)
+ if (exitall_on_terminate || td->o.exitall_error)
fio_terminate_threads(td->groupid);
td_verror(td, EIO, "check_min_rate");
break;
@@ -1662,7 +1662,7 @@ static void *thread_main(void *data)
if (o->exec_postrun)
exec_string(o, o->exec_postrun, (const char *)"postrun");
- if (exitall_on_terminate)
+ if (exitall_on_terminate || (o->exitall_error && td->error))
fio_terminate_threads(td->groupid);
err:
diff --git a/cconv.c b/cconv.c
index c0168c47d7dd..a476aad6376a 100644
--- a/cconv.c
+++ b/cconv.c
@@ -167,6 +167,7 @@ void convert_thread_options_to_cpu(struct thread_options *o,
o->fsync_on_close = le32_to_cpu(top->fsync_on_close);
o->bs_is_seq_rand = le32_to_cpu(top->bs_is_seq_rand);
o->random_distribution = le32_to_cpu(top->random_distribution);
+ o->exitall_error = le32_to_cpu(top->exitall_error);
o->zipf_theta.u.f = fio_uint64_to_double(le64_to_cpu(top->zipf_theta.u.i));
o->pareto_h.u.f = fio_uint64_to_double(le64_to_cpu(top->pareto_h.u.i));
o->gauss_dev.u.f = fio_uint64_to_double(le64_to_cpu(top->gauss_dev.u.i));
@@ -353,6 +354,7 @@ void convert_thread_options_to_net(struct thread_options_pack *top,
top->fsync_on_close = cpu_to_le32(o->fsync_on_close);
top->bs_is_seq_rand = cpu_to_le32(o->bs_is_seq_rand);
top->random_distribution = cpu_to_le32(o->random_distribution);
+ top->exitall_error = cpu_to_le32(o->exitall_error);
top->zipf_theta.u.i = __cpu_to_le64(fio_double_to_uint64(o->zipf_theta.u.f));
top->pareto_h.u.i = __cpu_to_le64(fio_double_to_uint64(o->pareto_h.u.f));
top->gauss_dev.u.i = __cpu_to_le64(fio_double_to_uint64(o->gauss_dev.u.f));
diff --git a/fio.1 b/fio.1
index eab20d779e35..4fe1be27c31c 100644
--- a/fio.1
+++ b/fio.1
@@ -1126,6 +1126,10 @@ Should be a multiple of 1MB. Default: 4MB.
.B exitall
Terminate all jobs when one finishes. Default: wait for each job to finish.
.TP
+.B exitall_on_error \fR=\fPbool
+Terminate all jobs if one job finishes in error. Default: wait for each job
+to finish.
+.TP
.BI bwavgtime \fR=\fPint
Average bandwidth calculations over the given time in milliseconds. Default:
500ms.
diff --git a/init.c b/init.c
index 0100da213a24..63ba32481b9b 100644
--- a/init.c
+++ b/init.c
@@ -47,6 +47,7 @@ static char **job_sections;
static int nr_job_sections;
int exitall_on_terminate = 0;
+int exitall_on_terminate_error = 0;
int output_format = FIO_OUTPUT_NORMAL;
int eta_print = FIO_ETA_AUTO;
int eta_new_line = 0;
diff --git a/options.c b/options.c
index 627029cd732c..46d5fb92ea98 100644
--- a/options.c
+++ b/options.c
@@ -3141,6 +3141,15 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
.group = FIO_OPT_G_PROCESS,
},
{
+ .name = "exitall_on_error",
+ .lname = "Exit-all on terminate in error",
+ .type = FIO_OPT_BOOL,
+ .off1 = td_var_offset(unlink),
+ .help = "Terminate all jobs when one exits in error",
+ .category = FIO_OPT_C_GENERAL,
+ .group = FIO_OPT_G_PROCESS,
+ },
+ {
.name = "stonewall",
.lname = "Wait for previous",
.alias = "wait_for_previous",
diff --git a/thread_options.h b/thread_options.h
index 02c867f31936..6ae0335698c1 100644
--- a/thread_options.h
+++ b/thread_options.h
@@ -131,6 +131,7 @@ struct thread_options {
unsigned int verify_only;
unsigned int random_distribution;
+ unsigned int exitall_error;
fio_fp64_t zipf_theta;
fio_fp64_t pareto_h;
@@ -376,7 +377,7 @@ struct thread_options_pack {
uint32_t bs_is_seq_rand;
uint32_t random_distribution;
- uint32_t pad;
+ uint32_t exitall_error;
fio_fp64_t zipf_theta;
fio_fp64_t pareto_h;
--
Jens Axboe
prev parent reply other threads:[~2015-12-10 18:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-10 7:01 Exit all jobs on error Sitsofe Wheeler
2015-12-10 17:11 ` Jens Axboe
2015-12-10 17:58 ` Sitsofe Wheeler
2015-12-10 18:11 ` Andrey Kuzmin
2015-12-10 18:15 ` Jens Axboe
2015-12-10 18:17 ` Andrey Kuzmin
2015-12-10 18:24 ` Jens Axboe
2015-12-10 18:27 ` Andrey Kuzmin
2015-12-10 18:29 ` Jens Axboe
2015-12-10 18:30 ` Andrey Kuzmin
2015-12-11 10:01 ` Andrey Kuzmin
2015-12-11 15:32 ` Jens Axboe
2015-12-11 19:59 ` Sitsofe Wheeler
2015-12-11 20:32 ` Andrey Kuzmin
2015-12-11 20:38 ` Jens Axboe
2015-12-10 18:15 ` Jens Axboe [this message]
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=20151210181504.GA21415@kernel.dk \
--to=axboe@kernel.dk \
--cc=fio@vger.kernel.org \
--cc=sitsofe@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox