* Emacs 23.0 is much slower starting than Emacs 22.3 @ 2008-10-22 9:11 Alan Mackenzie 2008-10-22 13:23 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 54+ messages in thread From: Alan Mackenzie @ 2008-10-22 9:11 UTC (permalink / raw) To: emacs-devel Hi, Emacs, I have an extremely medium speed processor (Athlon 1.2 GHz) and, at the moment, a well-padded .emacs.desktop. Starting Emacs 22.3 takes 23 seconds. Starting Emacs 23.0 takes 38 seconds. Emacs 23 thus starts up at about three fifths the speed of 22. This is very noticeable, and not a good thing. I haven't tried to tie down why this is. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 9:11 Emacs 23.0 is much slower starting than Emacs 22.3 Alan Mackenzie @ 2008-10-22 13:23 ` Stefan Monnier 2008-10-22 13:55 ` John covici 2008-10-22 15:14 ` Alan Mackenzie 2008-10-22 18:26 ` Eli Zaretskii 2008-10-22 21:02 ` Richard M. Stallman 2 siblings, 2 replies; 54+ messages in thread From: Stefan Monnier @ 2008-10-22 13:23 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel > I have an extremely medium speed processor (Athlon 1.2 GHz) and, at the > moment, a well-padded .emacs.desktop. > Starting Emacs 22.3 takes 23 seconds. > Starting Emacs 23.0 takes 38 seconds. > Emacs 23 thus starts up at about three fifths the speed of 22. This is > very noticeable, and not a good thing. > I haven't tried to tie down why this is. Could it be due to the extra font-selection efforts? You could compare the GUI vs text modes, to get a first impression of where the time difference goes. Stefan ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 13:23 ` Stefan Monnier @ 2008-10-22 13:55 ` John covici 2008-10-22 15:14 ` Alan Mackenzie 1 sibling, 0 replies; 54+ messages in thread From: John covici @ 2008-10-22 13:55 UTC (permalink / raw) To: Stefan Monnier; +Cc: Alan Mackenzie, emacs-devel I have noticed this as well using text mode. It seems particularly slow loading my desktop (106 buffers). Also, sending mail is slower -- looks like lisp processing is just slower. on Wednesday 10/22/2008 Stefan Monnier(monnier@iro.umontreal.ca) wrote > > I have an extremely medium speed processor (Athlon 1.2 GHz) and, at the > > moment, a well-padded .emacs.desktop. > > > Starting Emacs 22.3 takes 23 seconds. > > Starting Emacs 23.0 takes 38 seconds. > > > Emacs 23 thus starts up at about three fifths the speed of 22. This is > > very noticeable, and not a good thing. > > > I haven't tried to tie down why this is. > > Could it be due to the extra font-selection efforts? > You could compare the GUI vs text modes, to get a first > impression of where the time difference goes. > > > Stefan > -- Your life is like a penny. You're going to lose it. The question is: How do you spend it? John Covici covici@ccs.covici.com ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 13:23 ` Stefan Monnier 2008-10-22 13:55 ` John covici @ 2008-10-22 15:14 ` Alan Mackenzie 2008-10-22 16:46 ` David De La Harpe Golden 1 sibling, 1 reply; 54+ messages in thread From: Alan Mackenzie @ 2008-10-22 15:14 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel Hi, Stefan! On Wed, Oct 22, 2008 at 09:23:34AM -0400, Stefan Monnier wrote: > > I have an extremely medium speed processor (Athlon 1.2 GHz) and, at > > the moment, a well-padded .emacs.desktop. > > Starting Emacs 22.3 takes 23 seconds. > > Starting Emacs 23.0 takes 38 seconds. > > Emacs 23 thus starts up at about three fifths the speed of 22. This > > is very noticeable, and not a good thing. > > I haven't tried to tie down why this is. > Could it be due to the extra font-selection efforts? > You could compare the GUI vs text modes, to get a first > impression of where the time difference goes. The above times were on tty's. Trying it on X-Windows, there was no difference (or, at most, 1 or 2 seconds longer). > Stefan -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 15:14 ` Alan Mackenzie @ 2008-10-22 16:46 ` David De La Harpe Golden 2008-10-22 21:12 ` Alan Mackenzie 2008-10-23 1:29 ` Miles Bader 0 siblings, 2 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-22 16:46 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Stefan Monnier, emacs-devel Alan Mackenzie wrote: >>> I have an extremely medium speed processor (Athlon 1.2 GHz) and, at >>> the moment, a well-padded .emacs.desktop. > >>> Starting Emacs 22.3 takes 23 seconds. >>> Starting Emacs 23.0 takes 38 seconds. > > The above times were on tty's. Trying it on X-Windows, there was no > difference (or, at most, 1 or 2 seconds longer). > >> Stefan > FWIW, I'd find your emacs22 time pretty unacceptable, never mind the emacs23 one, even on a 1.2GHz-class machine. Are a lot of people putting up with that sort of start time? Ouch. Of course it could be an emacs bug triggered on your system and not mine, but I kinda wonder: is it only emacs or is everything slow? Is it only slow to start or slow to update the display and whatnot? Makes me think you might have a local system issue causing an I/O bottleneck, is all, maybe no DMA on your HDD, or your system's low on RAM and is already swapping or something. On my admittedly higher-end newish multicore (but each core is only ~ 2GHz and emacs isn't parallelized...) gnu+linux system, emacs23 takes 1 to 2 seconds to start, including the ridiculous happy-dance across the screen the initial X11 frame does (known-bug afaik), and I thought it was getting a bit sluggish (whenever an app start time is > 1 sec I start to notice and get irritated), but I put it down to the happy-dancing. With a .emacs.desktop of 100 random .el files from the emacs source tree, start time was 2 to 3 seconds. Iceweasel takes 2 to 3 secs and oowriter (probably the bloatiest thing I have installed) 11 secs ? ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 16:46 ` David De La Harpe Golden @ 2008-10-22 21:12 ` Alan Mackenzie 2008-10-22 21:19 ` Eli Zaretskii 2008-10-23 6:53 ` David De La Harpe Golden 2008-10-23 1:29 ` Miles Bader 1 sibling, 2 replies; 54+ messages in thread From: Alan Mackenzie @ 2008-10-22 21:12 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: Stefan Monnier, emacs-devel Hi, David! On Wed, Oct 22, 2008 at 05:46:51PM +0100, David De La Harpe Golden wrote: > Alan Mackenzie wrote: > >>>I have an extremely medium speed processor (Athlon 1.2 GHz) and, at > >>>the moment, a well-padded .emacs.desktop. > >>>Starting Emacs 22.3 takes 23 seconds. > >>>Starting Emacs 23.0 takes 38 seconds. > >The above times were on tty's. Trying it on X-Windows, there was no > >difference (or, at most, 1 or 2 seconds longer). > >> Stefan > FWIW, I'd find your emacs22 time pretty unacceptable, never mind the > emacs23 one, even on a 1.2GHz-class machine. Are a lot of people > putting up with that sort of start time? Ouch. Hey, don't be so hard on my poor little PC! It's getting on a bit[*]. There's 83 files being loaded by desktop, with a total of 7801019 bytes. emacs-22 -Q starts in ~0.4 seconds. emacs-23 -Q starts in ~0.7 seconds. [*] For non-native English speakers: "he's getting on a bit" is a euphemism for "he's too old (for something)". > Of course it could be an emacs bug triggered on your system and not > mine, but I kinda wonder: is it only emacs or is everything slow? Is it > only slow to start or slow to update the display and whatnot? Makes me > think you might have a local system issue causing an I/O bottleneck, is > all, maybe no DMA on your HDD, or your system's low on RAM and is > already swapping or something. It's a 7 year old PC, with a 7 yo HDD, but with plenty of RAM (768 Mb). You really think 23 seconds is slow, loading emacs + 83 files? > On my admittedly higher-end newish multicore (but each core is only ~ > 2GHz and emacs isn't parallelized...) gnu+linux system, emacs23 takes 1 > to 2 seconds to start, ..... How many file does your desktop load, and what's their total size? > , ..... including the ridiculous happy-dance across the screen the > initial X11 frame does (known-bug afaik), and I thought it was getting > a bit sluggish (whenever an app start time is > 1 sec I start to notice > and get irritated), but I put it down to the happy-dancing. With a > .emacs.desktop of 100 random .el files from the emacs source tree, > start time was 2 to 3 seconds. OK, 100 random files.el. How big were they? > Iceweasel takes 2 to 3 secs and oowriter (probably the bloatiest thing I > have installed) 11 secs ? Firefox 1.0.4 takes ~2.5 secs to load (but it was probably in the disk cache when I timed it). -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 21:12 ` Alan Mackenzie @ 2008-10-22 21:19 ` Eli Zaretskii 2008-10-23 9:21 ` Alan Mackenzie 2008-10-23 6:53 ` David De La Harpe Golden 1 sibling, 1 reply; 54+ messages in thread From: Eli Zaretskii @ 2008-10-22 21:19 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel, monnier, david > Date: Wed, 22 Oct 2008 21:12:02 +0000 > From: Alan Mackenzie <acm@muc.de> > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org > > > >>>Starting Emacs 22.3 takes 23 seconds. > > >>>Starting Emacs 23.0 takes 38 seconds. Is this with cold or warm cache? Is there a difference? > > FWIW, I'd find your emacs22 time pretty unacceptable, never mind the > > emacs23 one, even on a 1.2GHz-class machine. Are a lot of people > > putting up with that sort of start time? Ouch. > > Hey, don't be so hard on my poor little PC! It's getting on a bit[*]. > There's 83 files being loaded by desktop, with a total of 7801019 bytes. How many seconds does it take to run "sed -n -e s/xyzzy/xyzzy/p" on all those files, on that machine? (That should give us a baseline of the disk and filesystem performance.) > emacs-22 -Q starts in ~0.4 seconds. > emacs-23 -Q starts in ~0.7 seconds. Can you see if some files your desktop visits take much longer than others? How about loading elp.el early on and profiling the startup phase on both versions? On GNU/Linux, FreeBSD, and MS-Windows, you can also profile Emacs on the C level, search for PROFILING in emacs.c. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 21:19 ` Eli Zaretskii @ 2008-10-23 9:21 ` Alan Mackenzie 2008-10-23 21:53 ` Eli Zaretskii 0 siblings, 1 reply; 54+ messages in thread From: Alan Mackenzie @ 2008-10-23 9:21 UTC (permalink / raw) To: Eli Zaretskii; +Cc: david, monnier, emacs-devel Hi, Eli! On Wed, Oct 22, 2008 at 11:19:56PM +0200, Eli Zaretskii wrote: > > Date: Wed, 22 Oct 2008 21:12:02 +0000 > > From: Alan Mackenzie <acm@muc.de> > > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org > > > >>>Starting Emacs 22.3 takes 23 seconds. > > > >>>Starting Emacs 23.0 takes 38 seconds. > Is this with cold or warm cache? Is there a difference? A warm start each time. > > > FWIW, I'd find your emacs22 time pretty unacceptable, never mind > > > the emacs23 one, even on a 1.2GHz-class machine. Are a lot of > > > people putting up with that sort of start time? Ouch. > > Hey, don't be so hard on my poor little PC! It's getting on a > > bit[*]. There's 83 files being loaded by desktop, with a total of > > 7801019 bytes. > How many seconds does it take to run "sed -n -e s/xyzzy/xyzzy/p" on > all those files, on that machine? (That should give us a baseline of > the disk and filesystem performance.) From a cold start, "time grep wtioxxhs $BUFFERS" gave real 0m1.798s user 0m0.015s sys 0m0.034s Second time round, with the files presumably in the file cache: real 0m0.034s user 0m0.012s sys 0m0.020s So I don't think my PC's disk drives are the cause. [ .... ] -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 9:21 ` Alan Mackenzie @ 2008-10-23 21:53 ` Eli Zaretskii 0 siblings, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-23 21:53 UTC (permalink / raw) To: Alan Mackenzie; +Cc: david, monnier, emacs-devel > Date: Thu, 23 Oct 2008 09:21:32 +0000 > Cc: emacs-devel@gnu.org, monnier@iro.umontreal.ca, david@harpegolden.net > From: Alan Mackenzie <acm@muc.de> > > > How many seconds does it take to run "sed -n -e s/xyzzy/xyzzy/p" on > > all those files, on that machine? (That should give us a baseline of > > the disk and filesystem performance.) > > >From a cold start, "time grep wtioxxhs $BUFFERS" gave > real 0m1.798s > user 0m0.015s > sys 0m0.034s > > Second time round, with the files presumably in the file cache: > real 0m0.034s > user 0m0.012s > sys 0m0.020s > > So I don't think my PC's disk drives are the cause. Right, looks like neither the disk nor the filesystem are the factor. So we need to find which Emacs primitives became slower in v23. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 21:12 ` Alan Mackenzie 2008-10-22 21:19 ` Eli Zaretskii @ 2008-10-23 6:53 ` David De La Harpe Golden 2008-10-23 9:09 ` Alan Mackenzie 1 sibling, 1 reply; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-23 6:53 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Stefan Monnier, emacs-devel Alan Mackenzie wrote: > > OK, 100 random files.el. How big were they? > Probably fairly small. I went back and did the 180 .c files from the emacs source tree, totalling 9.2MB, and that took 6-7 secs (Which was a bit slower than I expected!) ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 6:53 ` David De La Harpe Golden @ 2008-10-23 9:09 ` Alan Mackenzie 2008-10-23 16:57 ` David De La Harpe Golden 0 siblings, 1 reply; 54+ messages in thread From: Alan Mackenzie @ 2008-10-23 9:09 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: Stefan Monnier, emacs-devel Hi, David! On Thu, Oct 23, 2008 at 07:53:14AM +0100, David De La Harpe Golden wrote: > Alan Mackenzie wrote: > > > >OK, 100 random files.el. How big were they? > > > Probably fairly small. I went back and did the 180 .c files from the > emacs source tree, totalling 9.2MB, and that took 6-7 secs (Which was a > bit slower than I expected!) OK. Was that Emacs 22 or 23? Presumably 23. Any chance you could time it using the other Emacs? -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 9:09 ` Alan Mackenzie @ 2008-10-23 16:57 ` David De La Harpe Golden 2008-10-23 21:52 ` Eli Zaretskii 0 siblings, 1 reply; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-23 16:57 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Stefan Monnier, emacs-devel Alan Mackenzie wrote: > Hi, David! > > On Thu, Oct 23, 2008 at 07:53:14AM +0100, David De La Harpe Golden wrote: >> Alan Mackenzie wrote: > >>> OK, 100 random files.el. How big were they? >>> > >> Probably fairly small. I went back and did the 180 .c files from the >> emacs source tree, totalling 9.2MB, and that took 6-7 secs (Which was a >> bit slower than I expected!) > > OK. Was that Emacs 22 or 23? Presumably 23. Any chance you could time > it using the other Emacs? > Yes, now using "time emacs -f kill-emacs" (warm cache this time, not rebooting between runs...) emacs run real user sys 22 1 4.880 3.960 0.180 22 2 4.589 3.992 0.136 22 3 4.764 4.076 0.176 23 4 7.275 6.636 0.120 23 5 6.958 6.276 0.188 23 6 6.898 6.268 0.132 So yeah, 23 is slower. I tried just putting 180 find-file-noselects in a file and loading it i.e. $ find /usr/local/src/emacs -name '*.c' -printf \ '(find-file-noselect "%p")\n' >fftest.el $ emacs --batch --eval '(byte-compile-file "fftest.el")' $ time emacs -l fftest.elc -f kill-emacs emacs run real user sys 22 1 4.523 3.888 0.136 22 2 4.744 4.172 0.112 22 3 4.457 3.836 0.176 23 4 7.177 6.532 0.152 23 5 7.198 6.544 0.160 23 6 7.159 6.472 0.220 So FWIW probably the problem is in the find-file call path rather than anything desktop.el is doing in particular (though there IS a kinda dubious mapc in desktop-create-buffer, but it likely doesn't really bite until rather larger file counts again (triangular progression in file count)). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 16:57 ` David De La Harpe Golden @ 2008-10-23 21:52 ` Eli Zaretskii 2008-10-23 22:33 ` Lennart Borgman 2008-10-23 22:47 ` David De La Harpe Golden 0 siblings, 2 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-23 21:52 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, monnier, emacs-devel > Date: Thu, 23 Oct 2008 17:57:29 +0100 > From: David De La Harpe Golden <david@harpegolden.net> > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org > > I tried just putting 180 find-file-noselects in a file and loading it > i.e. > > $ find /usr/local/src/emacs -name '*.c' -printf \ > '(find-file-noselect "%p")\n' >fftest.el > $ emacs --batch --eval '(byte-compile-file "fftest.el")' > $ time emacs -l fftest.elc -f kill-emacs > > emacs run real user sys > 22 1 4.523 3.888 0.136 > 22 2 4.744 4.172 0.112 > 22 3 4.457 3.836 0.176 > 23 4 7.177 6.532 0.152 > 23 5 7.198 6.544 0.160 > 23 6 7.159 6.472 0.220 > > > So FWIW probably the problem is in the find-file call path rather than > anything desktop.el is doing in particular Sounds plausible. Next question: is the slow-down connected in any way with decoding the buffer? To see if this is a factor, you could compare 180 calls to insert-file-contents with the same number of calls to insert-file-contents-literally, in both Emacs 22 and 23. TIA ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 21:52 ` Eli Zaretskii @ 2008-10-23 22:33 ` Lennart Borgman 2008-10-24 9:26 ` Eli Zaretskii 2008-10-23 22:47 ` David De La Harpe Golden 1 sibling, 1 reply; 54+ messages in thread From: Lennart Borgman @ 2008-10-23 22:33 UTC (permalink / raw) To: Eli Zaretskii; +Cc: acm, emacs-devel, monnier, David De La Harpe Golden On Thu, Oct 23, 2008 at 11:52 PM, Eli Zaretskii <eliz@gnu.org> wrote: >> Date: Thu, 23 Oct 2008 17:57:29 +0100 >> From: David De La Harpe Golden <david@harpegolden.net> >> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org >> >> I tried just putting 180 find-file-noselects in a file and loading it >> i.e. >> >> $ find /usr/local/src/emacs -name '*.c' -printf \ >> '(find-file-noselect "%p")\n' >fftest.el >> $ emacs --batch --eval '(byte-compile-file "fftest.el")' >> $ time emacs -l fftest.elc -f kill-emacs >> >> emacs run real user sys >> 22 1 4.523 3.888 0.136 >> 22 2 4.744 4.172 0.112 >> 22 3 4.457 3.836 0.176 >> 23 4 7.177 6.532 0.152 >> 23 5 7.198 6.544 0.160 >> 23 6 7.159 6.472 0.220 >> >> >> So FWIW probably the problem is in the find-file call path rather than >> anything desktop.el is doing in particular > > Sounds plausible. Next question: is the slow-down connected in any > way with decoding the buffer? To see if this is a factor, you could > compare 180 calls to insert-file-contents with the same number of > calls to insert-file-contents-literally, in both Emacs 22 and 23. I did a fast test using something as simple as this: (defun test-insert-dir (dir literally) (let ((files (directory-files dir t))) (dolist (file files) (unless (file-directory-p file) (with-temp-buffer (if literally (insert-file-contents-literally file) (insert-file-contents file))))))) (defun test-insert-emacs-lisp-dir () (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) (message "======================= After cache warm up") (message "Timing insert-file-contents-literally:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" t)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" t)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" t)) (message "Timing insert-file-contents:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) (message "Ready")) The output was ======================= After cache warm up Timing insert-file-contents-literally: Elapsed time: 5.531000s (0.094000s in 1 GCs) Elapsed time: 5.594000s Elapsed time: 5.828000s (0.093000s in 1 GCs) Timing insert-file-contents: Elapsed time: 9.484000s (0.188000s in 2 GCs) Elapsed time: 8.922000s (0.188000s in 2 GCs) Elapsed time: 8.953000s (0.203000s in 2 GCs) ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 22:33 ` Lennart Borgman @ 2008-10-24 9:26 ` Eli Zaretskii 0 siblings, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 9:26 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, emacs-devel, monnier, david > Date: Fri, 24 Oct 2008 00:33:01 +0200 > From: "Lennart Borgman" <lennart.borgman@gmail.com> > Cc: "David De La Harpe Golden" <david@harpegolden.net>, acm@muc.de, > monnier@iro.umontreal.ca, emacs-devel@gnu.org > > (defun test-insert-emacs-lisp-dir () > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) > (message "======================= After cache warm up") > (message "Timing insert-file-contents-literally:") > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" t)) > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" t)) > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" t)) > (message "Timing insert-file-contents:") > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) > (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" nil)) > (message "Ready")) > > The output was > > ======================= After cache warm up > Timing insert-file-contents-literally: > Elapsed time: 5.531000s (0.094000s in 1 GCs) > Elapsed time: 5.594000s > Elapsed time: 5.828000s (0.093000s in 1 GCs) > Timing insert-file-contents: > Elapsed time: 9.484000s (0.188000s in 2 GCs) > Elapsed time: 8.922000s (0.188000s in 2 GCs) > Elapsed time: 8.953000s (0.203000s in 2 GCs) Thanks. However, without comparison with Emacs 22, it's hard to interpret those numbers. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 21:52 ` Eli Zaretskii 2008-10-23 22:33 ` Lennart Borgman @ 2008-10-23 22:47 ` David De La Harpe Golden 2008-10-23 23:12 ` Lennart Borgman 2008-10-24 9:30 ` Eli Zaretskii 1 sibling, 2 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-23 22:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: acm, monnier, emacs-devel Eli Zaretskii wrote: >> So FWIW probably the problem is in the find-file call path rather than >> anything desktop.el is doing in particular > > Sounds plausible. Next question: is the slow-down connected in any > way with decoding the buffer? To see if this is a factor, you could > compare 180 calls to insert-file-contents with the same number of > calls to insert-file-contents-literally, in both Emacs 22 and 23. > > TIA Haven't got to that that - however, insert-file-contents may only account for < 10% of the total time spent in find-file-noselect-1, at least according to the elp profiler. Though it may not work right at all on C functions? (note doubled call count) - However, I then wrapped the insert-file-contents call in find-file-noselect-1 in an elisp helper function (find-file-noselect-1-h below) and got a quasi-consistent figure for it, see [1] below for results, suggesting it may really be that small? [Aside: Also turns out upping gc-cons-threshold shaves 2 secs off that 7 sec time for 180 files. Just maybe opening a bunch of files one after the other causes the memory usage to grow rapidly, causing the gc to kick in... so that's one, though probably fairly necessary, slowdown] [1] (n.b. this was without upped gc-cons-threshold) Function Name CallCt ElapsedTime AverageTime find-file-noselect 180 5.4325150000 0.0301806388 find-file-noselect-1 180 4.4660830000 0.0248115722 insert-file-contents 361 0.3358580000 0.0009303545 find-file-noselect-1-h 180 0.3062349999 0.0017013055 make-local-variable 10477 0.0153409999 1.464...e-06 abbreviate-file-name 730 0.0095040000 1.301...e-05 kill-buffer 185 0.0034050000 1.840...e-05 kill-local-variable 1084 0.0008220000 7.583...e-07 normal-backup-enable-predicate 180 0.0006289999 3.494...e-06 erase-buffer 361 0.0003230000 8.947...e-07 set-buffer-multibyte 181 0.0001579999 8.729...e-07 [2[ gc-cons-threshold to 1G find-file-noselect 180 3.2771109999 0.0182061722 find-file-noselect-1 180 2.5760030000 0.0143111277 insert-file-contents 361 0.3392750000 0.0009398199 find-file-noselect-1-h 180 0.3094899999 0.0017193888 make-local-variable 10477 0.0170539999 1.627...e-06 abbreviate-file-name 730 0.0157539999 2.158...e-05 kill-buffer 185 0.0047130000 2.547...e-05 kill-local-variable 1084 0.0008650000 7.979...e-07 normal-backup-enable-predicate 180 0.0007309999 4.061...e-06 erase-buffer 361 0.0003520000 9.750...e-07 set-buffer-multibyte 181 0.0001799999 9.944...e-07 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 22:47 ` David De La Harpe Golden @ 2008-10-23 23:12 ` Lennart Borgman 2008-10-23 23:54 ` Lennart Borgman ` (2 more replies) 2008-10-24 9:30 ` Eli Zaretskii 1 sibling, 3 replies; 54+ messages in thread From: Lennart Borgman @ 2008-10-23 23:12 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, Eli Zaretskii, monnier, emacs-devel On Fri, Oct 24, 2008 at 12:47 AM, David De La Harpe Golden <david@harpegolden.net> wrote: > Eli Zaretskii wrote: > > >>> So FWIW probably the problem is in the find-file call path rather than >>> anything desktop.el is doing in particular >> >> Sounds plausible. Next question: is the slow-down connected in any >> way with decoding the buffer? To see if this is a factor, you could >> compare 180 calls to insert-file-contents with the same number of >> calls to insert-file-contents-literally, in both Emacs 22 and 23. >> >> TIA > > Haven't got to that that - however, insert-file-contents may only account > for < 10% of the total time spent in find-file-noselect-1, at least > according to the elp profiler. Based on that observation system calls other than reading the file contents looks most suspicious to me. In `after-find-file' (which is called at the end of `find-file-noselect-1') there are some calls to `file-attributes'. Are they perhaps involved? ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 23:12 ` Lennart Borgman @ 2008-10-23 23:54 ` Lennart Borgman 2008-10-24 9:51 ` Eli Zaretskii 2008-10-24 0:13 ` David De La Harpe Golden 2008-10-24 9:35 ` Eli Zaretskii 2 siblings, 1 reply; 54+ messages in thread From: Lennart Borgman @ 2008-10-23 23:54 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, Eli Zaretskii, monnier, emacs-devel On Fri, Oct 24, 2008 at 1:12 AM, Lennart Borgman <lennart.borgman@gmail.com> wrote: > In `after-find-file' (which is > called at the end of `find-file-noselect-1') there are some calls to > `file-attributes'. Are they perhaps involved? There is also a call to `file-modes'. I did some further tests: Timing insert-file-contents-literally: Elapsed time: 8.375000s (0.187000s in 1 GCs) Timing insert-file-contents: Elapsed time: 14.297000s (0.312000s in 2 GCs) Timing file-attributes: Elapsed time: 5.890000s (0.156000s in 1 GCs) Timing file-exists-p: Elapsed time: 6.672000s (0.125000s in 1 GCs) Timing file-modes: Elapsed time: 5.609000s (0.188000s in 1 GCs) ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 23:54 ` Lennart Borgman @ 2008-10-24 9:51 ` Eli Zaretskii 2008-10-24 13:58 ` David De La Harpe Golden 2008-10-24 15:44 ` Lennart Borgman 0 siblings, 2 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 9:51 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, emacs-devel, monnier, david > Date: Fri, 24 Oct 2008 01:54:06 +0200 > From: "Lennart Borgman" <lennart.borgman@gmail.com> > Cc: "Eli Zaretskii" <eliz@gnu.org>, acm@muc.de, monnier@iro.umontreal.ca, > emacs-devel@gnu.org > > Timing insert-file-contents-literally: > Elapsed time: 8.375000s (0.187000s in 1 GCs) > Timing insert-file-contents: > Elapsed time: 14.297000s (0.312000s in 2 GCs) > Timing file-attributes: > Elapsed time: 5.890000s (0.156000s in 1 GCs) > Timing file-exists-p: > Elapsed time: 6.672000s (0.125000s in 1 GCs) > Timing file-modes: > Elapsed time: 5.609000s (0.188000s in 1 GCs) Thanks, but what does this mean? What is behind a line such as > Timing insert-file-contents-literally: > Elapsed time: 8.375000s (0.187000s in 1 GCs) What code was run, how many times, on which files, etc.? Also, please compare that with Emacs 22, since this whole thread is about comparative performance. Thanks. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 9:51 ` Eli Zaretskii @ 2008-10-24 13:58 ` David De La Harpe Golden 2008-10-24 15:44 ` Lennart Borgman 1 sibling, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 13:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: acm, Lennart Borgman, monnier, emacs-devel Eli Zaretskii wrote: > Also, please compare that with Emacs 22, since this whole thread is > about comparative performance. > > Thanks. Hey now, that may be some thread participants' only concern, but I already noted my concern with the absolute performance... ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 9:51 ` Eli Zaretskii 2008-10-24 13:58 ` David De La Harpe Golden @ 2008-10-24 15:44 ` Lennart Borgman 2008-10-24 16:24 ` Chong Yidong 2008-10-24 16:45 ` David De La Harpe Golden 1 sibling, 2 replies; 54+ messages in thread From: Lennart Borgman @ 2008-10-24 15:44 UTC (permalink / raw) To: Eli Zaretskii; +Cc: acm, emacs-devel, monnier, david On Fri, Oct 24, 2008 at 11:51 AM, Eli Zaretskii <eliz@gnu.org> wrote: >> Date: Fri, 24 Oct 2008 01:54:06 +0200 >> From: "Lennart Borgman" <lennart.borgman@gmail.com> >> Cc: "Eli Zaretskii" <eliz@gnu.org>, acm@muc.de, monnier@iro.umontreal.ca, >> emacs-devel@gnu.org >> >> Timing insert-file-contents-literally: >> Elapsed time: 8.375000s (0.187000s in 1 GCs) >> Timing insert-file-contents: >> Elapsed time: 14.297000s (0.312000s in 2 GCs) >> Timing file-attributes: >> Elapsed time: 5.890000s (0.156000s in 1 GCs) >> Timing file-exists-p: >> Elapsed time: 6.672000s (0.125000s in 1 GCs) >> Timing file-modes: >> Elapsed time: 5.609000s (0.188000s in 1 GCs) > > Thanks, but what does this mean? What is behind a line such as Here is the code again, a little bit enhanced: (defun test-insert-dir (dir how) (let ((files (directory-files dir t))) (dolist (file files) (unless (file-directory-p file) (with-temp-buffer (cond ((eq how 'literally) (insert-file-contents-literally file)) ((eq how 'normal-insert) (insert-file-contents file)) ((eq how 'attributes) (file-attributes file)) ((eq how 'exists) (file-exists-p file)) ((eq how 'file-modes) (file-exists-p file)) ((eq how 'normal-mode) (setq buffer-file-name file) (emacs-lisp-mode) (setq buffer-file-name nil) (set-buffer-modified-p nil)) (t (error "How=%s" how)) )))))) (defun test-insert-emacs-lisp-dir () (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'literally)) (message "======================= After cache warm up") (message "Timing insert-file-contents-literally:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'literally)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'literally)) (message "Timing insert-file-contents:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'normal-insert)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'normal-insert)) (message "Timing file-attributes:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'attributes)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'attributes)) (message "Timing file-exists-p:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'exists)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'exists)) (message "Timing file-modes:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'file-modes)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'file-modes)) (message "Timing normal-mode:") (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'normal-mode)) (benchmark 1 '(test-insert-dir "c:/emacs/u/070103/emacs/lisp/" 'normal-mode)) (message "Ready")) > Also, please compare that with Emacs 22, since this whole thread is > about comparative performance. In Emacs 22 I get in *Messages* buffer: ======================= After cache warm up Timing insert-file-contents-literally: Elapsed time: 3.172000s (0.031000s in 1 GCs) Elapsed time: 3.141000s (0.032000s in 1 GCs) Timing insert-file-contents: Elapsed time: 4.609000s (0.125000s in 4 GCs) Elapsed time: 4.610000s (0.125000s in 4 GCs) Timing file-attributes: Elapsed time: 1.859000s (0.031000s in 1 GCs) Elapsed time: 1.891000s (0.015000s in 1 GCs) Timing file-exists-p: Elapsed time: 1.875000s (0.016000s in 1 GCs) Elapsed time: 1.968000s (0.016000s in 1 GCs) Timing file-modes: Elapsed time: 2.063000s (0.031000s in 1 GCs) Elapsed time: 1.859000s (0.031000s in 1 GCs) Timing normal-mode: Elapsed time: 1.235000s (0.048000s in 2 GCs) Elapsed time: 1.437000s (0.016000s in 1 GCs) and in Emacs 23: ======================= After cache warm up Timing insert-file-contents-literally: Elapsed time: 4.844000s Elapsed time: 4.828000s (0.109000s in 1 GCs) Timing insert-file-contents: Elapsed time: 8.094000s (0.109000s in 1 GCs) Elapsed time: 8.063000s (0.219000s in 2 GCs) Timing file-attributes: Elapsed time: 3.796000s Elapsed time: 3.579000s (0.094000s in 1 GCs) Timing file-exists-p: Elapsed time: 3.515000s Elapsed time: 3.578000s (0.109000s in 1 GCs) Timing file-modes: Elapsed time: 3.625000s Elapsed time: 3.953000s (0.109000s in 1 GCs) Timing normal-mode: Mark set [553 times] Elapsed time: 3.985000s (0.891000s in 9 GCs) Mark set [553 times] Elapsed time: 6.031000s (1.810000s in 18 GCs) The system calls (file-attributes, file-exists-p and file-modes) takes nearly twice as long time in Emacs 23 (on w32). For normal-mode the factor is even bigger, 3-4 times longer time. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 15:44 ` Lennart Borgman @ 2008-10-24 16:24 ` Chong Yidong 2008-10-24 16:48 ` Eli Zaretskii 2008-10-24 16:45 ` David De La Harpe Golden 1 sibling, 1 reply; 54+ messages in thread From: Chong Yidong @ 2008-10-24 16:24 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, Eli Zaretskii, david, monnier, emacs-devel "Lennart Borgman" <lennart.borgman@gmail.com> writes: > The system calls (file-attributes, file-exists-p and file-modes) takes > nearly twice as long time in Emacs 23 (on w32). For normal-mode the > factor is even bigger, 3-4 times longer time. Could you try testing file-attributes, file-exists-p and file-modes in isolation, to see which one of the three are slower (or is it all three)? ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 16:24 ` Chong Yidong @ 2008-10-24 16:48 ` Eli Zaretskii 0 siblings, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 16:48 UTC (permalink / raw) To: Chong Yidong; +Cc: acm, david, lennart.borgman, monnier, emacs-devel > From: Chong Yidong <cyd@stupidchicken.com> > Cc: "Eli Zaretskii" <eliz@gnu.org>, acm@muc.de, emacs-devel@gnu.org, monnier@iro.umontreal.ca, david@harpegolden.net > Date: Fri, 24 Oct 2008 12:24:58 -0400 > > "Lennart Borgman" <lennart.borgman@gmail.com> writes: > > > The system calls (file-attributes, file-exists-p and file-modes) takes > > nearly twice as long time in Emacs 23 (on w32). For normal-mode the > > factor is even bigger, 3-4 times longer time. > > Could you try testing file-attributes, file-exists-p and file-modes in > isolation, to see which one of the three are slower (or is it all > three)? They all call `stat', so on Windows they all are similarly expensive. It is on my todo to request a cheap version of `stat' in almost every function that calls `stat' except file-attributes and a couple of others, which _really_ need the whole attribute set. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 15:44 ` Lennart Borgman 2008-10-24 16:24 ` Chong Yidong @ 2008-10-24 16:45 ` David De La Harpe Golden 2008-10-24 16:53 ` Eli Zaretskii 2008-10-25 2:01 ` Richard M. Stallman 1 sibling, 2 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 16:45 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, Eli Zaretskii, monnier, emacs-devel Lennart Borgman wrote: > On Fri, Oct 24, 2008 at 11:51 AM, Eli Zaretskii <eliz@gnu.org> wrote: >>> Date: Fri, 24 Oct 2008 01:54:06 +0200 >>> From: "Lennart Borgman" <lennart.borgman@gmail.com> >>> Cc: "Eli Zaretskii" <eliz@gnu.org>, acm@muc.de, monnier@iro.umontreal.ca, >>> emacs-devel@gnu.org >>> >>> Timing insert-file-contents-literally: >>> Elapsed time: 8.375000s (0.187000s in 1 GCs) >>> Timing insert-file-contents: >>> Elapsed time: 14.297000s (0.312000s in 2 GCs) >>> Timing file-attributes: >>> Elapsed time: 5.890000s (0.156000s in 1 GCs) >>> Timing file-exists-p: >>> Elapsed time: 6.672000s (0.125000s in 1 GCs) >>> Timing file-modes: >>> Elapsed time: 5.609000s (0.188000s in 1 GCs) >> Thanks, but what does this mean? What is behind a line such as > > Here is the code again, a little bit enhanced: FWIW, ran your code on my debian/unstable amd64 system using linux kernel 2.6.26 (though using /usr/local/src/emacs/lisp rather than c:«blah» for obvious reasons), results below (no gc or function stubbing tweaks). The file attributes are a w32-specific problem I guess - are (a) about 40x faster than your w32 emacs23 and (b) similar between emacs22/23 (actually slightly faster with 23 in the test runs, but that could just be the GC and general noise). OTOH the normal-mode call is noticeably slower for emacs23 (though not as pronounced as on your w32 - of course, the emacs23 normal-mode code path includes more file attribute usage due to the .dir.settings.el stuff...) Emacs 22: ======================= After cache warm up Timing insert-file-contents-literally: Elapsed time: 0.403781s (0.031159s in 1 GCs) Elapsed time: 0.433654s (0.061884s in 2 GCs) Timing insert-file-contents: Elapsed time: 1.073601s (0.127081s in 4 GCs) Elapsed time: 1.066970s (0.125150s in 4 GCs) Timing file-attributes: Elapsed time: 0.099218s (0.031007s in 1 GCs) Elapsed time: 0.131247s (0.062046s in 2 GCs) Timing file-exists-p: Elapsed time: 0.132959s (0.062106s in 2 GCs) Elapsed time: 0.101442s (0.031064s in 1 GCs) Timing file-modes: Elapsed time: 0.133818s (0.062778s in 2 GCs) Elapsed time: 0.101579s (0.031122s in 1 GCs) Timing normal-mode: Elapsed time: 0.176703s (0.062539s in 2 GCs) Elapsed time: 0.257191s (0.065307s in 2 GCs) Ready Emacs 23: ======================= After cache warm up Timing insert-file-contents-literally: Elapsed time: 0.296811s (0.052762s in 1 GCs) Elapsed time: 0.293286s (0.051887s in 1 GCs) Timing insert-file-contents: Elapsed time: 1.183911s (0.160524s in 3 GCs) Elapsed time: 1.179618s (0.161070s in 3 GCs) Timing file-attributes: Elapsed time: 0.092713s (0.052083s in 1 GCs) Elapsed time: 0.092785s (0.051292s in 1 GCs) Timing file-exists-p: Elapsed time: 0.094927s (0.051904s in 1 GCs) Elapsed time: 0.095253s (0.051449s in 1 GCs) Timing file-modes: Elapsed time: 0.096032s (0.052696s in 1 GCs) Elapsed time: 0.094715s (0.051999s in 1 GCs) Timing normal-mode: Elapsed time: 0.245259s (0.104135s in 2 GCs) Elapsed time: 0.390639s (0.107556s in 2 GCs) Ready ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 16:45 ` David De La Harpe Golden @ 2008-10-24 16:53 ` Eli Zaretskii 2008-10-25 2:01 ` Richard M. Stallman 1 sibling, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 16:53 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, lennart.borgman, monnier, emacs-devel > Date: Fri, 24 Oct 2008 17:45:09 +0100 > From: David De La Harpe Golden <david@harpegolden.net> > CC: Eli Zaretskii <eliz@gnu.org>, acm@muc.de, monnier@iro.umontreal.ca, > emacs-devel@gnu.org > > The file attributes are a w32-specific problem I guess On Posix systems, `stat' (called by file-attributes) is a system call, so it obviously doesn't depend on the Emacs versions. By contrast, on Windows we emulate `stat' with several quite expensive system calls. Thus, it is meaningless to compare GNU/Linux and Windows as far as file-attributes is concerned. > (a) about 40x faster than your w32 emacs23 and (b) similar between > emacs22/23 (actually slightly faster with 23 in the test runs, but that > could just be the GC and general noise). Yes, none of these primitives is the hot spot. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 16:45 ` David De La Harpe Golden 2008-10-24 16:53 ` Eli Zaretskii @ 2008-10-25 2:01 ` Richard M. Stallman 2008-10-25 3:38 ` David De La Harpe Golden 1 sibling, 1 reply; 54+ messages in thread From: Richard M. Stallman @ 2008-10-25 2:01 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, eliz, lennart.borgman, monnier, emacs-devel OTOH the normal-mode call is noticeably slower for emacs23 (though not as pronounced as on your w32 - of course, the emacs23 normal-mode code path includes more file attribute usage due to the .dir.settings.el stuff...) Does `normal-mode' look for the that file more than once in a given directory? If so, that is an easy optimization: record the directories in which it has looked for that file, and don't look again. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-25 2:01 ` Richard M. Stallman @ 2008-10-25 3:38 ` David De La Harpe Golden 0 siblings, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-25 3:38 UTC (permalink / raw) To: rms; +Cc: acm, eliz, lennart.borgman, monnier, emacs-devel Richard M. Stallman wrote: > Does `normal-mode' look for the that file more than once in a given > directory? AFAIK it shouldn't in a given call. Across calls caching the info would be wrong* since a user might happen to make a .dir-settings.el in the interim. Anyway, as per recent previous mail with patch [1] the issue was with _how_ the filename was being looked for in the directory - ask for every filename in the directory and iterate through checking if one regex-matches (directory-files, slower) or ask if the directory has a file called filename in it (file-exists-p, faster). * well, could have a smart cache with inotify (or other-oses-equivalent). http://en.wikipedia.org/wiki/Inotify "function is essentially an extension to filesystems to notice changes to the filesystem, and report those changes to applications.", ... and/or a batch interface that signals that a bunch of files are about to be opened in one go and it's okay to cache for a bit... ... but maybe not worth the bother in this instance... [1] Message-ID: <49025DF8.6030502@harpegolden.net> ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 23:12 ` Lennart Borgman 2008-10-23 23:54 ` Lennart Borgman @ 2008-10-24 0:13 ` David De La Harpe Golden 2008-10-24 0:59 ` Lennart Borgman ` (3 more replies) 2008-10-24 9:35 ` Eli Zaretskii 2 siblings, 4 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 0:13 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, Eli Zaretskii, monnier, emacs-devel Lennart Borgman wrote: > Based on that observation system calls other than reading the file > contents looks most suspicious to me. In `after-find-file' (which is > called at the end of `find-file-noselect-1') there are some calls to > `file-attributes'. Are they perhaps involved? Bah, my bad, somehow missed that inside the if statement the first pass through, duh.. Yes, it is mostly "after-find-file", but the call to "normal-mode" is the killer, not the file attributes calls in "after-find-file" itself! - [1] "normal-mode" bulk is is split into "set-auto-mode" and "hack-local-variables" fairly evenly (roughly 11:9 as below) Most of the latter is in "hack-project-variables", and most of /that/ is "project-find-settings-file", and most of that is the "locate-dominating-file" walk. +++ Wasn't the project functionality (.dir-settings.el variable settings) new in emacs23? That may well account for emacs22->emacs23 ? For every file loaded, it's redoing that... +++ Which leaves set-auto-mode... [1] find-file-noselect 180 3.3577020000 0.0186539000 find-file-noselect-1 180 2.6044840000 0.0144693555 after-find-file 180 2.2709340000 0.0126163000 normal-mode 180 2.0908219999 0.0116156777 set-auto-mode 180 1.141377 0.0063409833 hack-local-variables 180 0.9163369999 0.0050907611 hack-project-variables 180 0.8940040000 0.0049666888 project-find-settings-file 180 0.8922979999 0.0049572111 locate-dominating-file 180 0.890476 0.0049470888 insert-file-contents 361 0.3547089999 0.0009825734 run-hooks 2406 0.2279640000 9.474...e-05 re-search-forward 1453 0.1557330000 0.0001071803 vc-find-file-hook 180 0.1458039999 0.0008100222 font-lock-mode 722 0.0745249999 0.0001032202 file-attributes 1476 0.0304240000 2.061...e-05 make-local-variable 10477 0.0182779999 1.744...e-06 file-name-nondirectory 7843 0.0176319999 2.248...e-06 abbreviate-file-name 730 0.0165959999 2.273...e-05 search-forward 1811 0.0137990000 7.619...e-06 file-exists-p 756 0.0132379999 1.751...e-05 fundamental-mode 180 0.012926 7.181...e-05 file-name-directory 4091 0.0107010000 2.615...e-06 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 0:13 ` David De La Harpe Golden @ 2008-10-24 0:59 ` Lennart Borgman 2008-10-24 1:58 ` David De La Harpe Golden 2008-10-24 1:44 ` David De La Harpe Golden ` (2 subsequent siblings) 3 siblings, 1 reply; 54+ messages in thread From: Lennart Borgman @ 2008-10-24 0:59 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, Eli Zaretskii, monnier, emacs-devel On Fri, Oct 24, 2008 at 2:13 AM, David De La Harpe Golden <david@harpegolden.net> wrote: > Lennart Borgman wrote: > > >> Based on that observation system calls other than reading the file >> contents looks most suspicious to me. In `after-find-file' (which is >> called at the end of `find-file-noselect-1') there are some calls to >> `file-attributes'. Are they perhaps involved? > > Bah, my bad, somehow missed that inside the if statement the first pass > through, duh.. Yes, it is mostly "after-find-file", but the call to > "normal-mode" is the killer, not the file attributes calls in > "after-find-file" itself! - [1] It is probably different on w32 then. It looks like `normal-mode' takes maybe 1.5 time insert+file-attr+file-modes+file-exist on w32. (But I did not use elp, maybe I missed something.) ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 0:59 ` Lennart Borgman @ 2008-10-24 1:58 ` David De La Harpe Golden 0 siblings, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 1:58 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, Eli Zaretskii, monnier, emacs-devel Lennart Borgman wrote: > It is probably different on w32 then. It looks like `normal-mode' > takes maybe 1.5 time insert+file-attr+file-modes+file-exist on w32. > (But I did not use elp, maybe I missed something.) I have a vague recollection that emacs' reading of certain file attributes can be slow on w32 as it's emulating them or something? There's a variable w32-get-true-file-attributes that may be relevant? Reminds me: the ext3 fs I was testing on was mounted "relatime" http://kerneltrap.org/node/14148 (also turns out NTFS apparently has something very much akin to the atime "feature", something I didn't know until just now, might want to try turning it off [1]) FWIW, elp - I just added the following to the end of my .emacs (require 'elp) (setq elp-function-list '(find-file find-file-noselect)) ; and so forth. (elp-set-master 'find-file-noselect) (elp-instrument-list) Then, starting emacs with emacs -l fftest.el -f elp-results I was presented with my profiling results when they were ready. (or you can hit M-x elp-results) [1] no. 8 http://www.windowsdevcenter.com/pub/a/windows/2005/02/08/NTFS_Hacks.html ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 0:13 ` David De La Harpe Golden 2008-10-24 0:59 ` Lennart Borgman @ 2008-10-24 1:44 ` David De La Harpe Golden 2008-10-24 9:57 ` Eli Zaretskii 2008-10-24 11:21 ` Alan Mackenzie 2008-10-24 4:13 ` Stefan Monnier 2008-10-24 9:52 ` Eli Zaretskii 3 siblings, 2 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 1:44 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, Eli Zaretskii, monnier, emacs-devel David De La Harpe Golden wrote: > +++ Which leaves set-auto-mode... Which seems to be mostly the particular mode - So of course, this can presumably vary wildly from mode to mode, but let's take c-mode (seeing as it's for the c files I was testing with): set-auto-mode->set-auto-mode-0-> c-mode-> (c-init-language-vars-for, c-common-init->(c-basic-common-init, run some internal hooks, like the "neutralize"), ...) See existing c-neutralize-syntax-in-CPP initial comment: "SPEED _MATTERS_ IN THIS FUNCTION!!!" Profiling confirms - yes, it does. :-) find-file-noselect 180 3.1810370000 0.0176724277 find-file-noselect-1 180 2.48014 0.0137785555 after-find-file 180 2.1637470000 0.0120208166 normal-mode 180 2.010236 0.0111679777 set-auto-mode 180 1.0771709999 0.0059842833 set-auto-mode-0 180 1.0480739999 0.0058226333 c-mode 180 1.047115 0.0058173055 hack-local-variables 180 0.9007970000 0.0050044277 c-common-init 180 0.8647119999 0.0048039555 c-neutralize-syntax-in-CPP 180 0.7705030000 0.0042805722 run-hooks 2357 0.2052220000 8.706...e-05 c-init-language-vars-for 180 0.112398 0.0006244333 c-basic-common-init 180 0.0799130000 0.0004439611 c-neutralize-CPP-line 14000 0.0594100000 4.243...e-06 make-local-variable 10477 0.0177539999 1.694...e-06 set-auto-mode-1 362 0.0149190000 4.121...e-05 kill-all-local-variables 361 0.0091960000 2.547...e-05 c-setup-paragraph-variables 361 0.0060069999 1.663...e-05 c-update-modeline 360 0.005464 1.517...e-05 c-extend-region-for-CPP 180 0.0043769999 2.431...e-05 c-font-lock-init 180 0.0036940000 2.052...e-05 cc-imenu-init 180 0.0008029999 4.461...e-06 c-initialize-cc-mode 180 0.0003749999 2.083...e-06 easy-menu-add 180 0.0002349999 1.305...e-06 set-syntax-table 182 0.0001749999 9.615...e-07 use-local-map 182 0.0001659999 9.120...e-07 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 1:44 ` David De La Harpe Golden @ 2008-10-24 9:57 ` Eli Zaretskii 2008-10-24 15:00 ` David De La Harpe Golden 2008-10-24 11:21 ` Alan Mackenzie 1 sibling, 1 reply; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 9:57 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, lennart.borgman, monnier, emacs-devel > Date: Fri, 24 Oct 2008 02:44:31 +0100 > From: David De La Harpe Golden <david@harpegolden.net> > CC: acm@muc.de, Eli Zaretskii <eliz@gnu.org>, monnier@iro.umontreal.ca, > emacs-devel@gnu.org > > David De La Harpe Golden wrote: > > > > +++ Which leaves set-auto-mode... > > Which seems to be mostly the particular mode - So of course, this can > presumably vary wildly from mode to mode, but let's take c-mode (seeing > as it's for the c files I was testing with): > > set-auto-mode->set-auto-mode-0-> > c-mode-> (c-init-language-vars-for, > c-common-init->(c-basic-common-init, > run some internal hooks, like the "neutralize"), ...) > > See existing c-neutralize-syntax-in-CPP initial comment: > "SPEED _MATTERS_ IN THIS FUNCTION!!!" > > Profiling confirms - yes, it does. :-) How does this compare with Emacs 22? ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 9:57 ` Eli Zaretskii @ 2008-10-24 15:00 ` David De La Harpe Golden 0 siblings, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 15:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: acm, lennart.borgman, monnier, emacs-devel Eli Zaretskii wrote: >> Date: Fri, 24 Oct 2008 02:44:31 +0100 >> From: David De La Harpe Golden <david@harpegolden.net> >> CC: acm@muc.de, Eli Zaretskii <eliz@gnu.org>, monnier@iro.umontreal.ca, >> emacs-devel@gnu.org >> >> David De La Harpe Golden wrote: >> >> >>> +++ Which leaves set-auto-mode... >> Which seems to be mostly the particular mode - So of course, this can >> presumably vary wildly from mode to mode, but let's take c-mode (seeing >> as it's for the c files I was testing with): >> >> set-auto-mode->set-auto-mode-0-> >> c-mode-> (c-init-language-vars-for, >> c-common-init->(c-basic-common-init, >> run some internal hooks, like the "neutralize"), ...) >> >> See existing c-neutralize-syntax-in-CPP initial comment: >> "SPEED _MATTERS_ IN THIS FUNCTION!!!" >> >> Profiling confirms - yes, it does. :-) > > How does this compare with Emacs 22? (gc-cons-threshold @ 1G as it was for the emacs23 test your replied to) As you can see by comparing the two, the "set-auto-mode" path of "normal-mode" is similar overhead on both but "hack-local-variables" is about 27 TIMES slower on emacs23... Function Name Call Count Elapsed Time Average Time ============================ ========== ============ ============ find-file-noselect 180 2.2096209999 0.0122756722 find-file-noselect-1 180 1.4848800000 0.0082493333 after-find-file 180 1.226164 0.0068120222 normal-mode 180 0.9997670000 0.0055542611 set-auto-mode 180 0.9343669999 0.0051909277 set-auto-mode-0 180 0.9077470000 0.0050430388 c-mode 180 0.9068940000 0.0050383000 c-common-init 180 0.6864290000 0.0038134944 c-neutralize-syntax-in-CPP 182 0.5930520000 0.0032585274 run-hooks 1998 0.2834299999 0.0001418568 c-init-language-vars-for 180 0.1180209999 0.0006556722 c-basic-common-init 180 0.0789910000 0.0004388388 c-neutralize-CPP-line 14000 0.0531670000 3.797...e-06 hack-local-variables 181 0.0335519999 0.0001853701 easy-menu-add 180 0.0288129999 0.0001600722 make-local-variable 11046 0.0169949999 1.538...e-06 set-auto-mode-1 363 0.0139350000 3.838...e-05 kill-all-local-variables 361 0.0090380000 2.503...e-05 c-setup-paragraph-variables 361 0.0067259999 1.863...e-05 c-update-modeline 360 0.0059999999 1.666...e-05 c-extend-region-for-CPP 182 0.0048190000 2.647...e-05 c-font-lock-init 180 0.0033029999 1.834...e-05 cc-imenu-init 180 0.0009289999 5.161...e-06 c-initialize-cc-mode 180 0.0004939999 2.744...e-06 c-after-change 2 0.000241 0.0001205 use-local-map 182 0.0001749999 9.615...e-07 set-syntax-table 182 0.0001529999 8.406...e-07 c-before-change 2 0.000103 5.15e-05 c-extend-after-change-region 2 3e-06 1.5e-06 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 1:44 ` David De La Harpe Golden 2008-10-24 9:57 ` Eli Zaretskii @ 2008-10-24 11:21 ` Alan Mackenzie 2008-10-24 14:32 ` David De La Harpe Golden 1 sibling, 1 reply; 54+ messages in thread From: Alan Mackenzie @ 2008-10-24 11:21 UTC (permalink / raw) To: David De La Harpe Golden Cc: Eli Zaretskii, Lennart Borgman, monnier, emacs-devel Hi, David! First of all, I'm writing this on Friday, ~10:45 UCT. My ISP's mail server is having problems, so I don't know when this will get through. It's somewhat frustrating. :-( On Fri, Oct 24, 2008 at 02:44:31AM +0100, David De La Harpe Golden wrote: > David De La Harpe Golden wrote: > >+++ Which leaves set-auto-mode... > Which seems to be mostly the particular mode - So of course, this can > presumably vary wildly from mode to mode, but let's take c-mode (seeing > as it's for the c files I was testing with): > set-auto-mode->set-auto-mode-0-> > c-mode-> (c-init-language-vars-for, > c-common-init->(c-basic-common-init, > run some internal hooks, like the "neutralize"), ...) > See existing c-neutralize-syntax-in-CPP initial comment: > "SPEED _MATTERS_ IN THIS FUNCTION!!!" > Profiling confirms - yes, it does. :-) That function's one of mine. :-) The story behind the comment is that my original version of that function was written without consideration of its speed, and was about two orders of magnitude slower. People were complaining, with justification, that it was taking ~1 minute to load a large file.c. However, the current function isn't that slow. I timed it for 100 iterations on a file 2,927,889 bytes big. It's taking 0.72s for this file, i.e. about 0.25s per megabyte, and that's on my 1.2 GHz Athlon. So on emacs/src's 118 files.c, total size 8772802, that function would take only 2.5s, again, on my Athlon. On your machine it would be ~0.5s. Besides, in my original measurements, I was executing the same CC Mode in Emacs 22 and Emacs 23. c-neutralize-syntax-in-CPP isn't the problem. [ .... ] -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 11:21 ` Alan Mackenzie @ 2008-10-24 14:32 ` David De La Harpe Golden 2008-10-24 19:28 ` Alan Mackenzie 0 siblings, 1 reply; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 14:32 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, Lennart Borgman, monnier, emacs-devel Alan Mackenzie wrote: > However, the current function isn't that slow. I timed it for 100 > iterations on a file 2,927,889 bytes big. It's taking 0.72s for this > file, i.e. about 0.25s per megabyte, and that's on my 1.2 GHz Athlon. > > So on emacs/src's 118 files.c, total size 8772802, that function would > take only 2.5s, again, on my Athlon. On your machine it would be ~0.5s. > > Besides, in my original measurements, I was executing the same CC Mode > in Emacs 22 and Emacs 23. > > c-neutralize-syntax-in-CPP isn't the problem. > Probably not, or at least not the slowdown you're seeing i.e. your relative emacs22/23 problem. N.B. It wasn't intended as a slight - I do appreciate C is a relative pain to parse, syntax-highlight and deal with in general, I'm_ not_ saying c-mode's apparently associated overhead is necessarily unreasonable, but it may explain why stuff I was generally doing in emacs day-to-day seemed to load a little bit faster than this particular test case (if you recall, I was surprised at the result) - I relatively seldom edit c files! But c-mode as a whole _does_ account for a significant chunk of the startup time on the 180 .c files I was testing with: time emacs -l fftest.el -f kill-emacs with in .emacs a sneaky (setq auto-mode-alist (cons (cons "\\.c\\'" 'text-mode) auto-mode-alist)) emacs c-mode realtime 22 on 4.951 23 on 7.388 22 off 2.830 23 off 4.089 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 14:32 ` David De La Harpe Golden @ 2008-10-24 19:28 ` Alan Mackenzie 2008-10-24 19:35 ` David De La Harpe Golden 0 siblings, 1 reply; 54+ messages in thread From: Alan Mackenzie @ 2008-10-24 19:28 UTC (permalink / raw) To: David De La Harpe Golden Cc: Eli Zaretskii, Lennart Borgman, monnier, emacs-devel Hi, David! On Fri, Oct 24, 2008 at 03:32:30PM +0100, David De La Harpe Golden wrote: > Alan Mackenzie wrote: [ .... ] > >c-neutralize-syntax-in-CPP isn't the problem. > Probably not, or at least not the slowdown you're seeing i.e. your > relative emacs22/23 problem. N.B. It wasn't intended as a slight - I > do appreciate C is a relative pain to parse, syntax-highlight and deal > with in general, ..... Thanks! > ...., I'm_ not_ saying c-mode's apparently associated overhead is > necessarily unreasonable, but it may explain why stuff I was generally > doing in emacs day-to-day seemed to load a little bit faster than this > particular test case (if you recall, I was surprised at the result) - I > relatively seldom edit c files! But c-mode as a whole _does_ account > for a significant chunk of the startup time on the 180 .c files I was > testing with: Good! > time emacs -l fftest.el -f kill-emacs > with in .emacs a sneaky > (setq auto-mode-alist (cons (cons "\\.c\\'" 'text-mode) auto-mode-alist)) > emacs c-mode realtime > 22 on 4.951 > 23 on 7.388 > 22 off 2.830 > 23 off 4.089 That's something like I would expect. By the way, did you see my other post in this thread (Subject: expanded a bit), where I did a test creating 10,000,000 conses, and Emacs 23 was appreciably slower than Emacs 22? I suspect the garbage collector. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 19:28 ` Alan Mackenzie @ 2008-10-24 19:35 ` David De La Harpe Golden 0 siblings, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 19:35 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Eli Zaretskii, Lennart Borgman, monnier, emacs-devel Alan Mackenzie wrote: > By the way, did you see my other post in this thread (Subject: expanded a > bit), where I did a test creating 10,000,000 conses, and Emacs 23 was > appreciably slower than Emacs 22? I suspect the garbage collector. > in turn did you see my post re hack-project-variables/locate-dominating-file? Can you try on your system your test with a (defun hack-project-variables () nil) in your .emacs? ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 0:13 ` David De La Harpe Golden 2008-10-24 0:59 ` Lennart Borgman 2008-10-24 1:44 ` David De La Harpe Golden @ 2008-10-24 4:13 ` Stefan Monnier 2008-10-24 15:19 ` David De La Harpe Golden 2008-10-24 9:52 ` Eli Zaretskii 3 siblings, 1 reply; 54+ messages in thread From: Stefan Monnier @ 2008-10-24 4:13 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel > Most of the latter is in "hack-project-variables", and most of /that/ is > "project-find-settings-file", and most of that is the > "locate-dominating-file" walk. locate-dominating-file (or rather some equivalent code) is also used in VC to detect the revision control system used for the file. It's actually used 5 times there (once each for Bzr Git Hg Mtn Arch), so are you sure only the one in project-find-settings-file costs us the slowdown? If so, it's probably just because it's the first one run and the others benefit from the OS's cache. Stefan ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 4:13 ` Stefan Monnier @ 2008-10-24 15:19 ` David De La Harpe Golden 2008-10-24 18:42 ` Stefan Monnier 0 siblings, 1 reply; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 15:19 UTC (permalink / raw) To: Stefan Monnier; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel Stefan Monnier wrote: >> Most of the latter is in "hack-project-variables", and most of /that/ is >> "project-find-settings-file", and most of that is the >> "locate-dominating-file" walk. > > locate-dominating-file (or rather some equivalent code) is also used in > VC to detect the revision control system used for the file. > It's actually used 5 times there (once each for Bzr Git Hg Mtn Arch), so > are you sure only the one in project-find-settings-file costs us > the slowdown? Not all of it, but it seems to be significant. taking out locate-dominating-file with: (defun locate-dominating-file (file regexp) nil) runs just now (one after the other, no reboot, so probably from OS cache anyway) emacs l-d-f realtime 22 n/a 4.921 23 off 6.188 23 on 7.500 Taking out hack-project-variables as a whole similarly emacs h-p-v realtime 23 off 6.079 So it's about 1/2 the slowdown? Then I set vc-handled-backends to nil (not sure that stops vc searching totally, mind): emacs vc-h-b h-p-v realtime 23 off off 5.503 23 off on 7.189 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 15:19 ` David De La Harpe Golden @ 2008-10-24 18:42 ` Stefan Monnier 2008-10-24 19:36 ` David De La Harpe Golden 2008-10-24 23:44 ` David De La Harpe Golden 0 siblings, 2 replies; 54+ messages in thread From: Stefan Monnier @ 2008-10-24 18:42 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel >>> Most of the latter is in "hack-project-variables", and most of /that/ is >>> "project-find-settings-file", and most of that is the >>> "locate-dominating-file" walk. >> locate-dominating-file (or rather some equivalent code) is also used in >> VC to detect the revision control system used for the file. >> It's actually used 5 times there (once each for Bzr Git Hg Mtn Arch), so >> are you sure only the one in project-find-settings-file costs us >> the slowdown? > Not all of it, but it seems to be significant. > taking out locate-dominating-file with: > (defun locate-dominating-file (file regexp) nil) > runs just now (one after the other, no reboot, so probably > from OS cache anyway) > emacs l-d-f realtime > 22 n/a 4.921 > 23 off 6.188 > 23 on 7.500 > Taking out hack-project-variables as a whole similarly > emacs h-p-v realtime > 23 off 6.079 > So it's about 1/2 the slowdown? > Then I set vc-handled-backends to nil (not sure that stops > vc searching totally, mind): > emacs vc-h-b h-p-v realtime > 23 off off 5.503 > 23 off on 7.189 Setting vc-handled-backends to nil should indeed stop VC from doing those directory walks. So now I don't understand why the walks done by VC are so much cheaper than the ones done by locate-dominating-file. Could it be that all the files you opened were under CVS control (so the VC search stops before having to walk up the directories)? Stefan ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 18:42 ` Stefan Monnier @ 2008-10-24 19:36 ` David De La Harpe Golden 2008-10-24 23:44 ` David De La Harpe Golden 1 sibling, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 19:36 UTC (permalink / raw) To: Stefan Monnier; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel Stefan Monnier wrote: > Could it be that all the files you opened were under CVS control (so > the VC search stops before having to walk up the directories)? > That sounded quite plausible - seeing as I was testing in an emacs CVS source tree checkout and all. Though it was only in /usr/local/src/emacs - and /usr/local is the same fs as / on my desktop. So I redid in the emacs-22.3 expanded source tarball (no ./CVS ?) in /usr/local/src/emacs-22-3 (187 .c files this time) hack-project-variables vc-handled-backends emacs vc-h-b h-p-v realtime 23 off off 5.959 23 off on 7.629 23 on off 5.916 23 on on 7.720 Er. Maybe I should use a bigger corpus... - so, did all .el files (1108 files). emacs vc-h-b h-p-v realtime 23 off off 21.170 23 off on 36.346 23 on off 23.510 23 on on 38.566 ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 18:42 ` Stefan Monnier 2008-10-24 19:36 ` David De La Harpe Golden @ 2008-10-24 23:44 ` David De La Harpe Golden 2008-10-25 15:19 ` Stefan Monnier 1 sibling, 1 reply; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-24 23:44 UTC (permalink / raw) To: Stefan Monnier; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel [-- Attachment #1: Type: text/plain, Size: 2599 bytes --] Stefan Monnier wrote: > > Setting vc-handled-backends to nil should indeed stop VC from doing > those directory walks. So now I don't understand why the walks done by > VC are so much cheaper than the ones done by locate-dominating-file. > Could it be that all the files you opened were under CVS control (so > the VC search stops before having to walk up the directories)? > > Eventually found vc-find-root. So - it versus locate-dominating-file ? While they're doing a fairly similar job, they do look to me like they're implemented importantly differently -locate-dominating-file takes a regex and passes it to directory-files for each directory. AFAICS directory-files scans the whole directory each time through for the match. OTOH, vc-find-root just tests if /path/to/directory/witness exists. The former is rather slower and (I think) consier. I'm not sure that there's any real performance problem with directory-files itself for what it actually does, though maybe it could be made faster. Maybe not worthwhile though - easier to rewrite locate-dominating-file to not use it as below... Profiling says locate-dominating-file is spending most all its time in directory-files trying that doomed match again and again... find-file-noselect 1108 48.279532999 0.0435735857 find-file-noselect-1 1108 29.139766999 0.0262994287 after-find-file 1108 26.323623999 0.0237577833 normal-mode 1108 21.492128000 0.0193972274 hack-local-variables 1108 19.570003 0.0176624575 hack-project-variables 1108 19.266695999 0.0173887148 project-find-settings-file 1108 19.254854999 0.0173780279 locate-dominating-file 1108 19.237415000 0.0173622879 directory-files 4152 18.688168999 0.0045010040 So is locate-dominating-file's regex-matching really necessary in project-find-settings-file? The only call to locate-dominating-file I can see is it just searching for a (hardcoded name) ".dir.settings.el" in project-find-settings-file, so vc-find-root's rather simpler witness technique would work just fine? +++ And indeed, attached patch makes emacs23 1108-file-startup rather more competitive with emacs22 on my system. Though I didn't do much testing to see if project settings functionality was 100% a-okay - though it seemed to pick up a /usr/local/src/emacs-22.3/.dir-settings.el I made okay... emacs patch withsettings realtime 22 n/a n/a 22.853 23 no no 38.518 23 no yes 38.729 23 yes no 23.295 23 yes yes 23.340 [-- Attachment #2: emacs-faster-locate-dominating-file.diff --] [-- Type: text/x-patch, Size: 4135 bytes --] Index: lisp/files.el =================================================================== RCS file: /sources/emacs/emacs/lisp/files.el,v retrieving revision 1.1005 diff -U 8 -r1.1005 files.el --- lisp/files.el 18 Oct 2008 18:40:25 -0000 1.1005 +++ lisp/files.el 24 Oct 2008 23:37:19 -0000 @@ -711,18 +711,59 @@ (defun locate-file-completion (string path-and-suffixes action) "Do completion for file names passed to `locate-file'. PATH-AND-SUFFIXES is a pair of lists, (DIRECTORIES . SUFFIXES)." (locate-file-completion-table (car path-and-suffixes) (cdr path-and-suffixes) string nil action)) (make-obsolete 'locate-file-completion 'locate-file-completion-table "23.1") -(defun locate-dominating-file (file regexp) - "Look up the directory hierarchy from FILE for a file matching REGEXP." +(defun locate-dominating-file (file name) + "Look up the directory hierarchy from FILE for a file named NAME. +If found, return the file named NAME's full name and path, otherwise +return nil. See locate-dominating-file-by-regexp if you have more +complex requirements than a simple whole-string match on the name, +though beware it is slower." + ;; copied from vc-find-root, then changed to return file + ;; rather than containing dir. + ;; Represent /home/luser/foo as ~/foo so that we don't try to look for + ;; witnesses in /home or in /. + (setq file (abbreviate-file-name file)) + (let ((root nil) + (prev-file file) + ;; `user' is not initialized outside the loop because + ;; `file' may not exist, so we may have to walk up part of the + ;; hierarchy before we find the "initial UID". + (user nil) + try) + (while (not (or root + (null file) + ;; As a heuristic, we stop looking up the hierarchy of + ;; directories as soon as we find a directory belonging + ;; to another user. This should save us from looking in + ;; things like /net and /afs. This assumes that all the + ;; files inside a project belong to the same user. + (let ((prev-user user)) + (setq user (nth 2 (file-attributes file))) + (and prev-user (not (equal user prev-user)))) + (string-match + ;; from vc-ignore-dir-regexp ! + "\\`\\(?:[\\/][\\/]\\|/\\(?:net\\|afs\\|\\.\\.\\.\\)/\\)\\'" + file))) + (setq try (file-exists-p (expand-file-name name file))) + (cond (try (setq root file)) + ((equal file (setq prev-file file + file (file-name-directory + (directory-file-name file)))) + (setq file nil)))) + (when root (expand-file-name name root)))) + +(defun locate-dominating-file-by-regexp (file regexp) + "Look up the directory hierarchy from FILE for a file matching REGEXP. +This function is slower than `locate-dominating-file', only use if necessary." (catch 'found ;; `user' is not initialized yet because `file' may not exist, so we may ;; have to walk up part of the hierarchy before we find the "initial UID". (let ((user nil) ;; Abbreviate, so as to stop when we cross ~/. (dir (abbreviate-file-name (file-name-as-directory file))) files) (while (and dir @@ -3154,17 +3195,17 @@ (defun project-find-settings-file (file) "Find the settings file for FILE. This searches upward in the directory tree. If a settings file is found, the file name is returned. If the file is in a registered project, a cons from `project-directory-alist' is returned. Otherwise this returns nil." (setq file (expand-file-name file)) - (let* ((settings (locate-dominating-file file "\\`\\.dir-settings\\.el\\'")) + (let* ((settings (locate-dominating-file file ".dir-settings.el")) (pda nil)) ;; `locate-dominating-file' may have abbreviated the name. (if settings (setq settings (expand-file-name settings))) (dolist (x project-directory-alist) (when (and (eq t (compare-strings file nil (length (car x)) (car x) nil nil)) (> (length (car x)) (length (car pda)))) (setq pda x))) ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 23:44 ` David De La Harpe Golden @ 2008-10-25 15:19 ` Stefan Monnier 2008-10-25 17:02 ` David De La Harpe Golden 0 siblings, 1 reply; 54+ messages in thread From: Stefan Monnier @ 2008-10-25 15:19 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel >> Setting vc-handled-backends to nil should indeed stop VC from doing >> those directory walks. So now I don't understand why the walks done by >> VC are so much cheaper than the ones done by locate-dominating-file. >> Could it be that all the files you opened were under CVS control (so >> the VC search stops before having to walk up the directories)? > Eventually found vc-find-root. So - it versus locate-dominating-file ? > While they're doing a fairly similar job, they do look to me like they're > implemented importantly differently -locate-dominating-file takes a regex > and passes it to directory-files for each directory. AFAICS directory-files > scans the whole directory each time through for the match. OTOH, > vc-find-root just tests if /path/to/directory/witness exists. The former is > rather slower and (I think) consier. I'm not sure that there's any real > performance problem with directory-files itself for what it actually does, > though maybe it could be made faster. Maybe not worthwhile though - easier > to rewrite locate-dominating-file to not use it as below... Thanks for you investigative work. locate-dominating-file used a regexp for searches for multiple files (e.g. I intended to merge the N calls to vc-find-root into a single call to locate-dominating-file), but from your measurements, it seems that unless we're searching for an open-ended set of files we're better off with multiple calls to vc-find-root, so I think we should indeed change locate-dominating-file to use a fixed name. This will also have the advantage that we should be able to use it directory for VC and hence get rid of vc-find-root. I've installed a change which should do just that. Stefan ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-25 15:19 ` Stefan Monnier @ 2008-10-25 17:02 ` David De La Harpe Golden 0 siblings, 0 replies; 54+ messages in thread From: David De La Harpe Golden @ 2008-10-25 17:02 UTC (permalink / raw) To: Stefan Monnier; +Cc: acm, Eli Zaretskii, Lennart Borgman, emacs-devel Stefan Monnier wrote: > Thanks for you investigative work. You're welcome! It should be stressed they were results from my system, of course other systems and OSes may have quite different characteristics and performance problems (as we see with w32). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-24 0:13 ` David De La Harpe Golden ` (2 preceding siblings ...) 2008-10-24 4:13 ` Stefan Monnier @ 2008-10-24 9:52 ` Eli Zaretskii 3 siblings, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 9:52 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, lennart.borgman, monnier, emacs-devel > Date: Fri, 24 Oct 2008 01:13:42 +0100 > From: David De La Harpe Golden <david@harpegolden.net> > CC: Eli Zaretskii <eliz@gnu.org>, acm@muc.de, monnier@iro.umontreal.ca, > emacs-devel@gnu.org > > +++ Wasn't the project functionality (.dir-settings.el variable > settings) new in emacs23? Yes, it's new in Emacs 23. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 23:12 ` Lennart Borgman 2008-10-23 23:54 ` Lennart Borgman 2008-10-24 0:13 ` David De La Harpe Golden @ 2008-10-24 9:35 ` Eli Zaretskii 2 siblings, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 9:35 UTC (permalink / raw) To: Lennart Borgman; +Cc: acm, emacs-devel, monnier, david > Date: Fri, 24 Oct 2008 01:12:12 +0200 > From: "Lennart Borgman" <lennart.borgman@gmail.com> > Cc: "Eli Zaretskii" <eliz@gnu.org>, acm@muc.de, monnier@iro.umontreal.ca, > emacs-devel@gnu.org > > at the end of `find-file-noselect-1') there are some calls to > `file-attributes'. Are they perhaps involved? Set w32-get-true-file-attributes to nil and see if you see any dramatic changes. If not, file-attributes is probably not the hot spot. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 22:47 ` David De La Harpe Golden 2008-10-23 23:12 ` Lennart Borgman @ 2008-10-24 9:30 ` Eli Zaretskii 1 sibling, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-24 9:30 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: acm, monnier, emacs-devel > Date: Thu, 23 Oct 2008 23:47:51 +0100 > From: David De La Harpe Golden <david@harpegolden.net> > CC: acm@muc.de, monnier@iro.umontreal.ca, emacs-devel@gnu.org > > Haven't got to that that - however, insert-file-contents may only > account for < 10% of the total time spent in find-file-noselect-1, at > least according to the elp profiler. Though it may not work right at all > on C functions? (note doubled call count) - However, I then wrapped the > insert-file-contents call in find-file-noselect-1 in an elisp helper > function (find-file-noselect-1-h below) and got a quasi-consistent > figure for it, see [1] below for results, suggesting it may really be > that small? How do these measurements compare with Emacs 22? > [Aside: Also turns out upping gc-cons-threshold shaves 2 secs off that 7 > sec time for 180 files. Just maybe opening a bunch of files one after > the other causes the memory usage to grow rapidly, causing the gc to > kick in... so that's one, though probably fairly necessary, slowdown] Can you try to find out who does so much consing that triggers GC? And how does this compare with Emacs 22? TIA ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 16:46 ` David De La Harpe Golden 2008-10-22 21:12 ` Alan Mackenzie @ 2008-10-23 1:29 ` Miles Bader 2008-10-23 9:06 ` Alan Mackenzie 1 sibling, 1 reply; 54+ messages in thread From: Miles Bader @ 2008-10-23 1:29 UTC (permalink / raw) To: David De La Harpe Golden; +Cc: Alan Mackenzie, Stefan Monnier, emacs-devel David De La Harpe Golden <david@harpegolden.net> writes: > FWIW, I'd find your emacs22 time pretty unacceptable, never mind the > emacs23 one, even on a 1.2GHz-class machine. Are a lot of people ... > On my admittedly higher-end newish multicore (but each core is only ~ > 2GHz and emacs isn't parallelized...) gnu+linux system, emacs23 takes 1 > to 2 seconds to start Note that he was including the time to load his "well-padded desktop", and in my experience this greatly increases startup time. Obviously it would be nice to see a more precise definition of what exactly is being measured... -Miles -- `Suppose Korea goes to the World Cup final against Japan and wins,' Moon said. `All the past could be forgiven.' [NYT] ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-23 1:29 ` Miles Bader @ 2008-10-23 9:06 ` Alan Mackenzie 0 siblings, 0 replies; 54+ messages in thread From: Alan Mackenzie @ 2008-10-23 9:06 UTC (permalink / raw) To: Miles Bader; +Cc: emacs-devel, Stefan Monnier, David De La Harpe Golden Hi, Miles, On Thu, Oct 23, 2008 at 10:29:45AM +0900, Miles Bader wrote: > David De La Harpe Golden <david@harpegolden.net> writes: > > FWIW, I'd find your emacs22 time pretty unacceptable, never mind the > > emacs23 one, even on a 1.2GHz-class machine. Are a lot of people > ... > > On my admittedly higher-end newish multicore (but each core is only ~ > > 2GHz and emacs isn't parallelized...) gnu+linux system, emacs23 takes 1 > > to 2 seconds to start > Note that he was including the time to load his "well-padded desktop", > and in my experience this greatly increases startup time. > Obviously it would be nice to see a more precise definition of what > exactly is being measured... Fair enough. Here's a copy of my C-x C-b immediately after starting Emacs: . debian.README 162755 Text ~/debian.README % *info*<2> 299364 Info (elisp)Version Info desktop.el 49601 Emacs-Lisp ~/emacs/emacs/lisp/desktop.el .emacs 40647 Emacs-Lisp ~/.emacs emacs.README 180026 Text ~/emacs.README regression_in_emacs.: 7280 Text ~/regression_in_emacs.txt silly.txt 13 Text ~/silly.txt simple.el 250115 Emacs-Lisp ~/emacs/emacs/lisp/simple.el ChangeLog<2> 546098 Change Log ~/emacs/emacs/lisp/ChangeLog % ielm.el.gz 22075 Emacs-Lisp /usr/local/share/emacs/22.3/lisp/ielm.el.gz % simple.el~ 249554 Emacs-Lisp ~/emacs/emacs/lisp/simple.el~ % simple.el.gz 222164 Emacs-Lisp /usr/local/share/emacs/22.3/lisp/simple.el.gz cc-mode.acm 1038609 Text ~/cc-mode-5.31/cc-mode.acm undo.c 22165 C/l ~/emacs/emacs/src/undo.c icicles.el 41928 Emacs-Lisp ~/icicles/icicles.el ChangeLog 568800 Change Log ~/emacs/emacs/src/ChangeLog cc-mode.el 62702 Emacs-Lisp ~/cc-mode-5.31.n/cc-mode.el king-bishop.el 3684 Emacs-Lisp ~/king-bishop.el site-start.el 13092 Emacs-Lisp /usr/local/share/emacs/site-lisp/site-start.el colascione.c 5 C/l ~/colascione.c insdel.c 68847 C/l /usr/src/emacs-22.3/src/insdel.c test.c 7426 C/l ~/mkcfg/test.c cc-cmds.201008.el.: 323961 Fundamental ~/cc-mode-5.31.n/cc-cmds.201008.el.annotate cc-cmds.el 160568 Emacs-Lisp ~/cc-mode-5.31.n/cc-cmds.el % *info*<4> 299949 Info (cvs)annotate options editfns.c 141738 C/l /usr/src/emacs-22.3/src/editfns.c asdf.txt 3814 Text ~/asdf.txt cc-styles.el 23875 Emacs-Lisp ~/cc-mode-5.31.n/cc-styles.el asdf 62 Fundamental ~/asdf cc-engine.el 353245 Emacs-Lisp ~/cc-mode-5.31.n/cc-engine.el 000tests.el 41417 Emacs-Lisp ~/cc-mode-5.31.n/tests/000tests.el rauhamaa.java 11303 Java/l ~/rauhamaa.java cc-langs.el 123362 Emacs-Lisp ~/cc-mode-5.31.n/cc-langs.el % cc-langs.191008.el.di: 941 Diff ~/cc-mode-5.31.n/cc-langs.191008.el.diff % *info*<3> 271710 Info (emacs)Key Index % manual.txt.gz 294781 Text /usr/share/doc/mutt/manual.txt.gz szmek.java 5309 Java/l ~/szmek.java bugtracker 6381 Outline ~/emacs/emacs/admin/notes/bugtracker typein.c 539 C/l ~/typein.c spaknik.c 4992 C/l ~/spaknik.c demolition-of-shell.: 3094 Text ~/demolition-of-shell.txt % nicolaescu.c 1157 Diff ~/nicolaescu.c ciolfi.c 1555 C/l ~/ciolfi.c cc-defs.el 78928 Emacs-Lisp ~/cc-mode-5.31.n/cc-defs.el cc-vars.el 70779 Emacs-Lisp ~/cc-mode-5.31.n/cc-vars.el test-comment-in-macro: 286 C/l ~/test-comment-in-macro.c % *info*<5> 1114311 Info (gcc-3.3)Option Summary hausordnung.txt 6976 Text ~/hausordnung.txt marshall7.cpp 1537 C++/l ~/marshall7.cpp marshalla.cpp 1861 C++/l ~/marshalla.cpp marshall9.cpp 2311 C++/l ~/marshall9.cpp cc-fonts.el 87831 Emacs-Lisp ~/cc-mode-5.31.n/cc-fonts.el templates-6.cc 544 C++/l ~/cc-mode-5.31.n/tests/templates-6.cc yu.cc 162 C++/l ~/yu.cc forehand.cc 1243 C++/l ~/forehand.cc pp-regexp.el 2494 Emacs-Lisp ~/pp-regexp.el cc-bytecomp.el 16241 Emacs-Lisp ~/cc-mode-5.31.n/cc-bytecomp.el README 4657 Fundamental ~/cc-mode-5.31.n/README nontemplate-exprs-1.f: 66 Fundamental ~/cc-mode-5.31.n/tests/nontemplate-exprs-1.face test.c++ 5951 C++/l ~/mkcfg/test.c++ cc-mode.texi 260035 Texinfo ~/cc-mode-5.31.n/cc-mode.texi cc-align.el 46324 Emacs-Lisp ~/cc-mode-5.31.n/cc-align.el cc-awk.el 51144 Emacs-Lisp ~/cc-mode-5.31.n/cc-awk.el .bashrc 4577 Shell-script[bas ~/.bashrc canonic-key-sequence: 4168 Emacs-Lisp ~/canonic-key-sequence.el ghc-6.8.3 208 Shell-script[sh] ~/ghc-6.8.3 sullivan.c 199 C/l ~/sullivan.c update_trunk.sh 6255 Shell-script[bas ~/cc-mode-5.31.n/update_trunk.sh c-syntax-ppss.el 1411 Emacs-Lisp ~/c-syntax-ppss.el % objc-enhance_v6a.pat: 5458 Diff ~/cc-mode-5.31.n/cc-mode-5.31.n.robert6/objc-enhance_v6a.patch uniquify_log.awk 4947 AWK/l ~/uniquify_log.awk todo.txt 44492 Text ~/todo.txt FGM_Lebenslauf_2007-: 8431 Text ~/FGM_Lebenslauf_2007-12-16.txt Adrian-Roberts.25050: 6440 Text ~/Adrian-Roberts.250508.txt jobs.acm 8406 Text ~/jobs.acm testObjCmethodCallAli: 413 ObjC/l ~/cc-mode-5.31.n/cc-mode-5.31.n.robert/testObjCmethodCallAlign.m TODO.txt 1628 Text ~/TODO.txt sullivan.el 1011 Emacs-Lisp ~/sullivan.el test-marshalla.cpp 182 C++/l ~/test-marshalla.cpp test.awk 3057 AWK/l ~/mkcfg/test.awk cc-menus.el 15352 Emacs-Lisp ~/cc-mode-5.31.n/cc-menus.el *scratch* 0 Lisp Interaction * *Messages* 3467 Fundamental TOTALS 81 files; 7801019 bytes. This is not intended to be an intellectual puzzle to work out what I'm working on. :-) > -Miles -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 9:11 Emacs 23.0 is much slower starting than Emacs 22.3 Alan Mackenzie 2008-10-22 13:23 ` Stefan Monnier @ 2008-10-22 18:26 ` Eli Zaretskii 2008-10-22 21:40 ` Alan Mackenzie 2008-10-22 21:02 ` Richard M. Stallman 2 siblings, 1 reply; 54+ messages in thread From: Eli Zaretskii @ 2008-10-22 18:26 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel > Date: Wed, 22 Oct 2008 09:11:36 +0000 > From: Alan Mackenzie <acm@muc.de> > > I have an extremely medium speed processor (Athlon 1.2 GHz) and, at the > moment, a well-padded .emacs.desktop. > > Starting Emacs 22.3 takes 23 seconds. > Starting Emacs 23.0 takes 38 seconds. Is this with -Q? If not, what are numbers with -Q? ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 18:26 ` Eli Zaretskii @ 2008-10-22 21:40 ` Alan Mackenzie 2008-10-22 22:09 ` Eli Zaretskii 0 siblings, 1 reply; 54+ messages in thread From: Alan Mackenzie @ 2008-10-22 21:40 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Hi, Eli! On Wed, Oct 22, 2008 at 08:26:28PM +0200, Eli Zaretskii wrote: > > Date: Wed, 22 Oct 2008 09:11:36 +0000 > > From: Alan Mackenzie <acm@muc.de> > > I have an extremely medium speed processor (Athlon 1.2 GHz) and, at the > > moment, a well-padded .emacs.desktop. > > Starting Emacs 22.3 takes 23 seconds. > > Starting Emacs 23.0 takes 38 seconds. > Is this with -Q? If not, what are numbers with -Q? With -Q: Emacs 22: ~0.4s Emacs 23: ~0.7s Even here, Emacs 23 is noticeably slower. With a one-line .emacs, (desktop-save-mode 1), and starting with --no-site-file, the timing for Emacs 22 was essentially the same (~28s, but I was a bit slow typing 'y' to ~5 prompts for File local variables and hi-lock-mode's fonts). Emacs 23 threw an error after loading ~15 files. The error was "c-define-lang-constant: `c-lang-defconst' must be used in a file", which is one of mine. :-( But the loading of the files seemed just as sluggish. It doesn't seem like it's anything in my .emacs/site-start.el causing the slowness. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 21:40 ` Alan Mackenzie @ 2008-10-22 22:09 ` Eli Zaretskii 0 siblings, 0 replies; 54+ messages in thread From: Eli Zaretskii @ 2008-10-22 22:09 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel > Date: Wed, 22 Oct 2008 21:40:53 +0000 > Cc: emacs-devel@gnu.org > From: Alan Mackenzie <acm@muc.de> > > With -Q: > Emacs 22: ~0.4s > Emacs 23: ~0.7s > > Even here, Emacs 23 is noticeably slower. Only if you assume that the slowdown is multiplicative. But we have no evidence yet that this is the case. In absolute numbers, 0.3 sec is a negligibly small slow-down. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower starting than Emacs 22.3 2008-10-22 9:11 Emacs 23.0 is much slower starting than Emacs 22.3 Alan Mackenzie 2008-10-22 13:23 ` Stefan Monnier 2008-10-22 18:26 ` Eli Zaretskii @ 2008-10-22 21:02 ` Richard M. Stallman 2008-10-24 11:59 ` Emacs 23.0 is much slower than Emacs 22.3. Maybe it's the garbage collector Alan Mackenzie 2 siblings, 1 reply; 54+ messages in thread From: Richard M. Stallman @ 2008-10-22 21:02 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel Emacs 23 thus starts up at about three fifths the speed of 22. This is very noticeable, and not a good thing. How about putting code to record the current time at a few places in startup.el, in both versions? That way you can maybe find out which parts of the code have got slower. ^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: Emacs 23.0 is much slower than Emacs 22.3. Maybe it's the garbage collector. 2008-10-22 21:02 ` Richard M. Stallman @ 2008-10-24 11:59 ` Alan Mackenzie 0 siblings, 0 replies; 54+ messages in thread From: Alan Mackenzie @ 2008-10-24 11:59 UTC (permalink / raw) To: David De La Harpe Golden, Eli Zaretskii, monnier; +Cc: emacs-devel Hi, emacs.devel! On Wed, Oct 22, 2008 at 05:02:57PM -0400, Richard M. Stallman wrote: > Emacs 23 thus starts up at about three fifths the speed of 22. This is > very noticeable, and not a good thing. > > How about putting code to record the current time > at a few places in startup.el, in both versions? > That way you can maybe find out which parts of the code > have got slower. Put the following into time-cons.el: ######################################################################### (let ((c '(0 . 1)) (n 0)) (while (< n 10000000) ; ten million (setq c (cons 0 n)) (setq n (1+ n))) c) ######################################################################### Now run time emacs -Q -batch -l time-cons.el Emacs 22 Emacs 23 real 0m23.603s 0m32.733s user 0m23.523s 0m32.595s sys 0m0.019s 0m0.053s [David: You might want to try 100 million, or even 10^9. :-] Is ten million conses enough to trigger garbage collection? If so, that could be a problematic area. However, the following gave the same timings on both 22 and 23: ######################################################################### (let ((c '(0 . 1)) (n 0)) (while (< n 10000000) ; ten million (setcdr c n) (setq n (1+ n))) c) ######################################################################### -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 54+ messages in thread
end of thread, other threads:[~2008-10-25 17:02 UTC | newest] Thread overview: 54+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-10-22 9:11 Emacs 23.0 is much slower starting than Emacs 22.3 Alan Mackenzie 2008-10-22 13:23 ` Stefan Monnier 2008-10-22 13:55 ` John covici 2008-10-22 15:14 ` Alan Mackenzie 2008-10-22 16:46 ` David De La Harpe Golden 2008-10-22 21:12 ` Alan Mackenzie 2008-10-22 21:19 ` Eli Zaretskii 2008-10-23 9:21 ` Alan Mackenzie 2008-10-23 21:53 ` Eli Zaretskii 2008-10-23 6:53 ` David De La Harpe Golden 2008-10-23 9:09 ` Alan Mackenzie 2008-10-23 16:57 ` David De La Harpe Golden 2008-10-23 21:52 ` Eli Zaretskii 2008-10-23 22:33 ` Lennart Borgman 2008-10-24 9:26 ` Eli Zaretskii 2008-10-23 22:47 ` David De La Harpe Golden 2008-10-23 23:12 ` Lennart Borgman 2008-10-23 23:54 ` Lennart Borgman 2008-10-24 9:51 ` Eli Zaretskii 2008-10-24 13:58 ` David De La Harpe Golden 2008-10-24 15:44 ` Lennart Borgman 2008-10-24 16:24 ` Chong Yidong 2008-10-24 16:48 ` Eli Zaretskii 2008-10-24 16:45 ` David De La Harpe Golden 2008-10-24 16:53 ` Eli Zaretskii 2008-10-25 2:01 ` Richard M. Stallman 2008-10-25 3:38 ` David De La Harpe Golden 2008-10-24 0:13 ` David De La Harpe Golden 2008-10-24 0:59 ` Lennart Borgman 2008-10-24 1:58 ` David De La Harpe Golden 2008-10-24 1:44 ` David De La Harpe Golden 2008-10-24 9:57 ` Eli Zaretskii 2008-10-24 15:00 ` David De La Harpe Golden 2008-10-24 11:21 ` Alan Mackenzie 2008-10-24 14:32 ` David De La Harpe Golden 2008-10-24 19:28 ` Alan Mackenzie 2008-10-24 19:35 ` David De La Harpe Golden 2008-10-24 4:13 ` Stefan Monnier 2008-10-24 15:19 ` David De La Harpe Golden 2008-10-24 18:42 ` Stefan Monnier 2008-10-24 19:36 ` David De La Harpe Golden 2008-10-24 23:44 ` David De La Harpe Golden 2008-10-25 15:19 ` Stefan Monnier 2008-10-25 17:02 ` David De La Harpe Golden 2008-10-24 9:52 ` Eli Zaretskii 2008-10-24 9:35 ` Eli Zaretskii 2008-10-24 9:30 ` Eli Zaretskii 2008-10-23 1:29 ` Miles Bader 2008-10-23 9:06 ` Alan Mackenzie 2008-10-22 18:26 ` Eli Zaretskii 2008-10-22 21:40 ` Alan Mackenzie 2008-10-22 22:09 ` Eli Zaretskii 2008-10-22 21:02 ` Richard M. Stallman 2008-10-24 11:59 ` Emacs 23.0 is much slower than Emacs 22.3. Maybe it's the garbage collector Alan Mackenzie
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.