If you want a faster Kolab, read this.

Bron Gondwana brong at fastmail.fm
Mon Sep 14 18:05:34 EDT 2015


On Tue, Sep 15, 2015, at 07:52, Andrew Morgan wrote:
> Here is a summary of the commands the client issued:
> 
> A0001 STARTTLS

As I said above - be nice to avoid this for traffic to localhost.

> A0002 CAPABILITY

And by avoiding STARTTLS you also avoid the need for this roundtrip.  Cyrus announces the CAPABILITY in the initial banner.

> A0003 ID ("name" "Roundcube" "version" "1.1.2" "php" "5.3.3" "os" "Linux" "command" "/webmail/8d61c34e132a834f/?_task=mail&_action=preview&_uid=11&_mbox=INBOX&_framed=1&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0")

Bah, ID.  This should be issued after authenticating IMHO.  We no longer advertise the capability pre-auth at FastMail, because you're talking to nginx then, and it doesn't understand ID.

> A0004 AUTHENTICATE PLAIN ****** [57]
> A0005 GETMETADATA

What, a raw GETMETADATA with no params?  I guess that's one way to see if it's supported....  but the CAPABILITY command should have said that.

> A0006 LIST ""

This is basically the same as "NAMESPACE" with two params, but with one?  That looks like a bug.

. LIST ""
. BAD Missing required argument to List: mailbox pattern

(against a recently calibtrated reference Cyrus)

So I'm assuming you took liberties copying and pasting?

> A0007 MYRIGHTS

Likewise, missing arguments

> A0008 SELECT Configuration

Should be quick unless it's a really big folder.

> A0009 LSUB "" "*"

Should be quick.

> A0010 LIST "" "*"

Might be expensive depending how many users you have on the server.  We have plans of speeding this up with a reverse ACL index.

> A0011 GETMETADATA Archive (/private/vendor/kolab/folder-type/shared/vendor/kolab/folder-type)

Again, depends how many folders you have and what DB type.  This is a keyed read on annotations.db, so should be O(log N).

> A0012 MYRIGHTS Tasks
> A0013 GETMETADATA Tasks (/private/vendor/kolab/displayname/shared/vendor/kolab/displayname)
> A0014 GETMETADATA Tasks (/private/vendor/kolab/color/shared/vendor/kolab/color)
> A0015 MYRIGHTS Contacts
> A0016 MYRIGHTS "Contacts/Personal Contacts"
> A0017 GETMETADATA Contacts (/private/vendor/kolab/displayname/shared/vendor/kolab/displayname)
> A0018 GETMETADATA "Contacts/Personal Contacts" (/private/vendor/kolab/displayname/shared/vendor/kolab/displayname)
> A0019 GETMETADATA Contacts (/private/vendor/kolab/uniqueid/shared/vendor/cmu/cyrus-imapd/uniqueid/shared/vendor/kolab/uniqueid)
> A0020 GETMETADATA "Contacts/Personal Contacts" (/private/vendor/kolab/uniqueid/shared/vendor/cmu/cyrus-imapd/uniqueid/shared/vendor/kolab/uniqueid)

And so on through all these.

> A0021 SELECT Contacts
> A0022 LOGOUT
> 
> 1-2 seconds for all those commands is pretty damn fast.  I don't know if 
> that generates much disk I/O, but there must be at least a few I/Os 
> required to do that.

It's all going to come down to how much is already mapped into memory.  It's going to be a bit of random IO.  I'd still expect to see it faster than 1-2 seconds on a small account and semi-decent hardware though.

Bron.

-- 
  Bron Gondwana
  brong at fastmail.fm


More information about the Info-cyrus mailing list