This is the mail archive of the cygwin-developers mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


On 12/12/2012 12:11 PM, 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.

# fast: ~60ms cp --sparse=never $(which emacs-nox) foo for i in $(seq 10); do time ./foo -Q --batch --eval '(kill-emacs)'; done

# slow: ~800ms
cp --sparse=always $(which emacs-nox) foo
for i in $(seq 10); do time ./foo -Q --batch --eval '(kill-emacs)'; done

# even slower: ~3.5s (size on disk doubled)
cp --sparse=never $(which emacs-nox) foo
for i in $(seq 10); do time ./foo -Q --batch --eval '(kill-emacs)'; done

# fast again: ~60ms
rm foo
cp --sparse=never $(which emacs-nox) foo
for i in $(seq 10); do time ./foo -Q --batch --eval '(kill-emacs)'; done

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.  I'll bet setup.exe
doesn't know anything about sparse files so all of the executables
and dll should not be sparse.
Can anyone confirm or deny that?
Confirmed. The sparse flag is lost during normal copies because cygwin has to ask for it specifically during an lseek or ftruncate past end. Clobbering an existing file does not clear the flag, however.

Further, gcc doesn't seem to produce executables with holes in them, it just writes some of the sections out of order. So even if you did make setup.exe sparse file aware, it still shouldn't matter except for files like emacs that do horrible things to themselves (cue post-install script).

Ryan


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]