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

Corinna Vinschen corinna-cygwin@cygwin.com
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."

See
http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_fallocate.html

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

-- 
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