Flexible I/O Tester development
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Carl Zwanzig <cpz@coraid.com>
Cc: "fio@vger.kernel.org" <fio@vger.kernel.org>
Subject: Re: Mixing command line and job file parameters
Date: Mon, 07 Apr 2014 14:51:00 -0600	[thread overview]
Message-ID: <53430FB4.1090904@kernel.dk> (raw)
In-Reply-To: <53430A03.2040503@kernel.dk>

On 04/07/2014 02:26 PM, Jens Axboe wrote:
> On 04/07/2014 02:24 PM, Carl Zwanzig wrote:
>> Hi,
>>
>> (Jens- Thanks for the speedy work on this.)
>>
>> I just pulled from git and built (fio-2.1.7-29-gbc4f5).
>>
>> The patch will supply the parameter if it was missing from the config:
>>
>> works:
>> ./fio --runtime=10 derf.cfg  (derf.cfg has "time_based" but no "runtime")
>>
>> will throws "no runtime" error:
>> ./fio derf.cfg
>>
>> but will not replace an existing parameter as would happen if it's
>> twice in the cfg file.  Also tried forcing global "./fio --name=global
>> --runtime=10 derf.cfg", but no luck, either.
>>
>> I'll try poking around the area of the changes. (I have 7-8 parameters
>> that I want to individually override, and using env vars has gotten
>> ugly and needs a helper script.)
>
> Yep, it wont replace an existing parameter. It will basically work like
> the option appears before any of the others in the global section,
> similar to if you have:
>
> timeout=10s
> foo=1
> bar=89
> timeout=20s
>
> the last timeout= will override the first one. To make that work would
> be more involved, I'm afraid.

So the way to make this would... Right now, the options associated with 
each thread/process looks like this:

struct thread_options {
	char *string_option;
	unsigned int uint_option;
	[...]
};

and so forth. We could change that to be more ala:

typedef struct fio_char_opt {
         char *option;
         bool was_set;
};

typedef struct fio_uint_opt {
         unsigned int option;
         bool was_set;
};

and so forth. When we parse an option, we'd set the ->was_set flag to 
true. I have been thinking about doing this before, since there are a 
few option hacks in fio where we deliberately add an option callback 
just to know if an option was set or not. This is done for options where 
checking for 0 isn't the valid check for "was set or not", and it'd be 
nice to get rid of those. Both because it would make the code cleaner, 
but also because the callback variants make life harder for the 
client/server job parsing.

With this infrastructure in place, it'd be easy enough to track and 
support overloading of options like the command line and job file mix.

-- 
Jens Axboe



  reply	other threads:[~2014-04-07 20:51 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-04 20:06 Mixing command line and job file parameters Carl Zwanzig
2014-04-05  3:24 ` Jens Axboe
2014-04-05  4:07   ` Jens Axboe
2014-04-06 16:15     ` Jens Axboe
2014-04-07 20:24       ` Carl Zwanzig
2014-04-07 20:26         ` Jens Axboe
2014-04-07 20:51           ` Jens Axboe [this message]
2015-05-29 20:32             ` Alireza Haghdoost

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=53430FB4.1090904@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=cpz@coraid.com \
    --cc=fio@vger.kernel.org \
    /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