Ramdisk vs. SSD [Diskussion/Howto]

E

enteon

Gast
Ist es nicht besser das gesamte OS im RAM zu haben?

Schon seit einiger Zeit quält mich diese Frage. Trotz chronischem Zeitmangels nun endlich ein paar Gedanken und Wegweiser dazu.
Im Mittelpunkt steht natürlich die Frage ob und wann eine SSD besser oder eben schlechter ist als eine Ramdisk.

Meine Gedanken und Erkenntnisse dazu nun in konzentrierter Form:
Offensichtlich habe ich noch nicht alles getestet, es gibt viel mehr Arten das zu realisieren und es sind noch viele Fragen offen. Mit einer regen Diskussion kann man diese hoffentlich klären :)


Allgemein:

Wir Laden das komplette OS vor, während oder nach dem booten in den RAM und erstellen dann ein RAID1 (Mirroring) zwischen dem OS im RAM und dem auf dem nichtflüchtigen Datenträger (hier mal standardmäßig HDD). Damit erreichen wir, dass Änderungen am OS auch einen Reboot/Stromausfall/Crash überleben.

Der Pferdefuß: wenn zufällig von HDD oder RAM gelesen wird haben wir performancetechnisch kaum etwas gekonnt. Daher brauchen wir Load-Balancing, damit immer nur vom schnellsten Mitglied im RAID1 gelesen wird. Am besten wäre auch das Schreiben auf nur dem schnellsten Mitglied und dann das zeitversetzte Spiegeln auf das langsamere. Aber das widerspricht dem Gedanken eines RAID1 und funktioniert daher nur mit der RSync o.ä. Methode, was dann auch gleichzeitig der größte Nachteil dieser Methode ist. Welche Methode einem die liebste ist muss jeder selbst entscheiden. Arten jede einzelne umzusetzen gibt es linuxtypisch eine Menge, mit wiederum Vor- und Nachteilen.


Theoretischer Vergleich mit SSD:

Vorteile: Theoretisch schneller. Praktisch bleibt das zu beweisen. Billiger wenn man sehr wenig Platz braucht.

Nachteile: Deutlich komplizierter und komplexer und somit unrobuster. Meistens kein schnelleres Schreiben. Teurer wenn man etwas mehr Platz braucht.


Ramdisk erzeugen:

1. Kernel Modul "rd" laden, für /dev/ram* Devices.

2. Mit "rd_size=" die maximale Größe jedes /dev/ram in 1KB Schritten bestimmen. "rd_size=1000000" ist also 1GB.

script:
Code:
#!/bin/sh
#erzeugt die /dev/ram*s mit der richtigen größe
modprobe rd rd_size=1000000

#nun kommt eine der methoden um die daten auch tatsächlich in den RAM zu bekommen...
#hier könnte Ihre lieblingsmethode stehen!


Methoden die Ramdisk zu nutzen:

Mdadm Methode:

Vorteile: Robustestes und vielseitigstes software RAID.

Nachteile: Die gesamte Partition wird in den RAM kopiert, auch ungenutzter Speicher. Das dauert länger und belegt unnötig RAM. Schreiben ist langsam, da es mindestens gleichberechtigt auf der HDD passiert.

3. Leere Partition erstellen, die später als root benutzt werden soll. Am besten vorher noch eine 500mb /boot Partition, das spart allen Ärger mit dem Bootloader.

4. "mdadm --create /dev/md0 --level=1 --raid-devices=2 -W /dev/sdb1 missing" erzeugt RAID1 aus leerer Partition und noch Nichts. Das W sorgt dafür, dass von /dev/sdb1 nicht gelesen wird.

5. /dev/md0 wie gewünscht formatieren. "mkfs.ext4 /dev/md0". "mdadm --examine --scan >> /etc/mdadm/mdadm.conf" lässt mdadm sich auch merken, dass es dieses RAID gibt. Ob das wirklich immer nötig ist? Bei mir schien es so...

6. Inhalt von altem root (z.b. /dev/sda1) auf /dev/md0 kopieren. "mount /dev/md0 /mnt". "cp -ax / /mnt".

7. Fstab und Bootloader auf /dev/md0 (!!!) anpassen, damit die /dev/md0 als root nehmen. Wenn er auf einer anderen Partition liegen wird, Bootloader neu installieren. Grub2 module: raid und mdraid. Am einfachsten ist es Grub und somit /boot auf einer 500MB nicht-RAID ext3 Partition zu haben. Das vermeidet jede Art von Problemen, auch das einfügen der Module.

8. Vom RAID booten und 'missing' durch /dev/ram0 ersetzen. Dazu schrob ich folgendes Script und band es via Kernel Bootparamter "init=/test" ganz am Anfang des Bootvorgangs ein:
Code:
#!/bin/sh
#erzeugt die /dev/ram* mit der richtigen größe
modprobe rd rd_size=1000000
#kündigt es an
echo Loading disk into RAM...
#tut es
mdadm -a /dev/md0 /dev/ram0
#fährt mit dem normalen booten fort
exec /sbin/init


LVM Methode:

Vorteile: LVs lassen sich dynamisch in der Größe anpassen (wenn man Lust zu hat), um immer nur ungefähr den wirklich benötigten Platz im RAM zu belegen. Load-balancing beim Lesen sollte default sein.

Nachteile: Unrobuster? Schreiben ist langsam, da es mindestens gleichberechtigt auf der HDD passiert.


Btrfs Methode:

Vorteile: Alle von btrfs bekannten. Z.b. Checksumming, schützt vor bit-flips im RAM, da man wohl kein ECC hat. Wobei allerdings Consumer-Festplatten fast die gleiche Fehlerrate wie RAM haben, trotzdem nett zu haben. Nur der wirklich belegte Platz liegt auch im RAM. Kompression, in Anbetracht der Bandbreite aber vielleicht eher kontraproduktiv.

Nachteile: Noch nicht ganz ausgereift. Platzbedarf im Vergleich zu alten Dateisystemen etwas erhöht durch Features wie copy-on-write (ausschalten??) und Checksumming (gering). Schreiben ist langsam, da es mindestens gleichberechtigt auf der HDD passiert. Eventuell kein Load-Balancing? Das wäre fatal...


Rsync o.ä. Methode:

Man erstellt eigentlich kein RAID1 sondern kopiert stupide in einem festgelegten Intervall die geänderten Daten auf die HDD.

Vorteile: Fast kein Leistungsverlust, auch beim Schreiben. Selbstbestimmte Art der Rücksicherung.

Nachteile: Alte Daten, kein Journal, Steinzeittechnik. Script so umständlich wie man es möchte.


ZFS Methode:

Unter Linux wünsche ich dabei viel Spaß :D


Persönliches Fazit: Ich kauf mir eine SSD und bring preload bei deutlich mehr RAM zu nutzen :lol:
 
Interessiert das in Zeiten von immer schneller und günstiger werdenden SSDs überhaupt noch jemanden? Dieses „Gefrickel“ tut sich doch freiwillig keiner an, SSD einbauen und fertig.
 
Danke für die Gegenüberstellung der einzelnen Methoden. :)

Naja, stimmt natürlich, was du schreibst. Die erste Variante wäre sicher die eleganteste, aber nur schwer realisierbar.

Gigabyte hatte doch mal den i-Ram im Angebot. Eine v2 war angekündigt, ich weiß aber nicht, ob sie überhaupt erschienen ist. Die erste Generation gibt's bei US-Amazon ab 80 USD.

Ich weiß nicht. Für mich ist eine SSD mit dem TEMP-Verzeichnis im Ram völlig ausreichend. Und leise ist es auch noch. :)
 
also die mdadm methode kann man innerhalb einer halben stunde realisieren, wenn man weiß was man tut. inklusive abspecken der systempartition ;) bin da momentan bei 3,5GB.

die i-Ram geräte und ähnliche laufen meistens über eine langsame schnittstelle wie PCI und IDE. aber selbst mit SATA oder PCIe haben die geräte die ich bisher gesehen hab deutliche performanceprobleme, da z.b. viel zu hohe latenzen. und weniger arbeit als gleich den system-ram zu nutzen ist das auch nicht wirklich finde ich ^^

mal vorausgesetzt es ist deutlich schneller als eine SSD so ist es doch für spezielle einsatzzwecke und poweruser eine idee wert. leider kann ich noch keinen vergleich mit einer SSD fahren, weil ich keine habe... da hoff ich auf andere spielkinder hier :)

durchsetzen wird sich das aber natürlich nie, schon weil der vorteil beim einsatz einer SSD statt HDD weiter schrumpft.
 
Coole Sache, werde es wenn ich Zeit habe mal auf einen alten Laptop ausprobieren.

Mal sehen wie kaputt man das System machen kann xD
 
das kernproblem ist ja das nachträgliche einrichten eines RAID1. dazu sollte man auch viele artikel und tipps finden wenn man danach sucht.
mit der ramdisk-aktion selbst kann man eigentlich nichts kaputt machen :)
 
Zurück
Oben