Flexible I/O Tester development
 help / color / mirror / Atom feed
From: Avi Kivity <avi@scylladb.com>
To: Jens Axboe <axboe@kernel.dk>, fio@vger.kernel.org
Subject: Re: RFE: Graphing and iteration support for fio
Date: Thu, 3 Dec 2015 19:19:08 +0200	[thread overview]
Message-ID: <5660798C.8000900@scylladb.com> (raw)
In-Reply-To: <56607574.6050602@kernel.dk>



On 12/03/2015 07:01 PM, Jens Axboe wrote:
> On 12/01/2015 04:04 AM, Avi Kivity wrote:
>> Sometimes you want to run a set of experiments on a disk, varying a
>> parameter between tests (in my case, iodepth, but buffer size is also a
>> good candidate).  You then want to present the results in a nice graph.
>>
>> I wrote a small wrapper around fio to do this
>> (https://github.com/avikivity/diskplorer), but it occurs to me that
>> generalized support for both in fio would be much more useful.
>>
>> Possibly, you'd define a job as a template:
>>
>> [aio-read]
>> template_start=1
>> template_end=100
>> template_step=1
>> (or template_ratio=1.05 for exponential growth)
>> iodepth=template_variable
>>
>> (it's just possible that someone can come up with better syntax).
>>
>> A few more options in the global section can then cause a graph to be
>> generated.
>
> It'd be great to integrate this into fio, as graphing results is 
> something that most people want to do. Any chance you would be willing 
> to try and hash that out?

I'd love to say yes, but no.

>
>> btw, a fast disk can easily saturate a single core using libaio, so a
>> multithreaded libaio ioengine would be welcome (I am currently emulating
>> it using multiple jobs and new_group).
>
> In the context of fio, that doesn't make a lot of sense. A job in fio 
> is, by definition, either a thread or a process that does IO. So if 
> you want more threads banging on a device, then you'd add more jobs. 
> If multiple threads shared on aio context, then we'd also potentially 
> see contention on that part. If you just use more jobs, then each gets 
> an aio context as well.
>

If your jobs are generated via a template, as above, then this is hard 
to do.  For iodepth=1 you want one job with iodepth=1.  For iodepth=64 
you want 8 jobs (one per core) each with an iodepth=8; otherwise a fast 
SSD will overwhelm a single core.

Perhaps the job specification can be modified so that it auto-generates 
subjobs.  In the specification, there is one entry, but fio sees 8 (or 
1, when the template sets iodepth=1), and reports them via a group.

[aio-read]
template_start=1
template_end=100
template_step=1
(or template_ratio=1.05 for exponential growth)
subjobs=(min(template_variable, core_count))
iodepth=(template_variable / subjobs)

(the above doesn't cope will with an iodepth that doesn't divide into 
your core_count; displorer will generate subjobs with different iodepth 
for this)




  reply	other threads:[~2015-12-03 17:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-01 11:04 RFE: Graphing and iteration support for fio Avi Kivity
2015-12-03 17:01 ` Jens Axboe
2015-12-03 17:19   ` Avi Kivity [this message]
2015-12-03 17:26     ` Jens Axboe
2015-12-03 17:31       ` Avi Kivity
2015-12-03 18:00         ` Avi Kivity

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=5660798C.8000900@scylladb.com \
    --to=avi@scylladb.com \
    --cc=axboe@kernel.dk \
    --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