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: Wed, 15 Aug 2012 13:31:51 +0200 [thread overview]
Message-ID: <201208151331.51420.Martin@lichtvoll.de> (raw)
In-Reply-To: <CAHaS=QyLn0Dy9pzv_gPUVC8r9pDCi39FemAz0qkROVKDei3Lnw@mail.gmail.com>
Am Mittwoch, 15. August 2012 schrieb Greg Sullivan:
> On 15/08/2012, Martin Steigerwald <Martin@lichtvoll.de> wrote:
> > Am Mittwoch, 15. August 2012 schrieb Greg Sullivan:
> >> On 15 August 2012 07:24, 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/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
> >
> > [�]
> >
> >> > [� 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
> >
> > [�]
> >
> >> > 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,
> >>
> >> Thanks - that runs, but it's still queuing. As I said before, I
> >> can't use the sync engine - I receive an error. Is there a
> >> synchronous engine available for Windows? Perhaps that's the only
> >> problem. Can you check to see whether your system is queuing at the
> >> file system/device level when you run that test?
> >>
> >> I had attempted to put the files in a single job earlier - I think
> >> it may have been successfully accessing both files, but I didn't
> >> notice it in the output. I'm a raw beginner.
> >
> > Did you try with
> >
> > ioengine=windowsaio
> >
> > +
> >
> > iodepth=1 (should be default however I think)
> >
> >
> > Otherwise I have no idea. I never used fio on Windows so far.
> >
> > It might help when you try to explain exactly which problem you want
> > to solve by the fio measurements. Multimedia streaming. Is it to
> > slow? What is
> >
> > it why you want to do these measurements?
>
> They are both defaults, and the output shows that both are being used.
> If you could tell me whether your system is generating queuing it
> would help, because if yours queues even when using the sync io
> engine, it means I'm wasting my time and fio simply needs to be
> augmented to support strict single threaded operation over multiple
> files.
>
> I am wanting to determine whether the application in question is
> extracting a reasonable number of real time streams from any given
> storage system.
Just for the record since you got it working on Windows as well � it works for me:
merkaba:/tmp> cat severalfiles.job
[global]
size=1G
nrfiles=100
[read]
rw=read
merkaba:/tmp> fio severalfiles.job
read: (g=0): rw=read, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
2.0.8
Starting 1 process
read: (groupid=0, jobs=1): err= 0: pid=4579
read : io=1023.9MB, bw=2409.7MB/s, iops=616705 , runt= 425msec
clat (usec): min=0 , max=54 , avg= 1.08, stdev= 0.64
lat (usec): min=0 , max=54 , avg= 1.13, stdev= 0.66
clat percentiles (usec):
| 1.00th=[ 0], 5.00th=[ 1], 10.00th=[ 1], 20.00th=[ 1],
| 30.00th=[ 1], 40.00th=[ 1], 50.00th=[ 1], 60.00th=[ 1],
| 70.00th=[ 1], 80.00th=[ 1], 90.00th=[ 1], 95.00th=[ 2],
| 99.00th=[ 2], 99.50th=[ 2], 99.90th=[ 14], 99.95th=[ 16],
| 99.99th=[ 23]
lat (usec) : 2=92.14%, 4=7.74%, 10=0.01%, 20=0.10%, 50=0.01%
lat (usec) : 100=0.01%
cpu : usr=22.41%, sys=76.42%, ctx=421, majf=0, minf=36
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=262100/w=0/d=0, short=r=0/w=0/d=0
Run status group 0 (all jobs):
READ: io=1023.9MB, aggrb=2409.7MB/s, minb=2409.7MB/s, maxb=2409.7MB/s, mint=425msec, maxt=425msec
(if you wonder about the figures � thats RAM testing � Linux tmpfs ;)
100% at IO depth 1.
Ciao,
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7
next prev parent reply other threads:[~2012-08-15 11:31 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
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 [this message]
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=201208151331.51420.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 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.