Max Trense wrote:
So einfach ist es eben nicht unbedingt. Striping bedeutet, dass aufeinanderfolgende Blöcke (auf den Arbeitsspeicher übertragen sind das dann wohl am ehesten Pages) auf unterschiedlichen physikalischen Medien befinden. Der entscheidende Vorteil dieser Technik kommt zum Tragen, wenn eine Datei sequentiell in den Arbeitsspeicher gelesen wird. Bei diesem Vorgang wird jeder einzelne Block gelesen und an eine bestimmte Stelle in den Arbeitsspeicher geschrieben. Da aber die meisten Komponenten eines Computers Daten viel schneller übertragen können, als selbst die schnellsten Festplatten, warten logischerweise während der Übertragung alle diese Komponenten auf die Daten von der Festplatte. Legt man jetzt aber die einzelnen Blöcke auf unterschiedliche Medien und ist die Read-Ahead-Funktionalität richtig konfiguriert, kann man eben mehrere Blöcke gleichzeitig laden. Selbst mit vielen Festplatten erreicht man so kaum die Geschwindigkeit des Arbeitsspeichers, kann jedoch bei einer genügenden Anzahl von Festplatten die Durchsatzrate erheblich steigern. Diese Steigerung liegt im Regelfall bei nahezu 100%, was das Striping gerade für große Dateien recht interessant macht.

Um das kurz auf den Punkt zu Bringen: Bei grossen Dateien, welche sequenziell gelesen werden, wird das optimum da liegen wo der Read-Ahead ein ganzzahliges mehrfaches der Groesse eines Stripes entspricht.

Ein Problem ist aber auch hier der Overhead. Der fällt im Vergleich zur Performancesteigerung zwar recht gering aus, aber es gibt eben auch Fälle, in denen es nicht möglich ist, mehrere Blöcke parallel zu lesen. Eben dieser Fall ist bei Swap gegeben: Arbeitsspeicher wird in der Regel nicht in zusammenhängenden Clustern benötigt, sondern meistens nur einzelne Pages. Und das entspricht dem Laden eines einzelnen Blocks von der Festplatte.

Kurze Frage: Warum müssen Pages, gerade bei multithreaded Anwendungen oder MultiKern/Prozessoren, immer 'sequenziell' geswapped (Autsch, ganz übles Neudeutsch) werden? Ich denke schon das hier mächtig 'parallelisiert' werden kann. Zudem ist die Wahrscheinlichkeit, das die Blöcke welche gelesen oder geschrieben werden müssen auf unterschiedlichen Platten liegen, beim Stripping (über zwei oder mehrere Platten) nun mal nahe 50:50 (bei zwei) oder grösser (bei mehreren Platten). Somit sollte eigentlich genau hier das Thema mit der Verteilung des Overheads (Kopfbewegung) greifen.

Da dieser Vorgang nicht parallelisierbar ist, gibt es natürlich auch keine Performance-Steigerung.

Nochmal. Warum nicht?

BTW. die Grösse einer Page ist nicht zufällig ein Vielfaches von 512 Byte und somit ein ideales Vielfaches der Blockgrösse, was dann wieder ideal zum Read-Ahead passt?

Einen ähnlichen Fall gibt es bei sehr kleinen Dateien. Natürlich könnte man nun die Blockgröße des Dateisystems auf einen kleineren Wert konfigurieren. Das bringt allerdings wegen der Seektime der Festplatte nicht besonders viel.

Bei der Änderung der Blockgrösse wird man bei einer nicht fragmentierten Datei wohl keinen Unterschied messen, zumindest nicht wenn die Datei nicht über die Zylindergrenze der Platte hinausreicht und somit ohne Kopfbewegung gelesen wird. (und so ein Zylinder ist schon mächtig gross. ;-) )

Die Abwägung zwischen Striping oder nicht ist also wirklich nicht ganz trivial und definitiv nicht allgemein entscheidbar ;-)

Genau dies kann ich aber aus Deinen Ausführungen eben nicht entnehmen. :-(

Wo ist da eigentlich der Unterschied zwischen zusammenhängendem Speicher
und Dateien?

Hauptsächlich in der Blockgröße und der Zugriffsmethode.

Hmm, versteh ich nicht. ;-)
Die Blockgrösse auf der Platte ist für beide gleich und bei 'ner Datenbank gibt es bestimmt genauso viel 'Random-Access' wie beim Swappen.

Und eine Swap-Partition ist unter Unix sowieso wie alles eine Datei. (*duckundweg*)

Gruß,
Klaus
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an