Beeinträchtigt LVM die Leistung?


86

Ich muss einige Server auf Linux migrieren, und ein wichtiger Aspekt, den ich bewerten muss, ist, dass mein neues Hostsystem über eine elastische Speicherkapazität verfügen muss. Natürlich bin ich bei einigen Grundlagenforschungen auf LVM gestoßen.

Gibt es Performance-Einbußen für die Verwendung von lvm? Wenn ja, wie kann ich es messen?

Was ich derzeit überlege, ist, Linux als Host-Betriebssystem mit LVM und darauf ausgeführten virtualisierten Linux-Boxen zu haben (sollte ich LVM auch auf dem Gast-Betriebssystem hinzufügen?).

Antworten:


102

LVM ist so konzipiert, dass es nicht wirklich stört. Vom Standpunkt des Benutzers aus sieht es so aus, als ob sich eine weitere Schicht "virtueller Dinge" auf der Festplatte befindet, und es scheint selbstverständlich, sich vorzustellen, dass die gesamte E / A diese nun durchlaufen muss, bevor sie zur realen oder von der realen Ebene gelangt Hardware.

Aber so ist es nicht. Der Kernel bereits muss eine Zuordnung haben (oder mehrere Schichten von Mapping tatsächlich) , die hohe Level - Operationen wie „schreiben diese in einer Datei“ an die Gerätetreiber verbindet , die wiederum mit tatsächlichen Blöcken auf der Platte verbinden.

Wenn LVM verwendet wird, wird diese Suche geändert, aber das ist alles. (Da es sowieso passieren muss, ist es ein vernachlässigbarer Leistungseinbruch, es ein bisschen anders zu machen.) Wenn es darum geht, die Datei tatsächlich zu schreiben, nehmen die Bits einen so direkten Pfad zum physischen Medium, wie sie es sonst tun würden.

Es gibt Fälle, in denen LVM Leistungsprobleme verursachen kann. Sie möchten sicherstellen, dass die LVM-Blöcke ordnungsgemäß mit dem zugrunde liegenden System ausgerichtet sind, was bei modernen Distributionen automatisch passieren sollte. Und stellen Sie sicher , dass Sie alte Kernel nicht mit unter Bugs wie diese . Oh, und die Verwendung von LVM-Snapshots beeinträchtigt die Leistung (und dies zunehmend mit jedem aktiven Snapshot). Aber meistens sollte die Auswirkung sehr gering sein.

Was das letzte betrifft: Wie kannst du testen? Das Standard-Festplatten-Benchmarking-Tool ist bonnie ++ . Erstellen Sie eine Partition mit LVM, testen Sie sie, löschen Sie sie und erstellen Sie (an derselben Stelle, um andere Faktoren gleich zu halten) erneut ein einfaches Dateisystem und einen Benchmark. Sie sollten nahezu identisch sein.


17

LVM ist wie alles andere ein gemischter Segen.

In Bezug auf die Leistung wird LVM Sie ein wenig behindern, da es sich um eine weitere Abstraktionsebene handelt, die ausgearbeitet werden muss, bevor Bits auf die Festplatte gelangen (oder von dieser gelesen werden können). In den meisten Situationen ist dieser Leistungseinbruch praktisch nicht messbar.

Zu den Vorteilen von LVM gehört die Tatsache, dass Sie vorhandenen Dateisystemen mehr Speicher hinzufügen können, ohne Daten verschieben zu müssen. Die meisten Leute mögen es für diesen Vorteil.

Ein Nachteil von LVM, das auf diese Weise verwendet wird, besteht darin, dass Sie die Wahrscheinlichkeit erhöhen, dass ein Festplattenfehler Ihre Daten kostet, wenn sich Ihr zusätzlicher Speicher über Festplatten erstreckt (dh mehr als eine Festplatte umfasst). Wenn sich Ihr Dateisystem über zwei Festplatten erstreckt und eine davon ausfällt, sind Sie wahrscheinlich verloren. Für die meisten Menschen ist dies ein akzeptables Risiko aufgrund von Platz-vs-Kostengründen (dh , wenn dies wirklich wichtig ist , wird es ein Budget, es zu tun richtig) - und weil, wie sie sagen, Backups sind gut, nicht wahr?

Der einzige Grund, warum ich LVM nicht benutze, ist, dass Disaster Recovery nicht genau definiert ist (oder zumindest nicht war). Eine Festplatte mit LVM-Volumes mit einem verschlüsselten Betriebssystem konnte nicht einfach an einen anderen Computer angeschlossen und die Daten von diesem wiederhergestellt werden. Viele der Anweisungen zum Wiederherstellen von LVM-Volumes schienen Schritte wie " Zurück in die Vergangenheit" und "vgcfgbackup" zu enthalten. Kopieren Sie dann die resultierende Datei / etc / lvmconf auf das System, auf dem sich Ihr abgespritztes Volume befindet . Hoffentlich haben sich die Dinge in den drei oder vier Jahren, seitdem ich das letzte Mal darüber nachgedacht habe, geändert, aber ich persönlich benutze LVM aus diesem Grund nie.

Das gesagt.

In Ihrem Fall würde ich davon ausgehen, dass die VMs im Vergleich zum Hostsystem relativ klein sein werden. Für mich bedeutet dies, dass Sie den Speicher in einer VM mit größerer Wahrscheinlichkeit später erweitern möchten. Dies geschieht am besten, indem der VM ein weiteres virtuelles Laufwerk hinzugefügt und anschließend die betroffenen VM-Dateisysteme vergrößert werden. Sie haben nicht die Sicherheitsanfälligkeit für mehrere Festplatten, da sich die virtuellen Festplatten höchstwahrscheinlich auf demselben physischen Gerät auf dem Hostsystem befinden.

Wenn die VMs für Sie von Belang sein sollten, werden Sie das Host-System auf irgendeine Weise RAID-fähig machen, was die Flexibilität für eine spätere Speichererweiterung verringert. Die Flexibilität von LVM wird daher wahrscheinlich nicht erforderlich sein.

Ich würde also davon ausgehen, dass Sie LVM nicht auf dem Host-System verwenden, sondern VMs installieren, um LVM zu verwenden.


6
@DM - Sie haben anscheinend den Hinweis übersprungen, dass es sich bei einem physischen LVM2-Volume um ein beliebiges Blockgerät handeln kann, einschließlich md-RAID. IE: pvcreate / dev / md0, unabhängig vom zugrunde liegenden RAID-Typ / dev / md0. Wenn es sich bei Ihrem / dev / md0 also um ein RAID-Array gespiegelter physischer Laufwerke handelt, kann der Verlust eines einzelnen physischen Laufwerks die LVM2-Gruppe nur schwer beeinträchtigen. Außerdem: Sie können logische LVM2-Volumes als Medienseite beim Erstellen eines RAID-Arrays verwenden. Beide arbeiten auf der Device-Mapper-Ebene, beide sind Device-In / Device-Out-Layer.

1
Ihre Wiederherstellungsbedenken sind übertrieben, es ist trivial, ein lvm-Array zwischen Computern mit einer einigermaßen aktuellen Linux-Distribution zu verschieben (dh Debian Oldstable ist neu genug)
Hildred

@ user13719: Ja, Sie können ein beliebiges Block-Gerät mit LVM versehen, aber in der Praxis tun die Leute dies nicht. Sie landen mit einem einzigen Laufwerk LVM'd. Dann fügen sie ein weiteres Laufwerk hinzu und erweitern mit LVM das vorhandene Dateisystem auf die neue Festplatte. Zu diesem Zeitpunkt wird der LVM durch den Ausfall einer der Festplatten beendet.
David Mackintosh

@hildred, auf das oben Gesagte bezog ich mich - mir sind keine Tools bekannt, mit denen Daten von einem LVM wiederhergestellt werden können, der sich über mehrere Festplatten (Blockgeräte) erstreckt, wobei eine Festplatte fehlt.
David Mackintosh

2
Das ist so, als ob man sagt, Messer seien schlecht, weil man sich beim Jonglieren schneiden könnte ... Wie wäre es, wenn man das einfach nicht tut? Verwenden Sie sie für Aufgaben, für die sie besser geeignet sind, wie zum Beispiel das Schneiden von Gemüse.
Chinoto Vokro

3

Allgemein: Wenn Sie eine neue Komplexitätsebene hinzufügen ("aka more to do"), wird nichts schneller. Hinweis: Sie fügen nur Arbeit hinzu und 'ändern' nicht die Art und Weise, wie die Arbeit ausgeführt wird.

Wie können Sie etwas messen? Nun, Sie erstellen eine Partition mit LVM und eine ohne, verwenden dann einen normalen Benchmark und führen ihn einfach aus. Wie die Leute bei

http://www.umiacs.umd.edu/~toaster/lvm-testing/

Wie es scheint, nur geringfügig auf die Geschwindigkeit auswirken. Dies scheint mit den Ergebnissen einer anderen Person übereinzustimmen, die einen Benchmark durchgeführt hat:

"ext4 ist mit LVM schneller als ohne und andere Dateisystem-Benchmarks" Linux Kernel Mailing List Thread

Aber vergleichen Sie es einfach selbst und prüfen Sie, ob sich Ihre Hardware und das Betriebssystem, das Sie verwenden möchten, gleich verhalten und ob Sie die (möglicherweise geringfügigen) Auswirkungen einer zusätzlichen Komplexitätsebene, die Ihnen elastischen Speicher bietet, ignorieren können.

Sollten Sie dem Gastbetriebssystem LVM hinzufügen: Das hängt davon ab, ob das Gastbetriebssystem auch über einen elastischen Speicher verfügt, oder nicht? Ihre Anforderungen bestimmen, was Sie bereitstellen müssen.


@akria, oops, es wurde verschoben
Hildred

Sie können sicherlich ändern, wie die Arbeit erledigt wird. Beispielsweise kann ich Ihnen über GPS-Koordinaten, Straßennamen oder lokale Orientierungspunkte eine Wegbeschreibung zu einem Standort geben. Verschiedene Wege, aber Sie müssen immer noch den gleichen Weg gehen. Die Zeit, die zum Anzeigen einer Papierkarte benötigt wird, im Vergleich zum Befolgen der Anweisungen Ihres Telefons, kann geringfügig abweichen, ist aber letztendlich im Vergleich zur Gehzeit vernachlässigbar.
Mattdm

Ich habe bereits festgestellt, dass die Auswirkung der hinzugefügten Arbeit im Fall von lvm keine wirklichen Auswirkungen hat. Ich frage mich, worauf fährst du hinaus?
Akira

Der Punkt, an dem ich "fahre", ist der, dass " Hinweis: Sie fügen nur Arbeit hinzu und" ändern "nicht die Art und Weise, wie die Arbeit erledigt wird " keine sachliche Aussage ist.
Mattdm

@mattdm: Es ist offensichtlich, dass Sie unterschiedliche Ergebnisse erhalten, wenn Sie die Arbeitsweise ändern (z. B. einen anderen Algorithmus, ein anderes fs usw.). lvm ändert nichts an der Funktionsweise des fs. Du weißt, dass. und deshalb frage ich mich, was Ihr Punkt eigentlich ist? "Etwas hinzufügen" bedeutet "hinzufügen", nicht "auch das andere ändern". Das weißt du auch.
Akira

0

Sollte ich LVM auch auf dem Gastbetriebssystem hinzufügen?

Sie sollten dies nicht tun, da ein ext3- oder ext4-Dateisystem im logischen Host-Volume ausreichen sollte. Es ist nicht erforderlich, eine weitere Datenträgergruppe sowie einen physischen Datenträger und einen logischen Datenträger hinzuzufügen.


0

Es würde nicht viel von einem Leistungseinbruch nur von lvm geben, aber wenn Sie bereit sind, es zu nehmen, verwenden Sie stattdessen zfs. Sie erhalten Datenträgerverwaltung, Wiederherstellbarkeit und viele andere großartige Funktionen.


Ein Problem mit ZFS ist, dass es physische Volumes mit unterschiedlichen Geschwindigkeiten und Größen nicht gut handhabt.
Gabriel Fair

1
Kommt damit noch nicht klar. Und das tut es, wenn Sie sie entsprechend organisieren. Ich verstehe nicht, wie lvm es besser macht.
stu

0

Niemand, der lvm2 erwähnt, kann die Lese- und Schreibgeschwindigkeit multiplizieren (ähnlich wie raid0). Ich persönlich benutze 3 identische Datenträger und über ihnen lvm2 im abgespeckten Modus, die Lese- und Schreibvorgänge dauern 1/3 der Zeit, das ist eine große Auswirkung, das Dateisystem ist drei Mal schneller. Ich weiß: Jeder Datenträger fällt aus und alle darauf gespeicherten Daten sind nicht zugänglich. Dies bedeutet jedoch nicht, dass Sie etwas verloren haben, da BackUPs ein MUSS sind, und nichts wie Raid, LVM2, ZFS wird es vermeiden, BackUPs zu haben. Also benutze ich niemals Mirroring, Raid5 und so, ich benutze immer Stripping (um die beste Leistung zu erzielen) und habe BackUPs synchronisiert. ZFS eignet sich hervorragend für die Komprimierung im laufenden Betrieb. Wenn der Parameter für Kopien größer als eins ist, entspricht dies einer Spiegelung, aber ZFS hat und niemand anderes hat die Funktion, die Bitfäule automatisch im laufenden Betrieb wiederherzustellen (Bits, die sich währenddessen spontan ändern Festplatte ist ausgeschaltet),

Um fortzufahren: Ich verwende ZFS nur für meine BackUPs auf externen Festplatten. Mehrere (zwei oder drei) SSDs mit lvm2-Stripes für das Betriebssystem. und ich benutze mehrere (sechs) Spinnin-Festplatten mit lvm2, die für Daten entfernt wurden, wie virtuelle Maschinen, wieder nach jeder Änderung, die ich BackUPs wiederhole; Nach einem Festplattenfehler muss ich die Festplatte nur ersetzen und das letzte Backup wiederherstellen. Heute habe ich eine Schreibgeschwindigkeit von fast 1,8 GB / s, sodass das Wiederherstellen einer virtuellen Maschine von BackUP nur weniger als 30 Sekunden dauert (32 GB pro Festplatte der virtuellen Maschine).

Meine Antwort lautet also: Verwende nicht nur eine Sache, sondern sei schlau und nutze das Beste aus jedem Teil. Lvm2 Stripped ist schneller als Mdraid Level 0, mehr bei Verwendung von sechs sich drehenden Festplatten. eine warnung mit stripping ssd, zwei und drei ist gut, vier ssd können die performance verschlechtern (meine tests ergaben eine niedrigere schreibgeschwindigkeit, wenn ich vier identische ssd im stripped modus verwendete, egal ob lvm, mdraid0, etc), scheint dass ssd trimm und so Die Schreibverstärkung kann die Hauptursache für das Hinzufügen von mehr SSD zu einem reduzierten Volumen sein, wodurch die Schreibgeschwindigkeit verringert wird.

Warnen Sie mit ssd und allen raid0 (freigelegten Volumes), richten Sie die Dinge perfekt aus, weisen Sie dem Dateisystem die richtigen Clustergrößen zu, stippen Sie die Größe usw., damit niemand eine Verschlechterung verursacht. Beispiel: Der Festplattensektor ist 2048, also sollten Sie bei mindestens 2 KByte Lese- / Schreibzugriff niemals ein Dateisystem verwenden, das 512-Byte-Cluster verwendet. Verwenden Sie besser 2 KByte oder 4 KByte Clustergröße. Stellen Sie sich vor, Sie verwenden 3xHDD, jeder von 2K-Sektoren. Bei einem optimierten Lese- / Schreib-Dateisystem-Cluster wäre das also 3x2K = 6K, aber das ist bei vielen Dateisystemen nicht möglich / 3, das verursacht unsymmetrisch, also nicht optimal und so weiter. Stellen Sie Mathematik auf, um die optimale Clustergröße zu erhalten.

Meine besten Ergebnisse sind: Clustergröße = Streifengröße * Anzahl der Festplatten auf dem Streifen; Auf diese Weise hat jeder Lese- / Schreibzugriff die exakte Größe, mit der alle Festplatten funktionieren. Die Geschwindigkeitsverbesserung ist also enorm. Eine beispielhafte 192-KB-Clustergröße für 3 Festplatten mit 64-KB-Stripe-Größe. Ein weiteres Beispiel: 192 KB Clustergröße für 6 Datenträger mit 32 KB Stripe-Größe.

Denken Sie immer daran, eine einzelne Festplatte in 4K-, 8K-, 16K-, 32K- und 64K-Blöcken zu testen. Viele Festplatten bieten sehr schlechte Geschwindigkeiten mit niedrigeren Werten wie 4 KB, aber mehr als zehnmal schnellere Zeiten, wenn sie auf 64 KB, 128 KB oder höher laufen.

Ja, die Verwendung großer Clustergrößen kann zu einem Verlust von Speicherplatz auf dem Las-Cluster jeder Datei führen (wenn Sie Millionen von Dateien mit jeweils nur 1 Byte verwenden). Verwenden Sie besser ein kompaktes / pack-on-the-fly-System über dem Dateisystem. Als Beispiel kann eine 4TiB-Festplatte mit einer 4K-Clustergröße nur weniger als 4TiB / 4K = 1073741824 Dateien mit jeweils 1Byte haben, dh nur 1GiB, wenn alle Dateien 1Byte groß sind (Clustergröße 4K), größere Clustergröße schlechtestes Verhältnis, aber wenn Dateien sind riesig, wie virtuelle Maschinen (in der Nähe von 32 GB als Beispiel oder nur ein paar Megabyte), die nur im letzten Cluster verloren gehen. Wenn Sie also große Dateien und große Cluster haben, wirkt sich dies wesentlich besser auf die Leistung aus. Achten Sie jedoch darauf, wie die virtuelle Maschine sie verwendet.

Niemand wird Ihnen dieses Geheimnis verraten: Verwenden Sie innerhalb des Gasts nicht die 4K-Clustergröße, verwenden Sie die gleiche Clustergröße wie die Clustergröße, in der sich die virtuelle Festplatte befindet, oder ein Vielfaches davon.

Ja, ich bin verrückt danach, die höchste Geschwindigkeit innerhalb der Gast-Festplatten zu erreichen. Wie ich bereits sagte, ist die SATA III-Busgeschwindigkeit bei 6 rotierenden Festplatten, die sich in der Nähe von 1,7 GBit / s befinden, der Engpass, nicht die Festplatten selbst. Ich verwende High-End-Festplatten (nicht billig) mit 128 MB Cache und einer Schreibgeschwindigkeit von jeweils 283 MB / s.

Für Sie und alle: Es ist am besten zu lernen, wie Clustergröße, Stripe-Größe und Blockgröße zusammenhängen müssen, bevor Sie einen Geschwindigkeitstest durchführen. Anderenfalls kann der Test von LVM2 oder einem anderen RAID (auch ZFS) zu FALSCHEN Schlussfolgerungen führen.

Nur ein Beispiel dafür: Ich teste meine Linux-Startzeiten mit 2x60MiB / s 2,5-Zoll-Sata-Festplatten mit 5400 U / min auf einem Sata II-Port-Mainboard und teste dann mit 2xSSD Sata III (sie können jeweils mehr als 250MiB / s schreiben, wenn sie mit Sata III verbunden sind Ports), dauert die Startzeit nur zwei Sekunden kürzer, nur zwei Sekunden bei einem fünfminütigen Start, warum? Da die meisten Startzeitdisketten nicht verwendet werden, werden nur RAM- und CPU-Daten verarbeitet, nicht jedoch E / A-Daten.

Testen Sie immer das, was Sie an einem echten Tag tun werden, nicht nur grobe Geschwindigkeiten (mit anderen Worten Höchstgeschwindigkeit).

Die maximale Geschwindigkeit ist gut zu wissen, dass sie nicht darstellbar ist. Möglicherweise verwenden Sie die Festplatten nicht 100% der Zeit mit maximaler Geschwindigkeit. Betriebssysteme und APPs müssen auf RAM und CPU ohne E / A arbeiten. In dieser Zeit funktioniert die Festplattengeschwindigkeit nicht Materie überhaupt.

Alle Leute sagen, dass SSD die Windows-Boot-Geschwindigkeit erheblich verbessert. Bei meinen Tests ist dies ebenfalls FALSCH. Nur bei einer Boot-Zeit von fast acht Minuten beweise ich 28 Sekunden.

Also wenn du mich magst: Linux Copy-to-RAM beim Booten, SSD wird nicht gebettet als rotierende HDDs, ich hatte auch USB 3.1 Gen2 Stick (139MiB / s gelesen) getestet, die Bootzeit wird nur ein paar Sekunden auf ein gekürzt Fünf-Minuten-Boot, warum? einfach, das lesen erfolgt beim kopieren auf ram, nachdem disk / ssd / usb-stick nicht mehr auf dem rest des bolzens verwendet wird, die daten befinden sich auf ram, wie bei einem ram-laufwerk.

Jetzt verkaufe ich alle meine SSDs, die ich habe. Sie verbessern Linux Copy-on-RAM beim Booten nicht, aber das Benchmarking zeigt, dass sie 5-mal schneller sind Tagesarbeit.

Hoffe, das kann männliche Dinge klar machen ... LVM mit schlechten Cluster- und Streifengrößen wirken sich bei weitem mehr aus als der Overhead der Schicht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.