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