* Hideously slow VC status queries fixed
@ 2007-12-27 0:11 Eric S. Raymond
2007-12-27 1:27 ` Tom Tromey
` (2 more replies)
0 siblings, 3 replies; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-27 0:11 UTC (permalink / raw)
To: emacs-devel
It gives me great pleasure to be able to announce that I have found,
and fixed, the bug that made C-x v d so godawful much slower than the
underlying commands.
This one was a truly classic collision of blunders. It should be a
warning to us all about the perils of the expedient local hack.
When I originally wrote VC mode back in the dark and backward abysm of
time, it was for RCS and SCCS. Back then there was no dir-state hook;
vc-dired-hook queried the version-control status of each file named in
the VC-dired buffer individually. This performed acceptably because
code directories averaged far smaller then.
Whoever wrote the first dir-state hook (probably for CVS) blundered
badly by making the most conservative possible modification to
vc-dired. That unknown hacker, may his name be accursed, used
dir-state *only for subdirectories*; the status of all files in
default-directory was still queried one at a time. He carefully wrote
the dir-state hook to use "status -l", not recursing down
subdirectories, because he gathered all the subdirectories by walking
through the dired listing and applied the dir-state method to each
one at a time.
People who wrote backends for later VCSes followed suit, so focused
on getting their backends minimally working that they failed to notice
that the upper-level logic was perversely misdesigned.
And this threw away a lot of data; most of the later back ends are
like SVN in there's no way to tell the status command not to recurse
down directories. So the status information for the *entire file
tree* would get queried and parsed as many times as there were
non-excluded directory nodes in the tree.
Gaaaahhhhh...no *wonder* it was slower than a snail on Quaaludes!
All I did to fix this was notice that you *want* dir-state hook to
recurse down directory tries -- and then call it exactly once on
default-directory. Most of the fix consisted of removing options
to suppress the recursion and documenting the new expected behavior
of dir-state.
Someone should have noticed this a lot sooner.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
What, then is law [government]? It is the collective organization of
the individual right to lawful defense."
-- Frederic Bastiat, "The Law"
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 0:11 Hideously slow VC status queries fixed Eric S. Raymond
@ 2007-12-27 1:27 ` Tom Tromey
2007-12-27 2:19 ` Eric S. Raymond
2007-12-27 18:24 ` Richard Stallman
2007-12-27 2:41 ` Dan Nicolaescu
2007-12-29 7:34 ` Stefan Monnier
2 siblings, 2 replies; 23+ messages in thread
From: Tom Tromey @ 2007-12-27 1:27 UTC (permalink / raw)
To: Eric S. Raymond; +Cc: emacs-devel
>>>>> "Eric" == Eric S Raymond <esr@snark.thyrsus.com> writes:
Eric> It gives me great pleasure to be able to announce that I have found,
Eric> and fixed, the bug that made C-x v d so godawful much slower than the
Eric> underlying commands.
Nice. The speed of vc-dired is one reason I'm still using pcl-cvs
(and the un-bundled psvn) for everything.
I optimistically tried the new vc-dired on my killer test case: gcc.
I didn't try the whole trunk (since that is just way too big), but I
tried on 'trunk/gcc' -- unlike running on the whole trunk, this is a
reasonable thing to want to do since most hacking takes place here.
After a few minutes I got this:
Warning (undo): Buffer `gcc' undo info was 3023389 bytes long.
The undo info was discarded because it exceeded `undo-outer-limit'.
At that point I interrupted it.
'svn status' in gcc/trunk takes less than a second (when warm -- true
in both these tests). 'svn status -v' takes 12 seconds when printing
to gnome-terminal, less than 2 seconds when printing to 'wc'.
I don't know whether vc-dired is expected to scale to a working
directory with 26,499 files underneath it. I sure wish it would :-).
FWIW neither pcl-cvs nor psvn handles this case very well either (the
psvn author helpfully provided some ideas for tweaking it, which I
haven't attempted yet).
Tom
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 1:27 ` Tom Tromey
@ 2007-12-27 2:19 ` Eric S. Raymond
2007-12-27 18:24 ` Richard Stallman
2007-12-29 19:18 ` Tom Tromey
2007-12-27 18:24 ` Richard Stallman
1 sibling, 2 replies; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-27 2:19 UTC (permalink / raw)
To: Tom Tromey; +Cc: Eric S. Raymond, emacs-devel
Tom Tromey <tromey@redhat.com>:
> Eric> It gives me great pleasure to be able to announce that I have found,
> Eric> and fixed, the bug that made C-x v d so godawful much slower than the
> Eric> underlying commands.
>
> Nice. The speed of vc-dired is one reason I'm still using pcl-cvs
> (and the un-bundled psvn) for everything.
>
> I optimistically tried the new vc-dired on my killer test case: gcc.
> I didn't try the whole trunk (since that is just way too big), but I
> tried on 'trunk/gcc' -- unlike running on the whole trunk, this is a
> reasonable thing to want to do since most hacking takes place here.
>
> After a few minutes I got this:
>
> Warning (undo): Buffer `gcc' undo info was 3023389 bytes long.
> The undo info was discarded because it exceeded `undo-outer-limit'.
Yeah. What's clearly happening there is that it's generating a
*monstar* status listing recursing down all those directories. The
resulting output is big enough to strain Emacs's innards. There ain't
much I, as a mode author, can do about that.
> I don't know whether vc-dired is expected to scale to a working
> directory with 26,499 files underneath it. I sure wish it would :-).
vc-dired will scale as well as Emacs scales (he said, a bit evasively.)
I don't think the bottlneck is VC anymore. In the normal cases (CVS,
SVN, Mercurial), VC now generates just one (1) command. I suppose
parsing time could be an issue -- has anyone profiled 26,499 regexp
matches lately ?
I know this: C-x v l is now *fast* on normal-sized SVN, CVS, and Mercurial
directories. It sure wasn't before.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 0:11 Hideously slow VC status queries fixed Eric S. Raymond
2007-12-27 1:27 ` Tom Tromey
@ 2007-12-27 2:41 ` Dan Nicolaescu
2007-12-27 6:13 ` Alexandru Harsanyi
2007-12-27 13:21 ` Eric S. Raymond
2007-12-29 7:34 ` Stefan Monnier
2 siblings, 2 replies; 23+ messages in thread
From: Dan Nicolaescu @ 2007-12-27 2:41 UTC (permalink / raw)
To: Eric S. Raymond; +Cc: emacs-devel
"Eric S. Raymond" <esr@snark.thyrsus.com> writes:
> It gives me great pleasure to be able to announce that I have found,
> and fixed, the bug that made C-x v d so godawful much slower than the
> underlying commands.
Thank you so much for doing this!
There's still one source of inefficiency: files that are not vc-registered
at all. For example object files in a build tree.
Try this:
cd emacs/lisp/term (because it is a small subdir)
for FF in `seq 1 1000`; do touch obj${FF}.o; done
(just create 1000 .o files)
emacs -q
M-x elp-instrument-package RET vc RET
C-x v d emacs/lisp/term RET
M-x elp-results RET
That will show 1000 calls to vc-bzr-registered, vc-git-registered,
vc-arch-registered, vc-svn-registered etc etc.
Another issue with vc-dired is that it does not show files that are not
registered and not ignored. So one cannot select the non-registered
files and register them in one shot...
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 2:41 ` Dan Nicolaescu
@ 2007-12-27 6:13 ` Alexandru Harsanyi
2007-12-27 13:21 ` Eric S. Raymond
1 sibling, 0 replies; 23+ messages in thread
From: Alexandru Harsanyi @ 2007-12-27 6:13 UTC (permalink / raw)
To: Emacs Devel
On 27 Dec 2007, at 11:41 AM, Dan Nicolaescu wrote:
> "Eric S. Raymond" <esr@snark.thyrsus.com> writes:
>
>> It gives me great pleasure to be able to announce that I have found,
>> and fixed, the bug that made C-x v d so godawful much slower than the
>> underlying commands.
>
> Thank you so much for doing this!
>
> There's still one source of inefficiency: files that are not vc-
> registered
> at all. For example object files in a build tree.
>
> Try this:
>
> cd emacs/lisp/term (because it is a small subdir)
>
> for FF in `seq 1 1000`; do touch obj${FF}.o; done
>
> (just create 1000 .o files)
>
> emacs -q
> M-x elp-instrument-package RET vc RET
> C-x v d emacs/lisp/term RET
> M-x elp-results RET
>
> That will show 1000 calls to vc-bzr-registered, vc-git-registered,
> vc-arch-registered, vc-svn-registered etc etc.
One way to reduce the number of calls is to use the `vc-BACKEND-
responsible-p' functions to determine which backends are responsible
for files in a directory. It will than only call the `vc-BACKEND-
registered' function for the responsible backends only.
The speed of the vc-BACKEND-registered call be improved by having the
`vc-BACKEND-dir-state' function set a property meaning 'not-
registered' for every file that is not registered with that BACKEND.
vc-BACKEND-registered will than check for that property before
invoking the BACKEND command.
Best Regards,
Alex.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 2:41 ` Dan Nicolaescu
2007-12-27 6:13 ` Alexandru Harsanyi
@ 2007-12-27 13:21 ` Eric S. Raymond
2007-12-29 7:40 ` Stefan Monnier
1 sibling, 1 reply; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-27 13:21 UTC (permalink / raw)
To: Dan Nicolaescu; +Cc: Eric S. Raymond, emacs-devel
Dan Nicolaescu <dann@ics.uci.edu>:
> That will show 1000 calls to vc-bzr-registered, vc-git-registered,
> vc-arch-registered, vc-svn-registered etc etc.
That could be sped up by noticing which files would normally be excluded
by dired and using using that information to set an 'excluded
property value. If dir-state did that, all those calls would be avoided
> Another issue with vc-dired is that it does not show files that are not
> registered and not ignored. So one cannot select the non-registered
> files and register them in one shot...
Yes, this has annoyed me. Yes another reason to think about rewriting
vc-state and substantially enriching the repertoire of states it can
pass back.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 1:27 ` Tom Tromey
2007-12-27 2:19 ` Eric S. Raymond
@ 2007-12-27 18:24 ` Richard Stallman
2007-12-28 9:02 ` Eric S. Raymond
1 sibling, 1 reply; 23+ messages in thread
From: Richard Stallman @ 2007-12-27 18:24 UTC (permalink / raw)
To: Tom Tromey; +Cc: esr, emacs-devel
After a few minutes I got this:
Warning (undo): Buffer `gcc' undo info was 3023389 bytes long.
The undo info was discarded because it exceeded `undo-outer-limit'.
This probably means there is some buffer or some operation in which
undo should be turned off entirely. For instance, when vc-dired
fills the buffer with information, it may as well have undo turned
off during that.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 2:19 ` Eric S. Raymond
@ 2007-12-27 18:24 ` Richard Stallman
2007-12-29 19:18 ` Tom Tromey
1 sibling, 0 replies; 23+ messages in thread
From: Richard Stallman @ 2007-12-27 18:24 UTC (permalink / raw)
To: esr; +Cc: tromey, esr, emacs-devel
parsing time could be an issue -- has anyone profiled 26,499 regexp
matches lately ?
The speed of regexp matching depends greatly on the regexp itself.
If that regexp is slow, perhaps there is a much faster way
to parse that data.
Just turning off undo during the initial creation of that buffer's
contents will also speed it up somewhat, but I don't know if that is
significant.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 18:24 ` Richard Stallman
@ 2007-12-28 9:02 ` Eric S. Raymond
2007-12-28 18:46 ` Tom Tromey
0 siblings, 1 reply; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-28 9:02 UTC (permalink / raw)
To: Richard Stallman; +Cc: Tom Tromey, esr, emacs-devel
Richard Stallman <rms@gnu.org>:
> After a few minutes I got this:
>
> Warning (undo): Buffer `gcc' undo info was 3023389 bytes long.
> The undo info was discarded because it exceeded `undo-outer-limit'.
>
> This probably means there is some buffer or some operation in which
> undo should be turned off entirely. For instance, when vc-dired
> fills the buffer with information, it may as well have undo turned
> off during that.
Excellent point. I went and did it.
vc-state and vc-dir-state have been the main performance
bottlenecks in this code from day one. Time spent tuning them
is not wasted.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-28 9:02 ` Eric S. Raymond
@ 2007-12-28 18:46 ` Tom Tromey
2007-12-28 19:36 ` Tom Tromey
0 siblings, 1 reply; 23+ messages in thread
From: Tom Tromey @ 2007-12-28 18:46 UTC (permalink / raw)
To: esr; +Cc: esr, Richard Stallman, emacs-devel
>>>>> "Eric" == Eric S Raymond <esr@thyrsus.com> writes:
>> Warning (undo): Buffer `gcc' undo info was 3023389 bytes long.
>> The undo info was discarded because it exceeded `undo-outer-limit'.
Eric> Excellent point. I went and did it.
I don't think this change has any effect -- AIUI, with-temp-buffer
disables undo in the new buffer by default.
Also, the message mentions the 'gcc' buffer -- I think this is the
vc-dired buffer itself, not the temporary buffer made for the output
of 'svn status'.
I'm not really sure where to disable undo for this... maybe somewhere
in dired.
Tom
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-28 18:46 ` Tom Tromey
@ 2007-12-28 19:36 ` Tom Tromey
0 siblings, 0 replies; 23+ messages in thread
From: Tom Tromey @ 2007-12-28 19:36 UTC (permalink / raw)
To: esr; +Cc: esr, Richard Stallman, emacs-devel
>>>>> "Tom" == Tom Tromey <tromey@redhat.com> writes:
Tom> I'm not really sure where to disable undo for this... maybe
Tom> somewhere in dired.
This patch seems to fix the undo problem. I don't get a message any
more. It doesn't appear to speed up vc-dired, though.
Tom
ChangeLog:
2007-12-28 Tom Tromey <tromey@redhat.com>
* vc.el (vc-dired-hook): Disable undo.
Index: vc.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/vc.el,v
retrieving revision 1.501
diff -u -r1.501 vc.el
--- vc.el 28 Dec 2007 18:16:55 -0000 1.501
+++ vc.el 28 Dec 2007 20:04:59 -0000
@@ -2349,7 +2349,10 @@
(if (and (vc-call-backend backend 'responsible-p default-directory)
(vc-find-backend-function backend 'dir-state))
(vc-call-backend backend 'dir-state default-directory)))
- (let (filename (inhibit-read-only t))
+ (let (filename
+ (inhibit-read-only t)
+ ;; Temporarily disable undo.
+ (buffer-undo-list t))
(goto-char (point-min))
(while (not (eobp))
(cond
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 0:11 Hideously slow VC status queries fixed Eric S. Raymond
2007-12-27 1:27 ` Tom Tromey
2007-12-27 2:41 ` Dan Nicolaescu
@ 2007-12-29 7:34 ` Stefan Monnier
2 siblings, 0 replies; 23+ messages in thread
From: Stefan Monnier @ 2007-12-29 7:34 UTC (permalink / raw)
To: Eric S. Raymond; +Cc: emacs-devel
> People who wrote backends for later VCSes followed suit, so focused
> on getting their backends minimally working that they failed to notice
> that the upper-level logic was perversely misdesigned.
If you read some of the comments in the code or in the relevant
mailing-lists, you'll soon discover that nobody failed to notice
the misdesign.
Thanks for working on fixing it.
Stefan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 13:21 ` Eric S. Raymond
@ 2007-12-29 7:40 ` Stefan Monnier
0 siblings, 0 replies; 23+ messages in thread
From: Stefan Monnier @ 2007-12-29 7:40 UTC (permalink / raw)
To: esr; +Cc: Eric S. Raymond, Dan Nicolaescu, emacs-devel
>> That will show 1000 calls to vc-bzr-registered, vc-git-registered,
>> vc-arch-registered, vc-svn-registered etc etc.
> That could be sped up by noticing which files would normally be excluded
> by dired and using using that information to set an 'excluded
> property value. If dir-state did that, all those calls would be avoided
Doesn't sound right: under PCL-CVS for example I don't need any such
hack. I just look at CVS's `update' output and immediately see which
files are "not ignored and not registered". Many/most backends do that
as well.
So we should add a vc-state "need-register" or somesuch.
Stefan
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-27 2:19 ` Eric S. Raymond
2007-12-27 18:24 ` Richard Stallman
@ 2007-12-29 19:18 ` Tom Tromey
2007-12-29 21:49 ` Eric S. Raymond
1 sibling, 1 reply; 23+ messages in thread
From: Tom Tromey @ 2007-12-29 19:18 UTC (permalink / raw)
To: esr; +Cc: emacs-devel
>>>>> "Eric" == Eric S Raymond <esr@thyrsus.com> writes:
Eric> I don't think the bottlneck is VC anymore. In the normal cases (CVS,
Eric> SVN, Mercurial), VC now generates just one (1) command. I suppose
Eric> parsing time could be an issue -- has anyone profiled 26,499 regexp
Eric> matches lately ?
I looked at this a little bit.
Here's the top of the elp output (any function after this took less
than 1 second elapsed time). I used elp-instrument-package with "vc-"
as the argument (I never used elp before; let me know if I did
something wrong).
Function Name Call Count Elapsed Time Average Time
=================================== ========== ============ ============
vc-call-backend 346 31.258875999 0.0903435722
vc-backend 25650 15.846656999 0.0006178033
vc-registered 34 8.9951210000 0.2645623823
vc-stay-local-p 1 7.837376 7.837376
vc-file-getprop 51331 7.2145619999 0.0001405498
vc-file-setprop 238371 6.6009059999 2.769...e-05
vc-state 25613 2.4212969999 9.453...e-05
Interestingly, vc-svn doesn't show up here at all.
I also looked at this with oprofile. This is interesting too:
samples % image name symbol name
1695163 48.2143 emacs Fbyte_code
295864 8.4150 emacs arithcompare
238998 6.7976 emacs mark_object
Regular expression matching comes in at #13:
31889 0.9070 emacs re_match_2_internal
What this says to me is that we're simply running a lot of plain emacs
lisp, and that regex matching is not a big problem here. (I can send
the whole list if you are interested.)
I wonder if there is a way to do a lot less work. For instance, could
we have VC look only at files that are not 'up-to-date? In my tree
this would mean processing 24 files -- 3 orders of magnitude fewer. I
think this would be a pretty common result for large trees, since it
is rare to have a patch that touches a substantial fraction of gcc.
Thank you for working on this. I appreciate it quite a bit.
Tom
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-29 19:18 ` Tom Tromey
@ 2007-12-29 21:49 ` Eric S. Raymond
2007-12-30 21:54 ` Tom Tromey
0 siblings, 1 reply; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-29 21:49 UTC (permalink / raw)
To: Tom Tromey; +Cc: emacs-devel
Tom Tromey <tromey@redhat.com>:
> What this says to me is that we're simply running a lot of plain emacs
> lisp, and that regex matching is not a big problem here.
That is very valuable information, thank you.
> (I can send
> the whole list if you are interested.)
I'm not. It looks like you're good enough at collecting and
interpreting those numbers that I don't need to be. And, frankly, I
like having someone else do that -- you're likely to spot things I
might miss because I'm not seeing past my assumptions.
I'm going to do another rewrite of vc-dired-hook shortly, and I'd
appreciate it if you'd profile the results and compare those numbers
against the baseline you've established.
> I wonder if there is a way to do a lot less work. For instance, could
> we have VC look only at files that are not 'up-to-date? In my tree
> this would mean processing 24 files -- 3 orders of magnitude fewer. I
> think this would be a pretty common result for large trees, since it
> is rare to have a patch that touches a substantial fraction of gcc.
I think that you are not quite understanding the problem here -- or at
least my assumptions about what constitutes "less work" (while
possibly incorrect) are quite different from yours.
Terminological note: by "the VC status command" I mean "svn status" or
"hg status" or whatever. The thing that VC mode catures output from
and parses.
First, I assume that the time for the underlying VC status command to collect
its information is roughly constant, independent of the verbosity level
of the report. It has to grovel through the same data structures
either way -- its verbosity options only controls what it dumps to
standard out.
Second assumption: to make VC-Dired refresh quickly, the main thing we
need to avoid is lots of client/server round trips -- or, assuming
we're staying local, lots of individual status-command executions.
Either way, this pushes us towards relying on one big report from one
VC status command execution.
By contrast, I think the size of the data returned by the VC status
command, and the parsing time required for VC mode to pull that data
into Lisp-space, is much less significant. Or, to put it a different
way, I'm assuming that the startup latency of the report generator(s)
dominates the total time from the C-x v d keystroke to the display
refresh.
Under these assumption, trying to make the VC status command look at fewer
files doesn't make a lot of sense -- it won't save any executio time,
if assumption #1 is true. And if we don't capture the complete
VC state of the tree during the dir-state call at the beginning of
vc-dired-hook, we're just going to have to do more expensive round
trips later, during the remainder of vc-dired-hook, to get the missing
information. By assumption #2 this would be a big lose.
(In fact it's doing that kind of multiple-round-trip patch-up now, which is
what I hope to eliminate in the upcoming rewrite.)
Your report that regexp-matching time doesn't dominate appears to confirm
my theory. If you can find a way to crunch your profiling data that
separates the latency cost of getting the report from the rest of the
interpretation time, it would be useful to compare the two.
> Thank you for working on this. I appreciate it quite a bit.
You are welcome, and I am in turn grateful for the profiling data.
Since I'm trying to optimize for performance, those numbers are the
most valuable guidance I can have.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-29 21:49 ` Eric S. Raymond
@ 2007-12-30 21:54 ` Tom Tromey
2007-12-31 3:41 ` Eric S. Raymond
0 siblings, 1 reply; 23+ messages in thread
From: Tom Tromey @ 2007-12-30 21:54 UTC (permalink / raw)
To: esr; +Cc: emacs-devel
>>>>> "Eric" == Eric S Raymond <esr@thyrsus.com> writes:
Eric> I'm going to do another rewrite of vc-dired-hook shortly, and I'd
Eric> appreciate it if you'd profile the results and compare those numbers
Eric> against the baseline you've established.
No problem.
>> I wonder if there is a way to do a lot less work. For instance, could
>> we have VC look only at files that are not 'up-to-date? In my tree
>> this would mean processing 24 files -- 3 orders of magnitude fewer. I
>> think this would be a pretty common result for large trees, since it
>> is rare to have a patch that touches a substantial fraction of gcc.
Eric> I think that you are not quite understanding the problem here -- or at
Eric> least my assumptions about what constitutes "less work" (while
Eric> possibly incorrect) are quite different from yours.
Yeah, I'm sure I don't understand :-). More on this below.
Eric> By contrast, I think the size of the data returned by the VC status
Eric> command, and the parsing time required for VC mode to pull that data
Eric> into Lisp-space, is much less significant. Or, to put it a different
Eric> way, I'm assuming that the startup latency of the report generator(s)
Eric> dominates the total time from the C-x v d keystroke to the display
Eric> refresh.
Eric> If you can find a way to crunch your profiling data that
Eric> separates the latency cost of getting the report from the rest
Eric> of the interpretation time, it would be useful to compare the
Eric> two.
I think there is something to this, but it is not the whole picture.
I timed 'svn status -v' on gcc:
opsy. /usr/bin/time svn status -v > /dev/null
0.95user 1.13system 0:16.79elapsed 12%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (37major+6120minor)pagefaults 0swaps
However, this is with a cold cache. With a warm cache it is
dramatically different:
opsy. /usr/bin/time svn status -v > /dev/null
0.90user 0.33system 0:01.28elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+6157minor)pagefaults 0swaps
I also tried it on a much smaller tree I have sitting around:
opsy. /usr/bin/time svn status -v > /dev/null
0.02user 0.04system 0:01.61elapsed 4%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (1major+740minor)pagefaults 0swaps
So we can clearly see here that svn is just a lot slower on a big
tree, at least when cold. This confirms part of your theory.
However, I also tried this:
(let ((zz-s-time (current-time)))
(vc-directory "~/gnu/Trunk/trunk/gcc/" nil)
(time-subtract (current-time) zz-s-time))
This yielded (0 320 260248) with a warm cache -- so I think most of
the time must be in Emacs processing, not in svn. Even with a cold
cache this number would be very bad.
I think what I don't understand is why we run 'svn status -v'. This
will print information about every file. But, why do we need
information about every file? Would it be possible to only deal with
files that aren't "up-to-date", i.e., omit the '-v'? This would seem
to be much more efficient.
That's just an idea though. I also don't understand everything that
is going on in the elp results, like where all those calls to
vc-call-backend come from.
Tom
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-30 21:54 ` Tom Tromey
@ 2007-12-31 3:41 ` Eric S. Raymond
2007-12-31 19:09 ` Tom Tromey
0 siblings, 1 reply; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-31 3:41 UTC (permalink / raw)
To: Tom Tromey; +Cc: emacs-devel
Tom Tromey <tromey@redhat.com>:
> This yielded (0 320 260248) with a warm cache -- so I think most of
> the time must be in Emacs processing, not in svn. Even with a cold
> cache this number would be very bad.
Agreed.
> I think what I don't understand is why we run 'svn status -v'. This
> will print information about every file. But, why do we need
> information about every file? Would it be possible to only deal with
> files that aren't "up-to-date", i.e., omit the '-v'? This would seem
> to be much more efficient.
That will do only when (a) we're in terse mode, and (b) we don't want to
see unregistered files. Otherwise we need -v.
Maybe dir-state should take a verbosity-level argument? I'll look into this.
> That's just an idea though. I also don't understand everything that
> is going on in the elp results, like where all those calls to
> vc-call-backend come from.
I'm pretty sure I know where those are. I expect to remove the line
of code that's generating them soon.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-31 3:41 ` Eric S. Raymond
@ 2007-12-31 19:09 ` Tom Tromey
2007-12-31 20:33 ` Eric S. Raymond
0 siblings, 1 reply; 23+ messages in thread
From: Tom Tromey @ 2007-12-31 19:09 UTC (permalink / raw)
To: esr; +Cc: emacs-devel
>>>>> "Eric" == Eric S Raymond <esr@thyrsus.com> writes:
Eric> That will do only when (a) we're in terse mode, and (b) we don't want to
Eric> see unregistered files. Otherwise we need -v.
Good point. I never remember non-terse mode... but then I haven't
been a heavy vc-dired user, due to speed :)
>> That's just an idea though. I also don't understand everything that
>> is going on in the elp results, like where all those calls to
>> vc-call-backend come from.
Eric> I'm pretty sure I know where those are. I expect to remove the line
Eric> of code that's generating them soon.
Appended is a call-graph profile, thanks to Christian Ohler.
This is pretty interesting.
Tom
Function Name Call Count Elapsed Time Average Time
=================================== ========== ============ ============
vc-registered 363 1435.5771489 3.9547579862
vc-call-backend 376 4531.5646809 12.052033726
<self or not profiled> 376 3089.8385159 8.2176556276
vc-stay-local-p 1 1422.384572 1422.384572
vc-file-setprop 238490 10.425457000 4.371...e-05
vc-sccs-registered 36 2.919531 0.0810980833
vc-default-registered 37 2.2229139999 0.0600787567
vc-hg-registered 36 0.7906200000 0.0219616666
vc-git-registered 36 0.784571 0.0217936388
vc-mcvs-registered 36 0.7820339999 0.0217231666
vc-mtn-registered 36 0.5590209999 0.0155283611
vc-bzr-registered 36 0.3502429999 0.0097289722
vc-arch-registered 36 0.347461 0.0096516944
vc-find-backend-function 6 0.070114 0.0116856666
vc-working-revision 5 0.044984 0.0089968000
vc-state 5 0.044193 0.0088386
vc-file-getprop 34 0.0002640000 7.764...e-06
vc-kill-buffer-hook 35 0.0001860000 5.314...e-06
vc-stay-local-p 1 1422.366707 1422.366707
vc-backend 25667 1787.1615969 0.0696287683
vc-registered 37 1441.2173279 38.951819675
<self or not profiled> 25667 339.20715399 0.0132156915
vc-file-getprop 25668 6.7371149999 0.0002624713
vc-backend 37 1441.2173279 38.951819675
vc-registered 37 1441.2173279 38.951819675
vc-call-backend 363 1435.5771489 3.9547579862
<self or not profiled> 37 5.6396360000 0.1524225945
vc-file-setprop 37 0.000325 8.783...e-06
vc-file-getprop 37 0.0002180000 5.891...e-06
vc-call-backend 1 1422.384572 1422.384572
vc-stay-local-p 1 1422.384572 1422.384572
vc-backend 1 1422.366707 1422.366707
<self or not profiled> 1 0.0178510000 0.0178510000
vc-make-backend-sym 1 1.4e-05 1.4e-05
vc-call-backend 5 0.044193 0.0088386
vc-state 25630 338.47379800 0.0132061567
<self or not profiled> 25630 332.66181800 0.0129793920
vc-file-getprop 25630 5.8119799999 0.0002267647
vc-backend 25668 6.7371149999 0.0002624713
vc-state 25630 5.8119799999 0.0002267647
vc-working-revision 5 0.000611 0.0001222
vc-call-backend 34 0.0002640000 7.764...e-06
vc-registered 37 0.0002180000 5.891...e-06
vc-file-getprop 51374 12.550188000 0.0002442906
<self or not profiled> 51374 12.550188000 0.0002442906
vc-call-backend 238490 10.425457000 4.371...e-05
vc-registered 37 0.000325 8.783...e-06
vc-file-setprop 238527 10.425782000 4.370...e-05
<self or not profiled> 238527 10.425782000 4.370...e-05
vc-sccs-registered 36 2.596495 0.0721248611
vc-call-backend 37 2.2229139999 0.0600787567
vc-default-registered 73 4.819409 0.0660193013
vc-check-master-templates 73 3.312153 0.0453719589
<self or not profiled> 73 1.5062270000 0.0206332465
vc-make-backend-sym 73 0.001029 1.409...e-05
vc-default-registered 73 3.312153 0.0453719589
vc-check-master-templates 73 3.312153 0.0453719589
<self or not profiled> 73 2.980151 0.0408239863
vc-possible-master 219 0.3320019999 0.0015159908
vc-call-backend 36 2.919531 0.0810980833
vc-sccs-registered 36 2.919531 0.0810980833
vc-default-registered 36 2.596495 0.0721248611
<self or not profiled> 36 0.3230360000 0.0089732222
vc-call-backend 36 0.7906200000 0.0219616666
vc-hg-registered 36 0.7906200000 0.0219616666
<self or not profiled> 36 0.7592740000 0.0210909444
vc-find-root 36 0.031346 0.0008707222
vc-call-backend 36 0.784571 0.0217936388
vc-git-registered 36 0.784571 0.0217936388
<self or not profiled> 36 0.752849 0.0209124722
vc-find-root 36 0.031722 0.0008811666
vc-call-backend 36 0.7820339999 0.0217231666
vc-mcvs-registered 36 0.7820339999 0.0217231666
<self or not profiled> 36 0.7508869999 0.0208579722
vc-find-root 36 0.031147 0.0008651944
vc-call-backend 36 0.5590209999 0.0155283611
vc-mtn-registered 36 0.5590209999 0.0155283611
<self or not profiled> 36 0.5279159999 0.0146643333
vc-find-root 36 0.0311050000 0.0008640277
vc-call-backend 36 0.3502429999 0.0097289722
vc-bzr-registered 36 0.3502429999 0.0097289722
<self or not profiled> 36 0.3166469999 0.0087957499
vc-find-root 36 0.0335959999 0.0009332222
vc-call-backend 36 0.347461 0.0096516944
vc-arch-registered 36 0.347461 0.0096516944
<self or not profiled> 36 0.3156090000 0.0087669166
vc-find-root 36 0.0318520000 0.0008847777
vc-check-master-templates 219 0.3320019999 0.0015159908
vc-possible-master 219 0.3320019999 0.0015159908
<self or not profiled> 219 0.3312209999 0.0015124246
vc-sccs-search-project-dir 36 0.000781 2.169...e-05
vc-bzr-registered 36 0.0335959999 0.0009332222
vc-arch-registered 36 0.0318520000 0.0008847777
vc-git-registered 36 0.031722 0.0008811666
vc-hg-registered 36 0.031346 0.0008707222
vc-mcvs-registered 36 0.031147 0.0008651944
vc-mtn-registered 36 0.0311050000 0.0008640277
vc-find-root 216 0.1907680000 0.0008831851
<self or not profiled> 216 0.1907680000 0.0008831851
vc-call-backend 6 0.070114 0.0116856666
vc-find-backend-function 7 0.0788049999 0.0112578571
<self or not profiled> 7 0.0787069999 0.0112438571
vc-make-backend-sym 7 9.8e-05 1.4e-05
vc-call-backend 5 0.044984 0.0089968000
vc-working-revision 5 0.044984 0.0089968000
<self or not profiled> 5 0.044373 0.0088746
vc-file-getprop 5 0.000611 0.0001222
vc-default-registered 73 0.001029 1.409...e-05
vc-find-backend-function 7 9.8e-05 1.4e-05
vc-stay-local-p 1 1.4e-05 1.4e-05
vc-make-backend-sym 81 0.0011409999 1.408...e-05
<self or not profiled> 81 0.0011409999 1.408...e-05
vc-possible-master 36 0.000781 2.169...e-05
vc-sccs-search-project-dir 36 0.000781 2.169...e-05
<self or not profiled> 36 0.000781 2.169...e-05
vc-call-backend 35 0.0001860000 5.314...e-06
vc-kill-buffer-hook 36 0.0001900000 5.277...e-06
<self or not profiled> 36 0.0001900000 5.277...e-06
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-31 19:09 ` Tom Tromey
@ 2007-12-31 20:33 ` Eric S. Raymond
2007-12-31 20:58 ` Dan Nicolaescu
2008-01-01 23:21 ` Tom Tromey
0 siblings, 2 replies; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-31 20:33 UTC (permalink / raw)
To: Tom Tromey; +Cc: emacs-devel
Tom Tromey <tromey@redhat.com>:
> Appended is a call-graph profile, thanks to Christian Ohler.
> This is pretty interesting.
What are you seeing that I'm not? Nothing jumps out at me as
peculiar.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-31 20:33 ` Eric S. Raymond
@ 2007-12-31 20:58 ` Dan Nicolaescu
2007-12-31 21:42 ` Eric S. Raymond
2008-01-01 23:21 ` Tom Tromey
1 sibling, 1 reply; 23+ messages in thread
From: Dan Nicolaescu @ 2007-12-31 20:58 UTC (permalink / raw)
To: esr; +Cc: Tom Tromey, emacs-devel
"Eric S. Raymond" <esr@thyrsus.com> writes:
> Tom Tromey <tromey@redhat.com>:
> > Appended is a call-graph profile, thanks to Christian Ohler.
> > This is pretty interesting.
>
> What are you seeing that I'm not? Nothing jumps out at me as
> peculiar.
Function Name Call Count Elapsed Time Average Time
=================================== ========== ============ ============
vc-registered 363 1435.5771489 3.9547579862
vc-call-backend 376 4531.5646809 12.052033726
<self or not profiled> 376 3089.8385159 8.2176556276
vc-stay-local-p 1 1422.384572 1422.384572
^^^^^^^^
The time here seems to be
too high.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-31 20:58 ` Dan Nicolaescu
@ 2007-12-31 21:42 ` Eric S. Raymond
0 siblings, 0 replies; 23+ messages in thread
From: Eric S. Raymond @ 2007-12-31 21:42 UTC (permalink / raw)
To: Dan Nicolaescu; +Cc: Tom Tromey, emacs-devel
Dan Nicolaescu <dann@ics.uci.edu>:
> "Eric S. Raymond" <esr@thyrsus.com> writes:
>
> > Tom Tromey <tromey@redhat.com>:
> > > Appended is a call-graph profile, thanks to Christian Ohler.
> > > This is pretty interesting.
> >
> > What are you seeing that I'm not? Nothing jumps out at me as
> > peculiar.
>
>
> Function Name Call Count Elapsed Time Average Time
> =================================== ========== ============ ============
> vc-registered 363 1435.5771489 3.9547579862
> vc-call-backend 376 4531.5646809 12.052033726
> <self or not profiled> 376 3089.8385159 8.2176556276
> vc-stay-local-p 1 1422.384572 1422.384572
> ^^^^^^^^
> The time here seems to be
> too high.
Interesting. I'll look into this.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2007-12-31 20:33 ` Eric S. Raymond
2007-12-31 20:58 ` Dan Nicolaescu
@ 2008-01-01 23:21 ` Tom Tromey
2008-01-02 0:19 ` Eric S. Raymond
1 sibling, 1 reply; 23+ messages in thread
From: Tom Tromey @ 2008-01-01 23:21 UTC (permalink / raw)
To: esr; +Cc: emacs-devel
>>>>> "Eric" == Eric S Raymond <esr@thyrsus.com> writes:
Eric> Tom Tromey <tromey@redhat.com>:
>> Appended is a call-graph profile, thanks to Christian Ohler.
>> This is pretty interesting.
Eric> What are you seeing that I'm not? Nothing jumps out at me as
Eric> peculiar.
The vc-registered -> vc-call-backend edge seems particularly bad.
But perhaps I'm misreading this, or we knew it, or this profiler is
giving erroneous results.
BTW, today's VC changes roughly halved the number of calls to
vc-call-backend, but (according to oelp) the elapsed time hasn't
changed much. New profile appended.
Tom
Function Name Call Count Elapsed Time Average Time
=================================== ========== ============ ============
vc-registered 173 1366.0392379 7.8961805664
vc-call-backend 186 4515.3948180 24.276316225
<self or not profiled> 186 3140.0213510 16.881835220
vc-stay-local-p 1 1359.762977 1359.762977
vc-file-setprop 238528 11.230348000 4.708...e-05
vc-default-registered 18 1.501319 0.0834066111
vc-sccs-registered 17 1.4998170000 0.0882245294
vc-git-registered 17 0.3869679999 0.0227628235
vc-mcvs-registered 17 0.175918 0.0103481176
vc-bzr-registered 17 0.166246 0.0097791764
vc-hg-registered 17 0.1651839999 0.0097167058
vc-arch-registered 17 0.1644719999 0.0096748235
vc-mtn-registered 17 0.163277 0.0096045294
vc-find-backend-function 6 0.068498 0.0114163333
vc-state 5 0.0450599999 0.009012
vc-working-revision 5 0.043155 0.008631
vc-file-getprop 15 0.0001360000 9.066...e-06
vc-kill-buffer-hook 16 9.199...e-05 5.749...e-06
vc-stay-local-p 1 1359.745306 1359.745306
vc-state 17 9.137986 0.5375285882
vc-backend 23 1368.9283529 59.518624043
vc-registered 18 1368.5600880 76.031116000
<self or not profiled> 23 0.3674779999 0.0159773043
vc-file-getprop 24 0.000787 3.279...e-05
vc-backend 18 1368.5600880 76.031116000
vc-registered 18 1368.5600880 76.031116000
vc-call-backend 173 1366.0392379 7.8961805664
<self or not profiled> 18 2.5205340000 0.1400296666
vc-file-setprop 18 0.000171 9.5e-06
vc-file-getprop 18 0.000145 8.055...e-06
vc-call-backend 1 1359.762977 1359.762977
vc-stay-local-p 1 1359.762977 1359.762977
vc-backend 1 1359.745306 1359.745306
<self or not profiled> 1 0.0176510000 0.0176510000
vc-make-backend-sym 1 2e-05 2e-05
vc-call-backend 5 0.0450599999 0.009012
vc-state 51291 680.21053799 0.0132617913
<self or not profiled> 51291 658.54704799 0.0128394269
vc-file-getprop 51291 12.525504000 0.0002442047
vc-backend 17 9.137986 0.5375285882
vc-state 51291 12.525504000 0.0002442047
vc-backend 24 0.000787 3.279...e-05
vc-working-revision 5 0.000702 0.0001404
vc-registered 18 0.000145 8.055...e-06
vc-call-backend 15 0.0001360000 9.066...e-06
vc-file-getprop 51353 12.527274000 0.0002439443
<self or not profiled> 51353 12.527274000 0.0002439443
vc-call-backend 238528 11.230348000 4.708...e-05
vc-registered 18 0.000171 9.5e-06
vc-file-setprop 238546 11.230519000 4.707...e-05
<self or not profiled> 238546 11.230519000 4.707...e-05
vc-call-backend 18 1.501319 0.0834066111
vc-sccs-registered 17 1.3520339999 0.0795314117
vc-default-registered 35 2.853353 0.0815243714
vc-check-master-templates 35 2.0015959999 0.0571884571
<self or not profiled> 35 0.8511960000 0.0243198857
vc-make-backend-sym 35 0.0005610000 1.602...e-05
vc-default-registered 35 2.0015959999 0.0571884571
vc-check-master-templates 35 2.0015959999 0.0571884571
<self or not profiled> 35 1.8503919999 0.0528683428
vc-possible-master 105 0.151204 0.0014400380
vc-call-backend 17 1.4998170000 0.0882245294
vc-sccs-registered 17 1.4998170000 0.0882245294
vc-default-registered 17 1.3520339999 0.0795314117
<self or not profiled> 17 0.1477830000 0.0086931176
vc-call-backend 17 0.3869679999 0.0227628235
vc-git-registered 17 0.3869679999 0.0227628235
<self or not profiled> 17 0.3711519999 0.0218324705
vc-find-root 17 0.015816 0.0009303529
vc-call-backend 17 0.175918 0.0103481176
vc-mcvs-registered 17 0.175918 0.0103481176
<self or not profiled> 17 0.1591679999 0.0093628235
vc-find-root 17 0.0167500000 0.0009852941
vc-call-backend 17 0.166246 0.0097791764
vc-bzr-registered 17 0.166246 0.0097791764
<self or not profiled> 17 0.149044 0.0087672941
vc-find-root 17 0.017202 0.0010118823
vc-call-backend 17 0.1651839999 0.0097167058
vc-hg-registered 17 0.1651839999 0.0097167058
<self or not profiled> 17 0.1492689999 0.0087805294
vc-find-root 17 0.015915 0.0009361764
vc-call-backend 17 0.1644719999 0.0096748235
vc-arch-registered 17 0.1644719999 0.0096748235
<self or not profiled> 17 0.1479379999 0.0087022352
vc-find-root 17 0.016534 0.0009725882
vc-call-backend 17 0.163277 0.0096045294
vc-mtn-registered 17 0.163277 0.0096045294
<self or not profiled> 17 0.1464970000 0.0086174705
vc-find-root 17 0.01678 0.0009870588
vc-check-master-templates 105 0.151204 0.0014400380
vc-possible-master 105 0.151204 0.0014400380
<self or not profiled> 105 0.150816 0.0014363428
vc-sccs-search-project-dir 17 0.000388 2.282...e-05
vc-bzr-registered 17 0.017202 0.0010118823
vc-mtn-registered 17 0.01678 0.0009870588
vc-mcvs-registered 17 0.0167500000 0.0009852941
vc-arch-registered 17 0.016534 0.0009725882
vc-hg-registered 17 0.015915 0.0009361764
vc-git-registered 17 0.015816 0.0009303529
vc-find-root 102 0.0989970000 0.0009705588
<self or not profiled> 102 0.0989970000 0.0009705588
vc-call-backend 6 0.068498 0.0114163333
vc-find-backend-function 7 0.076992 0.0109988571
<self or not profiled> 7 0.076893 0.0109847142
vc-make-backend-sym 7 9.900...e-05 1.414...e-05
vc-call-backend 5 0.043155 0.008631
vc-working-revision 5 0.043155 0.008631
<self or not profiled> 5 0.042453 0.0084906
vc-file-getprop 5 0.000702 0.0001404
vc-default-registered 35 0.0005610000 1.602...e-05
vc-find-backend-function 7 9.900...e-05 1.414...e-05
vc-stay-local-p 1 2e-05 2e-05
vc-make-backend-sym 43 0.0006799999 1.581...e-05
<self or not profiled> 43 0.0006799999 1.581...e-05
vc-possible-master 17 0.000388 2.282...e-05
vc-sccs-search-project-dir 17 0.000388 2.282...e-05
<self or not profiled> 17 0.000388 2.282...e-05
vc-call-backend 16 9.199...e-05 5.749...e-06
vc-kill-buffer-hook 17 9.799...e-05 5.764...e-06
<self or not profiled> 17 9.799...e-05 5.764...e-06
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Hideously slow VC status queries fixed
2008-01-01 23:21 ` Tom Tromey
@ 2008-01-02 0:19 ` Eric S. Raymond
0 siblings, 0 replies; 23+ messages in thread
From: Eric S. Raymond @ 2008-01-02 0:19 UTC (permalink / raw)
To: Tom Tromey; +Cc: emacs-devel
Tom Tromey <tromey@redhat.com>:
> The vc-registered -> vc-call-backend edge seems particularly bad.
> But perhaps I'm misreading this, or we knew it, or this profiler is
> giving erroneous results.
Nope, there are structural reasons to think that's a likely hotspot.
I'll see what I can do about eliminating some of those calls.
> BTW, today's VC changes roughly halved the number of calls to
> vc-call-backend, but (according to oelp) the elapsed time hasn't
> changed much. New profile appended.
Dang, I was hoping for more gain than that. VC-Dired does seem
visibly snappier though.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2008-01-02 0:19 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-27 0:11 Hideously slow VC status queries fixed Eric S. Raymond
2007-12-27 1:27 ` Tom Tromey
2007-12-27 2:19 ` Eric S. Raymond
2007-12-27 18:24 ` Richard Stallman
2007-12-29 19:18 ` Tom Tromey
2007-12-29 21:49 ` Eric S. Raymond
2007-12-30 21:54 ` Tom Tromey
2007-12-31 3:41 ` Eric S. Raymond
2007-12-31 19:09 ` Tom Tromey
2007-12-31 20:33 ` Eric S. Raymond
2007-12-31 20:58 ` Dan Nicolaescu
2007-12-31 21:42 ` Eric S. Raymond
2008-01-01 23:21 ` Tom Tromey
2008-01-02 0:19 ` Eric S. Raymond
2007-12-27 18:24 ` Richard Stallman
2007-12-28 9:02 ` Eric S. Raymond
2007-12-28 18:46 ` Tom Tromey
2007-12-28 19:36 ` Tom Tromey
2007-12-27 2:41 ` Dan Nicolaescu
2007-12-27 6:13 ` Alexandru Harsanyi
2007-12-27 13:21 ` Eric S. Raymond
2007-12-29 7:40 ` Stefan Monnier
2007-12-29 7:34 ` Stefan Monnier
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.