[linux-l] FreeBSD und Linux (war: smfs 2GB )

Jan Krueger jk at microgalaxy.net
Mo Sep 8 02:32:15 CEST 2003


On Friday 05 September 2003 00:24, Peter Ross wrote:
> > > Ein Verhaeltnis von fast 1:4 klingt allerdings nicht gut, da muss noch
> > > etwas klemmen, denke ich.
Habs herausgefunden woran es liegt. Das ist erwartetes Verhalten von 
softupdates -> benchmarkfehler!

Bei *BSD Softupdates werden schreib-request in einem Puffer gepuffert und dann 
die passenden zusammengebündelt und schnell auf Platte geschrieben (sofern 
überhaupt noch notwendig). Die Anzahl der wirklich notwendigen 
Schreibzugriffe wird durch softupdates stark minimiert. Es kann relativ lange 
und effektiv gepuffert werden wenn viele von einander unabhängige 
schreibrequests eintrudeln und ohne die konsistenz des filesystems zu 
beeinträchtigen.
(Wer sich das genauer anschauen möchte kann dies unter:
http://www.mckusick.com/softdep/index.html tun)
Das funktioniert erstaunlich gut, solange die requests nicht voneinander 
abhängig sind, also zb. im normalen Worstation oder Serverbetrieb. 
(verschiedene prozesse schreiben in verschiedene Dateien)

Wenn jetzt aber mysql sql-bench daherkommt und 10000 inserts nacheinander 
ausführen will, tut mysql genau das was ihm gesagt wird, ein insert nach dem 
anderen und jedes mal sicherstellen, daß der vorige insert auch schon in der 
db ist (mit fsync oder so). Dadurch entsteht eine sequenz von voneinander 
abhängigen Schreib-requests und der softupdates puffer bringt gar nix, außer 
einer klitzekleinen verzögerung, weil das schreiben der requests nicht 
optimiert werden kann. Das bedeutet die Performance von Softupdates 
degradiert in diesem Fall zu der performance eines synchronen Filesystems.

Linux 2.6 hingegen nimmt das mit dem synchron nicht wirklich richtig ernst, so 
wie alle linuxe vorher auch schon, und erreicht dadurch und durch den 
Disk-scheduler/elevator und durch advanced reiserfs eine derart hohe 
performance.

Im normalen arbeitsfall (workstation oder server) verspricht Softupdates ein 
besseres Verhalten (kann ich bis jetzt auch bestätigen) , weil es die anzahl 
der notwendigen schreibzugriffe effektiv reduziert.

Bei linux werden die Zugriffe plattengerecht umgeordnet (durch den 
disk-scheduler/elevator) und die tatsächlich notwendigen Zugriffe werden 
durch simples warten (bei ext3 commit intervall) und puffern gebündelt und 
damit reduziert. Weit weniger optimal als softupdates das können. hinzu 
kommt: ein log für das jfs muß geschrieben werden, also gegenüber softupdates 
weiter eine leichte erhöhung der Anzahl der Zugriffe.
Hier läßt sich auch erkennen, warum linux 2.6 im sql-bench besser performt:
Es puffert, warted das commit intervall ab (soweit es halt geht) und gewinnt 
jetzt besonders durch das durch den warte-puffer mögliche plattenoptimierte 
umordnen (disk scheduler/elevator) der requests, während softupdates an 
dieser stelle einfach synchron werden.
Ich hoffe es läßt sich erkennen, auch wenn linux in benchmarks besser 
performt, daß das verhalten von linux, meiner Ansicht nach, suboptimal ist.
Wenn sich das nur in benchmarks wiederspiegeln würde ...
Ich muß wohl noch nach dem richtigen benchmark suchen :)

Gruß
Jan





Mehr Informationen über die Mailingliste linux-l