Performance optimization in av::fixup - use buffered IO, not mapped file

Corinna Vinschen
Wed Dec 12 13:23:00 GMT 2012

On Dec 12 06:11, Eric Blake wrote:
> On 12/11/2012 08:13 PM, Daniel Colascione wrote:
> > Anyway, the binary is sparse because our linker produces sparse files.
> > 
> > Would the Cygwin developers accept this patch? With it, applications would need
> > to explicitly use ftruncate to make files sparse.
> Eww.  That would be a regression for coreutils, [...]

Really?  How so?

> > Considering the horrible and
> > unexpected performance implications of sparse files, I don't think generating
> > them automatically from a sequence of seeks and writes is the right thing to do.
> Why can't we instead use posix_fallocate() as a means of identifying a
> file that must not be sparse, and then just patch the compiler to use
> posix_fallocate() to never generate a sparse executable (but let all
> other sparse files continue to behave as normal)?

posix_fallocate is not allowed to generate sparse files, due to the
following restriction:

  "If posix_fallocate() returns successfully, subsequent writes to the
  specified file data shall not fail due to the lack of free space on
  the file system storage media."


Therefore only ftruncate and lseek potentially generate sparse files.

On second thought, I don't quite understand what you mean by "use
posix_fallocate() as a means of identifying a file that must not be
sparse".  Can you explain, please?


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

More information about the Cygwin-developers mailing list