staging.inyokaproject.org

Partitionierung und der physische Aufbau einer HDD

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Vanger

Anmeldungsdatum:
4. Juni 2009

Beiträge: 46

Hallo zusammen,

habe mich heute ein wenig tiefer mit dem physischen Aufbau von HDDs und deren Partitionierung beschäftigt. Dabei bin ich an zahlreichen Stellen auf verschiedene Hinweise betreffend der Performance gestoßen, die ich mir nicht ganz erklären kann. Würde mich freuen wenn mich jemand aufklärt.

Zum einen wurde häufig darauf hingewiesen, dass man Partitionen doch auf Zylinder auf- bzw. abrunden solle, da dies der Performance zuträglich sei. Auch GParted bietet das per Auswahlbox an - und die Option ist standardmäßig sogar angewählt. Ich kann mir dabei aber beim besten Willen nicht den physikalischen Hintergrund dafür erklären. Sollen bei einer Festplatte mit 8 Köpfen (= 4 Scheiben) und 4K-Sektorgröße beispielsweise die ersten 32 kByte einer Partition gelesen werden, ist es natürlich vorteilhaft wenn alle Köpfe an der gleichen Position lesen können und nicht mehr wegen dem letzten Block eine Position (oder gar zusätzlich noch eine Spur weil man am Ende der Spur angekommen ist) weitergefahren werden muss. Dadurch dass die dem Kernel gemeldeten Zylinder aber nichts mit den physischen Zylindern zu tun haben, verliert sich dieser Vorteil doch - so ziemlich jeder HDD-Controller meldet dem Kernel er habe 255 Köpfe wodurch die dem Kernel bekannten Zylinder nichts mit den physischen Zylindern zu tun haben können. Kann es sein, dass das noch ein Relikt aus alten Zeiten ist, in denen dem Kernel nicht der Aufbau einer virtuellen Festplatte mit 255 Köpfen gemeldet wurde sondern der physische Aufbau?

Insbesondere im Zusammenhang mit den (jetzt ja nicht mehr so neuen) HDDs mit phyischer 4K-Sektorgröße wird häufig darauf hingewiesen, dass man beim Betrieb mit einer logischen Sektorgröße von 512B doch darauf achten solle, dass Partitionen an den Rändern eines physikalischen Sektors beginnen bzw. enden sollten. Grundsätzlich kann ich das nachvollziehen. Sollen bspw. die ersten 32 Kilobyte einer Partition gelesen werden, wird das deutlich: Die HDD liest nun die Daten von 64 logischen Blöcken á 512 Byte, da die physische Sektorgröße aber 4 kB beträgt, würde sie eigentlich 8 Blöcke á 4 kB lesen müssen. Wenn nun der Anfang der Partition nicht am Anfang des ersten physischen 4K-Sektors liegt, müssen dennoch die kompletten 4K des Sektors gelesen werden aber die nicht benötigten logischen Blöcke verworfen werden. Das was am Anfang entfernt wurde fehlt am Ende - es muss also noch ein physischer 4K-Sektor gelesen werden. Bei dem werden wieder entsprechend die nicht benötigten logischen Blöcke verworfen, wodurch letztlich 9 physische Sektoren á 4K gelesen und interpretiert werden müssen. Das kostet natürlich unbestreitbar Ressourcen. Aber wie viel? Das betrifft immerhin gerade mal die ersten und letzten 4 kB einer Partition, es ist nicht so als würden die am laufenden Band gelesen werden. Und selbst wenn, ich kann mir nicht vorstellen, dass das einen irgendwie nennenswerten Einfluss hat.

Grüße, Rudi

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7795

Vanger schrieb:

Zum einen wurde häufig darauf hingewiesen, dass man Partitionen doch auf Zylinder auf- bzw. abrunden solle, da dies der Performance zuträglich sei.

Halte ich für Unsinn...

Kann es sein, dass das noch ein Relikt aus alten Zeiten ist

Ja... nicht aus alten sondern aus uralten...

Insbesondere im Zusammenhang mit den (jetzt ja nicht mehr so neuen) HDDs mit phyischer 4K-Sektorgröße wird häufig darauf hingewiesen, dass man beim Betrieb mit einer logischen Sektorgröße von 512B doch darauf achten solle, dass Partitionen an den Rändern eines physikalischen Sektors beginnen bzw. enden sollten.

Das wiederum ist sehr wichtig.

Das kostet natürlich unbestreitbar Ressourcen. Aber wie viel?

Extrem viel, weil es noch schlimmer ist, als von dir vorgestellt.

Das betrifft immerhin gerade mal die ersten und letzten 4 kB einer Partition

Nein - es betrifft die gesamte Partition und damit jeden einzelnen Lese-/Schreibvorgang. Wenn das Dateisystem mit 4k Blöcken arbeitet, die Festplatte dann aber für jeden angeforderten 4k Block 8k einlesen muss, weil das Align nicht stimmt, dann hat sich die Performanz halbiert. Und genau dieser Schwachsinn passiert leider. Festplatten sind ziemlich dumme Speichergeräte. Sie verlassen sich darauf, daß das OS vorfiltert... das OS hat Caches, es sortiert die Zugriffsanfragen an die Festplatte vor damit sich der Lesekopf möglichst wenig bewegen muss, etc. - wenn die Platte dann auf einmal bei jeder Anfrage halbe Sektoren lesen muss, verlangsamt das ungemein und die ganzen anderen Optimierungen sind ebenso für die Katz.

Vanger

(Themenstarter)

Anmeldungsdatum:
4. Juni 2009

Beiträge: 46

Erstmal Dankeschön für die schnelle Antwort!

frostschutz schrieb:

Vanger schrieb:

Das betrifft immerhin gerade mal die ersten und letzten 4 kB einer Partition

Nein - es betrifft die gesamte Partition und damit jeden einzelnen Lese-/Schreibvorgang. Wenn das Dateisystem mit 4k Blöcken arbeitet, die Festplatte dann aber für jeden angeforderten 4k Block 8k einlesen muss, weil das Align nicht stimmt, dann hat sich die Performanz halbiert. Und genau dieser Schwachsinn passiert leider. Festplatten sind ziemlich dumme Speichergeräte. Sie verlassen sich darauf, daß das OS vorfiltert... das OS hat Caches, es sortiert die Zugriffsanfragen an die Festplatte vor damit sich der Lesekopf möglichst wenig bewegen muss, etc. - wenn die Platte dann auf einmal bei jeder Anfrage halbe Sektoren lesen muss, verlangsamt das ungemein und die ganzen anderen Optimierungen sind ebenso für die Katz.

Betrifft das dann jeden einzelnen Block oder verliert sich der Effekt je nachdem wie viele Blöcke gelesen werden? Wenn statt einem Block zwei Blöcke gelesen werden müssen halbiert das die Performance natürlich, aber wie sieht es aus wenn beispielsweise von 1000 Blöcken (4 MB) gelesen werden soll? Liest er dann physisch von 2000 Blöcken oder nur von 1001 Blöcken? Das entspricht eigentlich der Fragestellung ob HDD-Controller Blöcke immer einzeln abarbeiten oder Bereiche verstehen.

Antworten |