Performance optimization in av::fixup - use buffered IO, not mapped file
Ryan Johnson
ryan.johnson@cs.utoronto.ca
Tue Dec 11 01:36:00 GMT 2012
On 10/12/2012 7:58 PM, Daniel Colascione wrote:
> Emacs "make bootstrap" runs Emacs as a compiler, generating .elc files from .el
> files. The build system runs Emacs once for each .el file we compile, of which
> there are thousands. Now, Emacs takes about a two seconds to start on my system,
> so compiling thousands of files takes a while; the actual .el to .elc
> compilation is nearly instantaneous.
>
> According to xperf, Emacs spends most of its startup time re-reading emacs.exe
> code pages from disk.
<snip>
> We shouldn't need to read this file more than once. After the first run, the
> system should be able to read emacs.exe from the standby list, not the disk.
GCC bootstrap has *exactly* the same problem! Loading the binary from
./xgcc for each line of all those configure scripts takes longer than
everything else put together; I could never figure out what was wrong,
since the stage1 and stage2 binaries are "only" about 90MB, and
stripping (down to 25MB) didn't help at all.
I never reported it because I figured there was no way cygwin could make
Windows decide what files to cache or not cache... but it would
definitely be nice to see the problem go away.
> Now, if we run emacs.exe from cmd, not bash, that's exactly what happens:
<snip>
> I came up with a simple test case that reproduces in cmd the behavior I see when
> I run Emacs from bash. I've reproduced the program below. Here, I've compiled
> a.exe with -DSLOW:
I tried to test on my machine (w7 x64), but I can't get it to compile
(GetFileSizeEx not found at link time):
i686-pc-mingw32-gcc emacs-slow.c -DSLOW -lkernel32
I realize I'm probably just a windows compilation noob, but what command
did you use when compiling?
Ryan
More information about the Cygwin-developers
mailing list