Linux - RAM-Disk als Teil eines gespiegelten logischen Volumes

Linux - RAM-Disk als Teil eines gespiegelten logischen Volumes

Wir haben einen Server mit 64 GB RAM, Anwendungen nutzen normalerweise maximal 30 GB dieses verfügbaren RAM. Eine dieser Anwendungen verarbeitet viele Flatfiles, und wir haben Durchsatzprobleme, nämlich das Warten auf Festplatten-E/A. Bei der Untersuchung möglicher Lösungen kam die Idee einer RAM-Disk auf. Das Problem, das ich mit einer RAM-Disk habe, ist die inhärente Volatilität.

Ich habe separate Dokumentationen zu RAM-Disks, RAID 1-Konfiguration und Logical Mirrored Volumes gefunden, umphysischFestplatten, aber ich kann keine Dokumentation finden, die angibt, ob eine dieser Festplattenreplikationslösungen mit einer RAM-Festplatte verwendet werden kann. Wichtiger ist, dass die RAM-Festplatte für Lese-/Schreibvorgänge verfügbar sein soll und die physische Festplatte die RAM-Festplatte „beschattet“ und Schreibvorgänge nachholt. Daher sollten wir die RAM-Festplatte als „primäre“ Festplatte für alle Lese-/Schreibvorgänge verwenden.

Zu beachten, wir würdenwieum zu vermeiden, dass die Dateien nur im RAM-Cache des Betriebssystems gespeichert werden, aber wenn wir die gleiche Leistung wie bei einer eigenständigen RAM-Disk erzielen können, könnte das funktionieren. Wir haben dies zunächst vermieden, da auf bestimmte Dateien oft über längere Zeiträume nicht zugegriffen wird, aber dennoch die Lese-/Schreibgeschwindigkeit bei Bedarf benötigt wird.

Antwort1

Zu beachten ist, dass wir vermeiden möchten, die Dateien mit dem Betriebssystem lediglich im RAM-Cache zu speichern. Wenn wir jedoch die gleiche Leistung wie mit einer eigenständigen RAM-Disk erzielen können, könnte dies funktionieren. Wir haben dies zunächst vermieden, da auf bestimmte Dateien häufig über längere Zeiträume nicht zugegriffen wird, aber dennoch die Lese-/Schreibgeschwindigkeit bei Bedarf benötigt wird.

Du könntest benutzenvmtouchum Ihr Problem zu lösen.Dies ist ein Dienstprogramm, mit dem Sie bestimmte Dateien oder sogar ganze Verzeichnisse und alles, was sich darunter befindet, im Seitencache fixieren können, damit sie nicht gelöscht werden, selbst wenn sie über längere Zeiträume nicht aufgerufen werden (was Ihr ursprünglicher Grund war, sich nicht einfach auf den Seitencache zu verlassen). Dies erfordert höchstens dieselbe Speichermenge wie Ihre RAM-Disk, oder in der Praxis sogar weniger. Sie verwenden zwar immer noch den Seitencache, erzielen jedoch eine ähnliche Leistung wie bei Verwendung einer RAM-Disk für alles (tatsächlich sogar eine bessere Leistung, da der MD-Treiber nicht beteiligt ist).

Antwort2

Dies könnte zusammengehackt werden, aber das ist eine schlechte Idee und hat wahrscheinlich mehrere Probleme hinsichtlich der Zuverlässigkeit und Wartungsfähigkeit.

Ich denke, ein RAID1 aus RAM-Disk und physischer Festplatte wäre auf die Leistung der physischen Festplatte beschränkt, da ein Teil der RAID1-Funktionalität darin besteht, sicherzustellen, dass beide Kopien synchron sind.

Beim Lesen könnte es einige Vorteile geben, da der MD-Treiber das Lesen zwischen verschiedenen Geräten verteilen kann.

Mögliche Schritte um dies zu erstellen:

  1. Erstellen Sie eine leere Datei mit der Größe des zu unterstützenden Arrays
  2. Wird verwendet losetup, um aus der Datei ein Blockgerät zu erstellen.
  3. Verwenden Sie es mdadm, um das Array mit dem neu erstellten Blockgerät und der entsprechenden Festplattenpartition zu erstellen.
  4. Erstellen Sie ein Dateisystem auf dem neuen MD-Array.

Ich habe das selbst nicht ausprobiert, es ist also nur ein theoretisches Beispiel, wie es gemacht werden könnte.

Antwort3

Zunächst einmal ist eine RAM-Disk fastniemalsdie richtige Antwort unter Linux. Da es sich um ein Blockgerät handelt, muss jeder Lesevorgang durch die Blockebene, das Dateisystem und die normale VFS-Ebene gehen.Unddie Daten werden zusätzlich zur Speicherung auf der RAM-Disk im RAM zwischengespeichert. Diese Datenduplizierung sowie die Anzahl der zusätzlichen beteiligten Schichten sind der Grund, warum tmpfs unter Linux existiert. Anstatt die Blockschicht zu verwenden, speichert ein tmpfs-Dateisystem die Daten einfach direkt im Seitencache und überspringt so die gesamte zusätzliche Komplexität. Außerdem wird die Größe automatisch anhand der darin gespeicherten Datenmenge angepasst (anstatt die Größe im Voraus definieren zu müssen) und es kann sogar Swap-Speicherplatz nutzen. Wenn Sie der Meinung sind, dass Sie eine Ramdisk benötigen, sollten Sie in 99 % der Fälle tatsächlich tmpfs verwenden.


Nun zu tatsächlichen Lösungen …

Wenn alle Ihre Daten tatsächlich in den RAM passen, ist es viel besser, sie einfach im RAM zu fixieren, entweder mit einem Tool wievmtouch, oder indem Sie die Anwendung alle Dateien mmapen lassen und dann mlock für alle zugeordneten Regionen aufrufe.

Wenn nicht alle Ihre Daten in den RAM passen, haben Sie zwei realistische Optionen:

  • Speichern Sie die Daten komprimiert auf der Festplatte, idealerweise mit einem Dateisystem, das transparente Komprimierung bietet, wie BTRFS, F2FS oder ZFS. Vorausgesetzt, Sie haben eine einigermaßen schnelle CPU, wird dies normalerweisereduzierendie zum Lesen einer großen Datei erforderliche Zeit, auf Kosten einer etwas höheren CPU-Zeit. Die Verbesserung ist im Allgemeinen proportional zur Komprimierung der Daten, kann aber in vielen Fällen leicht zu einer Verbesserung von 30 % oder mehr führen.
  • Erwägen Sie die Investition in schnelleren Speicher. Entweder genug, um Ihren vorhandenen Speicher zu ersetzen, oder eine kleinere Menge, die Sie dann verwenden können mitbcacheum Ihren vorhandenen Speicher funktional zu beschleunigen.

Antwort4

Wenn Sie Beständigkeit benötigen, ist eine RAMDISK nicht die richtige Lösung.

Ich empfehle dringend, in ein Paar schneller (sprich: unternehmenstauglicher, mit Stromausfallschutz) NVMe-Festplatten zu investieren, um sie in ein klassisches RAID1-Array (gespiegelt) einzubauen.

verwandte Informationen