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:
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:
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ß
Persönliches Fazit: Ich kauf mir eine SSD und bring preload bei deutlich mehr RAM zu nutzen
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ß
Persönliches Fazit: Ich kauf mir eine SSD und bring preload bei deutlich mehr RAM zu nutzen