Gnus development mailing list
 help / color / mirror / Atom feed
From: Dan Christensen <jdc@uwo.ca>
To: ding@gnus.org
Subject: Re: Improving Gnus speed
Date: Sun, 28 Nov 2010 19:29:33 -0500	[thread overview]
Message-ID: <87vd3h55w2.fsf@uwo.ca> (raw)
In-Reply-To: <871v6el86z.fsf@uwo.ca>

Dan Christensen <jdc@uwo.ca> writes:

> I think caching mainly makes sense for the functions which require
> traversing the thread tree: gnus-thread-sort-by-total-score and
> gnus-thread-sort-by-most-recent-number and -date.  Are there
> any others?  If these tucked away their result when called,
> I imagine there would be a big savings.  Depending on the shape
> of the tree, this would reduce sort key computation time from
> somewhere between O(n log n) and O(n^2) to O(n).

I've done some tests on the threads from a group I have with about 
6500 articles.  It takes about 1.6s to do the sorting step using
gnus-thread-sort-by-most-recent-date, and it turns out that the majority
of the time is taken by converting the dates from the string stored in
the header to an emacs time, i.e. the function gnus-date-get-time (and
what it calls).

Even though that function caches its result, I thought that it might be
worth caching the most-recent-date results too, since they currently
involve traversing all sub-threads of all threads.  But it turns out
that that would barely make any difference, at least for groups of
this size.

Here's how I determined this.  First, I saved the thread tree in a file,
so I could do isolated tests of just the sorting.  

Here's the total time required:

(benchmark-run 1 (gnus-sort-threads threads))
(1.638083 8 0.38992400000000016)  [The first number is the time in seconds.]

Now I get a fresh copy of threads, and do the latest-date computation on
all of the articles, using a maptree function I wrote:

(benchmark-run 1 (maptree (lambda (header) (gnus-date-get-time
					    (mail-header-date header))) 
			  threads))
(1.31202 4 0.2062689999999998)

That's 1.3 of the total 1.6 seconds right there.

If I do that again, without resetting threads, the time goes to near
zero, which shows how effective the caching of the date-conversion
results is:

(0.056382999999999996 0 0.0)

And now if we do the sort after having pre-computed the date-conversion,
it only takes about 0.3s!

(benchmark-run 1 (gnus-sort-threads threads))
(0.299614 1 0.0529029999999997)

The upshot is that about 1.3s is date conversion for each article, the
rest has to do with the latest-date traversal and the actual sorting.

In fact, further tests show that the latest-date sub-thread traversal
barely adds anything.

So there doesn't seem to be much point in adding caching for these
recursively defined sort functions.  To improve the speed here, what
needs to be done is to improve the speed of the date conversion.

Moreover, for me, other stages of preparing the summary buffer take
significantly longer, so it would be worth investigating these.

I should also note that I first did the timings yesterday, and got a
total time of 2.5s (reproducibly).  Then, 24 hours later, in the same
emacs, the total time was almost double that (reproducibly).  So I
started a fresh emacs, and got the times above (1.6s total).  Maybe this
has to do with emacs memory management?  In any case, the effect means
that the time varies by a factor of 3 or more, so tracking this down
would be another good way to speed up Gnus.

Dan




  parent reply	other threads:[~2010-11-29  0:29 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-09 12:35 Francis Moreau
2010-11-09 13:45 ` Didier Verna
2010-11-09 13:55   ` Francis Moreau
2010-11-09 14:00     ` Knut Anders Hatlen
2010-11-09 14:22       ` Steinar Bang
2010-11-09 14:29       ` Francis Moreau
2010-11-09 14:49         ` Richard Riley
2010-11-09 16:37           ` Didier Verna
2010-11-09 16:51             ` Richard Riley
2010-11-09 16:56               ` Steinar Bang
2010-11-09 17:12                 ` Richard Riley
2010-11-09 17:48                   ` Steinar Bang
2010-11-09 18:59                     ` Adam Sjøgren
2010-11-09 19:17                       ` Steinar Bang
2010-11-09 19:06                     ` Richard Riley
2010-11-09 14:49     ` Didier Verna
2010-11-09 15:27       ` Richard Riley
2010-11-09 15:42         ` Francis Moreau
2010-11-09 16:35         ` Didier Verna
2010-11-09 16:49           ` Richard Riley
2010-11-09 19:52           ` Francis Moreau
2010-11-09 20:48             ` Richard Riley
2010-11-09 15:04     ` Adam Sjøgren
2010-11-09 18:55 ` Lars Magne Ingebrigtsen
2010-11-09 19:58   ` Francis Moreau
2010-11-09 21:03     ` Andreas Schwab
2010-11-09 21:49       ` Ted Zlatanov
2010-11-09 22:45         ` Richard Riley
2010-11-10  8:49           ` Francis Moreau
2010-11-10 10:31             ` Francis Moreau
2010-11-10  9:39           ` Julien Danjou
2010-11-10 13:26             ` Ted Zlatanov
2010-11-10 13:28               ` Julien Danjou
2010-11-10 14:12               ` Richard Riley
2010-11-10 17:40                 ` Andreas Schwab
2010-11-10 13:38       ` Francis Moreau
2010-11-09 21:27   ` Lars Magne Ingebrigtsen
2010-11-10 14:16   ` Francis Moreau
2010-11-10 18:20     ` Lars Magne Ingebrigtsen
2010-11-11  8:14       ` Francis Moreau
2010-11-11 18:34         ` Lars Magne Ingebrigtsen
2010-11-11 19:54           ` Francis Moreau
2010-11-14 16:10             ` Lars Magne Ingebrigtsen
2010-11-15  9:40               ` Francis Moreau
2010-11-21  6:02                 ` Lars Magne Ingebrigtsen
2010-11-21 13:54                   ` Francis Moreau
2010-11-21 18:17                     ` Lars Magne Ingebrigtsen
2010-11-21 19:37                       ` Francis Moreau
2010-11-24 22:09                         ` Lars Magne Ingebrigtsen
2010-11-25  7:35                           ` Francis Moreau
2010-11-12 11:11       ` Francis Moreau
2010-11-14 16:11         ` Lars Magne Ingebrigtsen
2010-11-15  9:07           ` Francis Moreau
2010-11-21  5:44             ` Lars Magne Ingebrigtsen
2010-11-21 14:07               ` Francis Moreau
2010-11-10 18:21     ` Lars Magne Ingebrigtsen
2010-11-11  8:22       ` Francis Moreau
2010-11-11 18:33         ` Lars Magne Ingebrigtsen
2010-11-11 19:56           ` Francis Moreau
2010-11-14 16:10             ` Lars Magne Ingebrigtsen
2010-11-12 18:55     ` Dan Christensen
2010-11-12 20:07       ` Francis Moreau
2010-11-12 21:38         ` Dan Christensen
2010-11-13 20:46           ` Francis Moreau
2010-11-14  9:32             ` Francis Moreau
2010-11-29  0:40               ` Dan Christensen
2010-11-29  4:47                 ` Lars Magne Ingebrigtsen
2010-11-29  6:01                   ` Miles Bader
2010-11-29  6:18                     ` Lars Magne Ingebrigtsen
2010-11-29  6:36                       ` Lars Magne Ingebrigtsen
2010-11-29  6:40                       ` Daniel Pittman
2010-11-29  8:27                 ` Francis Moreau
2010-11-29 19:30                   ` Dan Christensen
2010-11-29 20:10                     ` Francis Moreau
2010-11-29 20:23                       ` Dan Christensen
2010-11-29 20:56                         ` Francis Moreau
2010-11-29 21:30                           ` Dan Christensen
2010-12-05 15:01                             ` Lars Magne Ingebrigtsen
2010-12-05 18:05                               ` Dan Christensen
2010-12-05 18:46                                 ` Lars Magne Ingebrigtsen
2010-11-14 16:13             ` Lars Magne Ingebrigtsen
2010-11-15  9:03               ` Francis Moreau
2010-11-21  5:43                 ` Lars Magne Ingebrigtsen
2010-11-21 14:39                   ` Francis Moreau
2010-11-14 16:14           ` Lars Magne Ingebrigtsen
2010-11-14 18:10             ` Dan Christensen
2010-11-14 18:26               ` Lars Magne Ingebrigtsen
2010-11-14 21:27                 ` Dan Christensen
2010-11-21  5:42                   ` Lars Magne Ingebrigtsen
2010-11-21 20:42                     ` Dan Christensen
2010-11-21 21:46                       ` Francis Moreau
2010-11-21 22:52                         ` Dan Christensen
2010-11-22  7:57                           ` Francis Moreau
2010-11-24 22:11                       ` Lars Magne Ingebrigtsen
2010-11-29  0:29                       ` Dan Christensen [this message]
2010-11-29  4:41                         ` Lars Magne Ingebrigtsen
2010-11-29 20:17                           ` Dan Christensen
2010-12-05 15:00                             ` Date parser in C (was: Improving Gnus speed) Lars Magne Ingebrigtsen
2010-12-05 17:27                               ` Andreas Schwab
2010-12-05 17:38                                 ` Date parser in C Lars Magne Ingebrigtsen
2010-11-09 21:47 ` Improving Gnus speed Ted Zlatanov
2010-11-09 22:55   ` Steinar Bang
2010-11-10  4:27 ` Eden Cardim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87vd3h55w2.fsf@uwo.ca \
    --to=jdc@uwo.ca \
    --cc=ding@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).