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

Christopher Faylor
Wed Dec 12 19:41:00 GMT 2012

On Wed, Dec 12, 2012 at 08:35:56PM +0100, Corinna Vinschen wrote:
>On Dec 12 14:19, Christopher Faylor wrote:
>> On Wed, Dec 12, 2012 at 06:27:33PM +0100, Corinna Vinschen wrote:
>> >On Dec 12 18:15, Corinna Vinschen wrote:
>> >> On Dec 12 12:11, Christopher Faylor wrote:
>> >> > On Wed, Dec 12, 2012 at 12:06:08PM -0500, Ryan Johnson wrote:
>> >> > >It's painfully reproducible. It takes nearly two hours for a gcc 
>> >> > >bootstrap compiler to configure the various bits of the next stage. It's 
>> >> > >the same for emacs unexec (as OP reported).
>> >> > 
>> >> > I'd like to see a small controlled test case which demonstrates the
>> >> > problem.  If the claims here are all true then it should be very easy to
>> >> > demonstrate without resorting to bootstrapping the compiler.
>> >> > 
>> >> > And, given my comment about setup.exe, I suspect that this isn't going
>> >> > to be as alarming an issue for the normal Cygwin user as it is for
>> >> > people who, e.g., rebuild their own compilers.
>> >> 
>> >> Which would speak for adding a "nosparse" mount option.
>> >
>> >...or not.  The problem is not to add the mount option, but to make sure
>> >people know that option and use it when "cygwin is slow".  This rather
>> >speaks for making nosparse the default and "sparse" the option, I guess.
>> Actually, if the assertions here are correct then wouldn't mounting /bin
>> as "cygexec" also make things better?
>No.  /bin isn't the problem.  Running self-built executables is.  If you
>have a build system which runs self-built executables as part of the
>build process (xgcc), you'd end up with a very slow build, apparently.

The operative part of the above wasn't "/bin", it was mounting with the
"cygexec" option.  That should bypass the mmap in av::fixup.  I was
under the impression that was what screwed things up since it somehow
flushed the cache.


More information about the Cygwin-developers mailing list