[Dovecot] v3.0 architecture

pod pod at herald.ox.ac.uk
Wed Jun 3 17:32:51 EEST 2009


Timo Sirainen <tss at iki.fi> writes:

> I do kind of like that idea, but I don't really se how it would be
> practical here, especially if high performance is wanted.

I don't really see why a priori it would be any less performant than any
other particular RPC mechanism.

> 1. I'm not implementing Dovecot to Plan9, so the "filesystem" would  still
> have to be wrapped in some kind of a protocol. I suppose you  could get
> them visible to filesystem using FUSE, but that would still  be
> Linux-only.

I probably didn't explain well enough.  One doesn't need to be
implementing for or on a Plan9 system and there's no need for there to be
any involvement with the OS or kernel's notion of filesystem.

9P is a _wire_ protocol for expressing filesystem hierarchy and I/O on
files and dirs within that filesystem.  I would like to say "think of it
as NFS simplified" but even that will, I suspect, for lots of people draw
with it far too much irrelevant baggage.  It is a perfectly tractable
proposition to implement both 9P servers and clients, e.g. wmii [1],
solely with the assistance of a userland library, e.g. libixp [2].

> 2. Latency over network is pretty high, so a nice clean filesystem  layout
> wouldn't probably be possible without sacrificing performance.  And a
> non-clean layout probably would just make it horrible to use in  all ways.

Agreed, careful design of the layout is rather important.  But, I suggest,
it requires no more or less care than goes into the design of a more
traditional RPC mechanism - how are errors signalled, can more than one
RPC be in flight at any one time, how is data marshalling done, etc.

Using a synthetic filesystem at least provides a layer of abstraction that
might help.  I don't claim it makes it easier - it just provides a layer
in which some of these questions are already answered.  It's an alternate
way to factorise the problem.

> Actually I think even the current lib-storage API won't be low-enough
> latency. Most IMAP commands should be able to be done by sending a  single
> request and then reading responses. Well, I'm not going to  start coding
> this anytime soon.

I'm afraid I am sufficiently unfamiliar with the lib-storage API to
comment on how straightforwardly one might map it to a 9P-using world.

> Anyway, I'm still more concerned about how to implement the client  side
> so that a single process can asynchronously process commands and  handle
> multiple connections, without the code looking awful difficult  to
> understand mess. I think it might be possible with C, but I'm not  aware
> of any existing code that does it as cleanly as synchronous code  looks
> like.

Very valid concerns.  I don't think I am able to offer further insight
though :-(

Please forgive me if I come across as overly evangelistic.  I do not
intend to.  It is an area of personal interest to me and it felt like it
mapped onto your problem nicely.  Thanks for listening.

Footnotes: 
[1]  http://wmii.suckless.org/
[2]  http://libs.suckless.org/libixp


More information about the dovecot mailing list