Flexible I/O Tester development
 help / color / mirror / Atom feed
From: Martin Steigerwald <Martin@lichtvoll.de>
To: Greg Sullivan <greg.sullivan@sullivang.net>
Cc: fio@vger.kernel.org
Subject: Re: How to do strict synchronous i/o on Windows?
Date: Tue, 14 Aug 2012 23:24:48 +0200	[thread overview]
Message-ID: <201208142324.48504.Martin@lichtvoll.de> (raw)
In-Reply-To: <CAHaS=QzFqSB_eo1fWCw4ddQjFfuhuuQaiU2VsV-7XSzSkCfp8A@mail.gmail.com>

Am Dienstag, 14. August 2012 schrieb Greg Sullivan:
> On 15/08/2012, Martin Steigerwald <Martin@lichtvoll.de> wrote:
> > Am Dienstag, 14. August 2012 schrieb Greg Sullivan:
> >> On 15/08/2012, Martin Steigerwald <Martin@lichtvoll.de> wrote:
> >> > Am Dienstag, 14. August 2012 schrieb Greg Sullivan:
> >> >> On 15 August 2012 03:36, Martin Steigerwald <Martin@lichtvoll.de>
> >> >> wrote:
> >> >> > Hi Greg,
> >> > [�]
> >> >> > Am Dienstag, 14. August 2012 schrieb Greg Sullivan:
> >> >> >
> >> >> >> On Aug 14, 2012 11:06 PM, "Jens Axboe" <axboe@kernel.dk> wrote:
> >> >> >> >
> >> >> >> > On 08/14/2012 08:24 AM, Greg Sullivan wrote:
[�]
> >> >> Is it possible to read from more than file in a single job, in a
> >> >> round-robin fashion? I tried putting more than one file in a single
> >> >> job, but it only opened one file. If you mean to just do random reads
> >> >> in a single file - I've tried that, and the throughput is
> >> >> unrealistically low. I suspect it's because the read-ahead buffer
> >> >> cannot be effective for random accesses.  Of course, reading
> >> >> sequentially from a single file will result in a throughput that is
> >> >> far too high to simulate the application.
> >> >
> >> > Have you tried
> >> >
> >> >        nrfiles=int
> >> >               Number of files to use for this job.  Default: 1.
> >> >
> >> >        openfiles=int
> >> >               Number of files to keep open at the same time.  Default:
> >> >               nrfiles.
> >> >
> >> >        file_service_type=str
> > [�]
> >> > ? (see fio manpage).
> >> >
> >> > It seems to me that all you need is nrfiles. I�d bet that fio
> >> > distributes
> >> > the I/O size given among those files, but AFAIR there is something
> >> > about
> >> > that in fio documentation as well.
> >> >
> >> > Use the doc! ;)
> > [�]
> >> Yes, I have tried all that, and it works, except that it causes disk
> >> queuing, as I stated in my first post. I thought you meant to put all
> >> the files into a single [job name] section of the ini file, to enforce
> >> single threaded io.
> >
> > With just one job running at once?
> >
> > Can you post an example job file?
> >
> > Did you try the sync=1 / direct=1 suggestion from Bruce Chan?
> >
> > I only know the behaviour of fio on Linux where I/O depth of greater
> > than one is only possible with libaio and direct=1. The manpage hints
> > at I/O depth is one for all synchronous I/O engines, so I�d bet that
> > refers to Windows as well.
> >
> > Other than that I have no idea.
[�]
> One INI file, but a seperate [job name] section for each file, yes.
> According to Jens, because each [job name] is a seperate thread, and
> iodepth acts at the thread level, there will still be queuing at the
> device level. If there were a way to do what I want I think Jens would
> have told me, unfortunately.   ;)
> 
> direct io does at least allow me to do cache-less reads though - thankyou.

My suggestion is to use one job with several files.

martin@merkaba:/tmp> cat severalfiles.job 
[global]
size=1G
nrfiles=100

[read]
rw=read

[write]
stonewall
rw=write

(now these are two jobs, but stonewall lets the write job run after the
read one with cache invalidation if not disabled and if supported by OS)

martin@merkaba:/tmp> fio severalfiles.job
read: (g=0): rw=read, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
write: (g=1): rw=write, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
2.0.8
Starting 2 processes
read: Laying out IO file(s) (100 file(s) / 1023MB)
write: Laying out IO file(s) (100 file(s) / 1023MB)
Jobs: 1 (f=100)
read: (groupid=0, jobs=1): err= 0: pid=23377
[� lots of fast due to /tmp being a RAM-based filesystem � tmpfs �]


martin@merkaba:/tmp> ls -lh read.1.* | head
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.0
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.1
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.10
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.11
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.12
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.13
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.14
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.15
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.16
-rw-r--r-- 1 martin martin 11M Aug 14 23:15 read.1.17
[� only first ten displayed �]

martin@merkaba:/tmp> find -name "read.1*" 2>/dev/null | wc -l
100

100 files a 11M, due to rounding issues that may nicely add up to
the one GiB.

Raw sizes are:

martin@merkaba:/tmp> ls -l read.1.* | head                  
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.0
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.1
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.10
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.11
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.12
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.13
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.14
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.15
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.16
-rw-r--r-- 1 martin martin 10737418 Aug 14 23:20 read.1.17

Note: When I used filename, fio just created one files regardless of the
nrfiles setting. I would have expected it to use the filename as a prefix.
There might be some way to have it do that.

Ciao,
-- 
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

  reply	other threads:[~2012-08-14 21:24 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-14  6:24 How to do strict synchronous i/o on Windows? Greg Sullivan
2012-08-14  7:58 ` Greg Sullivan
2012-08-14 13:05 ` Jens Axboe
2012-08-14 13:10   ` Greg Sullivan
2012-08-14 13:19   ` Greg Sullivan
2012-08-14 13:33     ` Greg Sullivan
2012-08-14 17:36     ` Martin Steigerwald
2012-08-14 18:54       ` Greg Sullivan
2012-08-14 19:16         ` Martin Steigerwald
2012-08-14 19:56           ` Greg Sullivan
2012-08-14 20:32             ` Martin Steigerwald
2012-08-14 20:47               ` Greg Sullivan
2012-08-14 21:24                 ` Martin Steigerwald [this message]
2012-08-15  2:46                   ` Greg Sullivan
2012-08-15  7:27                     ` Martin Steigerwald
2012-08-15  7:45                       ` Greg Sullivan
2012-08-15 11:31                         ` Martin Steigerwald
2012-08-15 14:07                           ` Greg Sullivan
2012-08-15  7:52                     ` Bruce Cran
2012-08-15  7:58                       ` Greg Sullivan
2012-08-15  9:19                         ` Greg Sullivan

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=201208142324.48504.Martin@lichtvoll.de \
    --to=martin@lichtvoll.de \
    --cc=fio@vger.kernel.org \
    --cc=greg.sullivan@sullivang.net \
    /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