RE: Overlapped IO with error 0x800705AD
- From: Marc Mirti Mancinelli <MarcMirtiMancinelli@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Sun, 28 Jan 2007 23:20:00 -0800
Partial response to my problem:
Error 0x800705AD would be generated when there is too pending IO requests in
queue. OVERLAPPED struct should be filled with an event for
GetOverlappedResult synchro when more than one thread can access to the file
handle (sorry, it is written in ms doc, but not clearly).
But it not explains the others questions, and poor performances.
Purpose of my test program is to find a way to speed random access IO
operations for a file format like ms storage(.doc) with a granularity lower
than os filesystem to store a lot of little objects (files size often >=
10GB).
And my actual best results (on IDE disk benchs), is with a single thread
with windows buffering and without asynchronous IO.
Does any one has an idea?
I have tried
- asynchronous IO, benchs are worth than with synchronous IO (sata and ide).
- thread pool in asynchronous mode, i don't try more than one request
pending by thread, benchs are worth than with a single thread in synchronous
mode (ide).
- thread pool in synchronous mode, with seek on handle shared by multiple
thread, not solved by duplicating handle for each thread, overlapped struct
according to the ms doc can be used for synchronous ops, but have the same pb
than seek. And after all, with or whitout seek pb, benchs are worth than with
a single thread (ide).
- all previous tests with no windows buffering, benchs are worth too.
"marc mm" wrote:
I have written a program (in c++) to test IO operations and their perf to.
optimize a storage file format.
Prg behaviour: 2 threads do random read and write of 4Kbytes data at offset
multiple of 4Kb on same file (20GBytes).
- When the test prg use overlapped IO(CreateFile with FILE_FLAG_OVERLAPPED),
after a random time, the 2 threads are blocked on GetOverlappedResult,
sometimes after 1-5 minutes, they continue, and other times, they stop with
error 0x800705AD (Insufficient quota space).
- When I use an event for OVERLAPPED struct, It seems that I haven't the
problem, but performances are very smaller than without.
- When I use in CreateFile flags, FILE_FLAG_NO_BUFFERING, same case than
with event set, performances are very smaller. Performances are poor with
this flag in synchronous mode too...
- Frequently ReadFile and WriteFile in overlapped mode, return true (op
done), but with a data length performed at 0. I handled this case, by
retrying call to GetOverlappedResult, to wait a valid data length... (and it
works or it seems to work, problem doesn't appear after this case).
So I don't understand ;) :
- why I have error 0x800705AD in overlapped mode ? Error occurs only when 2
threads at least do overlapped IO at same time, no problem with 1 thread.
With more than 2 threads, problem appears more quickly.
- why during overlapped IO, threads are blocked randomly for a so long time
? (after sometimes 30% or 90%, ... test completed)
- why FILE_FLAG_NO_BUFFERING doesnt speed IO with 4Kbytes blocks read or
written at offset multiple of 4K on a disk with 512 bytes sectors, and 4Kb
clusters?
- and why sometimes, ReadFile and WriteFile can return true, with no data
read or written.
My actual tests are donne on vista 64, c++ 64bits(vc8), on an IDE disk. But
I have the same problem(error 0x800705AD) on an XP 32bits computer with a
sata disk (for perfs on this computer I must retry).
Thanks by advance for help, and sorry for my poor english.
- Prev by Date: Re: how can i disble irq15 through C/assembly programming.
- Next by Date: Re: Generate NT Events
- Previous by thread: Safely removing hardware
- Next by thread: Re: Overlapped IO with error 0x800705AD
- Index(es):
Loading