Maildir vs. BSD MBox Was: Maildir Backup (was: Re: Vergleich Courier Cyrus)

Florian Lohoff flo at rfc822.org
Mon Aug 6 21:16:01 CEST 2007


On Mon, Aug 06, 2007 at 05:00:52PM +0200, Maximilian Wilhelm wrote:
> > Siehe oben
> Widerlegt :)

Was schaetzt du wieviel prozent der User auf dieser Mailingliste sich 
Tivoli geleistet haben ?

> OK, gekauft.
> 
> Wenn ich jetzt aber eine Kosten-Nutzen-Rechnung mache und mir
> überlege, wie oft ich Backup und Restore mache, relativiert sich das
> dann auch wieder (Je nach Backuptool und -strategie).

Nein - Die Frage ist wie lange sich die Firma leisten kann ohne mails zu
sein. Und >24h kann schon ein massiven verlust bedeuten - ist also
inakzeptabel. Bei uns sind 4h schon inakzeptabel.

> Ich denke ich werde aus meinem LKML-Maildir mit atm >= 30.000 Mails
> mal ne mbox machen und mal schauen wie das performed.
> Ich denke, das ist als Testcase schon ganz gut...

Hier der Testcase - Cache cold lesen eines 58000 Mails 350MByte/s LKML 
folders. Testmaschine P4 2.4Ghz, 1GB, Single Disk IDE, ext3 mit 
dir_index enabled.

Um den page cache zu leeren:

	flo at touch:~$ dd if=/dev/zero of=file count=1 bs=1G
	1+0 records in
	1+0 records out
	1073741824 bytes (1.1 GB) copied, 23.7312 seconds, 45.2 MB/s

Lesen des folders - Druecken von Q waerend des lesens:

	flo at touch:~$ time mutt -R -f linux-kernel.200704 

	real    0m15.678s
	user    0m6.532s
	sys     0m1.272s

Hier die groesse:

	flo at touch:~$ ls -la linux-kernel.200704 
	-rw------- 1 flo mways 353973385 2007-08-06 12:01 linux-kernel.200704

Cache hot die wiederholung:
	flo at touch:~$ time mutt -R -f linux-kernel.200704 

	real    0m9.107s
	user    0m6.656s
	sys     0m0.860s

Convertiert zu Maildir
	flo at touch:~$ time mb2md -s linux-kernel.200704 -d linux-kernel.200704.Maildir/
	Converting /home/flo/linux-kernel.200704 to maildir: /home/flo/linux-kernel.200704.Maildir
	Source Mbox is /home/flo/linux-kernel.200704
	Target Maildir is /home/flo/linux-kernel.200704.Maildir 
	58000 messages.


	real    1m11.467s
	user    0m45.607s
	sys     0m8.541s

Hier dann die versuche mit Maildir:
	flo at touch:~$ time mutt -R -f linux-kernel.200704.Maildir/

	real    0m35.741s
	user    0m9.301s
	sys     0m5.344s
	flo at touch:~$ time mutt -R -f linux-kernel.200704.Maildir/

	real    0m15.623s
	user    0m9.061s
	sys     0m2.448s

Backup:
	flo at touch:~$ time tar -cf /scratch/test linux-kernel.200704

	real    0m18.083s
	user    0m0.024s
	sys     0m1.716s

	flo at touch:~$ time tar -cf /scratch/test linux-kernel.200704.Maildir/

	real    12m39.741s
	user    0m0.712s
	sys     0m5.712s

Vergleich:
~350MByte 58000 Messages. 

			Maildir		BSD MBox
	Cache Cold	 35.7s		15.6s
	Cache Hot 	 15.6s		 9.1s
	Backup		759.7s		18.0s

Ich habe die Maildir backup zahlen auch nicht glauben wollen und habe es 2
mal wiederholt. Backup war von /dev/hda nach /dev/hdc d.h. jedesmal war
der writer auf einer anderen platte.

Der Punkt ist das von dem linearen schreiben/erzeugen von allen mails
profitiert Maildir noch mehr als BSD Mbox. Dadurch wird das Disklayout
so das alle inodes, dentrys und Datablocks sehr nah beieinander und damit
guenstig fuer das read-ahead liegen. Ich wuerde erwarten das bei einem
jahrealten filesystem bei dem die files nach und nach erstellt worden sind 
das der vorteil weiter zugunsten von der BSD MBox ausfaellt da diese ab und
an sequentiell komplett geschrieben und damit defragmentiert wird.

Die grundsaetzliche argumentation ist immer - In den letzten 10 Jahren 
hat sich die streaming performance von platten von ~200KByte/s
auf >50MByte/s verbessert. ALso in etwa faktor 25 schneller geworden. 
Im selben zeitraum ist avg Seektime der platten von 50ms auf 8ms
gefallen also auf 1/6tel. 

mbox bedeutet ich nutze die streaming performance von platten und lesen
mehrere mega bis gigabyte sequentiell in den speicher. Bei Maildir
muss ich fuer die Metadaten mehrfach auf der platte seeken. D.h. fuer
einen Seek von ~10ms kann ich 50Mbyte/1000*10 = 500Kbyte in den Speicher
schaufeln.  Bei einer durchschnittlichen Mailgroesse von 4KByte/s habe
ich 125 Mails gelesen bevor im Maildir verfahren der Kopf bei der 2ten
Mail ist (Ausser acht lassend das ich fuer den direntry und die inode
und bei den filesystem noch bei grossen mails die indirekt blocks lesen
muss. Dazu den atime update im inode). Das ganze laesst natuerlich sowas
wie adaptiv read-ahead und inode/dentry caches ausser betracht. Aber
wenn machen wir mal cache-cold betrachtungen bzw man muss immer davon
ausgehen das mein "working set" groesser als mein Hauptspeicher ist.

Das hinzufuegen von "Spindles" d.h. dem raiden des storage ist auch fuer
diesen vergleich irrelevant da beim hinzufuegen einer platte sich die
anzahl der koepfe verdoppelt d.h. die seekzeit statistisch halbiert,
jedoch die streaming performance sich auch verdoppelt.

D.h. meine worst case betrachtung bei Maildir ist das ich den dentry
lesen muss, dann den inode, dann einen indirect block und dann die mail.
D.h. 3 seeks fuer die erste mail. Mit read-ahead habe ich dann den
dentry und die inodes der naechsten mails schon dabei.

Natuerlich ist das fuer den entwickler viel einfach weil man sich um
viele dinge wie mail flags, delete etc keine sorgen machen muss. Alle
metainformationen die im filename d.h. im dentry abgelegt sind, und
damit lockfrei veraendert werden koennen.

Und mit weiterer entwicklung von Festplatten wird die kluft immer
groesser werden, daher empfinde ich Maildir einfach als rueckstaendig,
und als ausdruck der faulheit der programmierer.

Flo
-- 
Florian Lohoff                  flo at rfc822.org             +49-171-2280134
	Those who would give up a little freedom to get a little 
          security shall soon have neither - Benjamin Franklin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lug-owl.de/pipermail/linux/attachments/20070806/4362ff00/attachment.sig>


More information about the Linux mailing list