At 02:22 PM 3/14/2007 +0100, Eric Huelsmann wrote:
>Jonathan,
>
>Any progress on the matter? I'd love to be able to close the issue in
>Subversion by pointing to the right APR version!
My feeling at the moment is that the patch is ready to be applied, but Bill
Rowe does not agree. I did some performance tests to see just what the
effect of buffering would be, and when run on UNIX systems, I saw the
expected ~4% degradation when splitting up large writes into 30 KB blocks.
When run on Windows, however, I saw a massive performance *increase*, a
factor of more than 3. So, a patch which unconditionally breaks writes up
into 30 KB blocks would apparently be beneficial for Windows in all cases.
There are currently two patches out there that I've submitted; one of them
modifies the Win32 apr_file_write directly so that all writes are split,
and the other one uses APR's built-in buffering on all console-related
handles (and console handles only). Either one would fix the problem of
large writes to consoles, but some people seem to think it would be better
to always try the large write and then switch to buffered output if the
write attempt fails with the "Insufficient buffer space" error. I think in
principle this makes sense, but in practice it doesn't since there is
actually a performance penalty on the platform for doing large writes in
single calls to WriteFile.
Anyway, I spoke with Bill Rowe about it a few days ago, and we agreed only
that more performance testing is necessary, to see whether perhaps there is
a way to make single large writes perform better than chunked writes as one
would expect (they do on UNIX platforms), and to confirm that the
performance characteristics are not inverted when writing to handles other
than files.
Jonathan Gilbert