Kernel-Kompilierungszeit

Kernel-Kompilierungszeit

Wenn ich Linux starte, habe ich automatisch 16 Ramdisks mit je 16 MB. Allerdings möchte ich zum Testen einiger Software eine wirklich große Ramdisk erstellen.

Ich habe festgestellt, dass ich die Größe der bereits im System vorhandenen Ramdisks mit dem Kernel-Boot-Parameter anpassen kann. ramdisk_sizeDadurch werden jedoch alle 16 Ramdisks (/dev/ram0 - /dev/ram15) auf die angegebene Größe gebracht. Wenn ich also eine 1 GB große Ramdisk erstellen möchte, benötige ich 16 GB Speicher.

Im Grunde möchte ich eine 10 GB große Ramdisk erstellen, die /dev/ram0 heißen würde. Wie gehe ich dabei vor? Ich gehe davon aus, dass es einen Kernel-Boot-Parameter gibt, aber ich habe ihn einfach nicht gefunden.

Antwort1

Kernel-Kompilierungszeit

Es gibt zwei Kernelkonfigurationsoptionen, die Sie in Ihrer .configDatei festlegen können:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Dadurch wurde mein Kernel so konfiguriert, dass beim Booten eine 10 GB große Ramdisk erstellt wird.

Anmerkungen:

  • CONFIG_BLK_DEV_RAM_SIZEist in KB.
  • Geben Sie nicht mehr Speicher an, als tatsächlich über RAM in Ihrem Computer verfügt.
  • Schauen menuconfigSie unter „Gerätetreiber“ -> „Blockgeräte“ nach.

Startzeit

Sie können die Größe der von Ihnen erstellten Ram-Disks über den Kernel-Boot-Parameter angeben ramdisk_size. Beispiel:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Jetzt kann ich meine Maschine booten, ein Dateisystem darauf erstellen, es mounten und es genau wie ein Blockgerät verwenden.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Quellen:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html[tot]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

Antwort2

Du solltest benutzentmpsdafür stattdessen.

mount -t tmpfs -o size=10g none /mnt/point

Antwort3

So erstellen Sie nach dem Booten eine große RAM-Disk, ohne mit Kernel-Parametern herumzuspielen. Verwenden Sie tmpfs, erstellen Sie eine Datei, mounten Sie sie über eine Schleife und mounten Sie sie über ein Dateisystem:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Wahrscheinlich ein kleiner Leistungsverlust durch das Durchlaufen mehrerer verschiedener Ebenen … aber zumindest funktioniert es.

Antwort4

Das Ziel eines Ramdrives ist die Geschwindigkeit. Tmpfs ist kein Laufwerk. Loop-Geräte sind keine Laufwerke, aber Sie können ein Laufwerksabbild auf ein Loop-Gerät legen. Ram-Disks „sind“ Laufwerke, und zwar sehr schnelle Laufwerke. Versuchen Sie Folgendes auszuführen:

hdparm -t /dev/sda 

und dann:

hdparm -t /dev/ram0

Du wirst verstehen, was ich meine! Aber hdparm zerstört manchmal das RAM-Laufwerk. Also musst du es erneut erstellen.

Manchmal sind keine /dev/ram-Geräte vorhanden. So erstellen Sie eines:

mknod -m 0777 /dev/ram0 b 1 0 

aber es hat keine Größe. So geben Sie ihm Größe:

dd if=/dev/zero of=/dev/ram0

und es wird gestoppt, wenn das Laufwerk voll ist. Die maximale Größe wird durch den Kernel-Konfigurationsparameter bestimmt: CONFIG_BLK_DEV_RAM_SIZE.

Dann formatieren Sie es einfach, d.h.

mke2fs /dev/ram0

Und montieren Sie es:

mount /dev/ram0 /mnt/ramdrive

Besonders gerne debugge ich Code, der auf einem RAM-Laufwerk gespeichert ist. Die Kompilierungen sind mindestens zehnmal schneller als Code, der auf einer Festplatte gespeichert ist. Datenbanktabellen, die auf einem RAM-Laufwerk gespeichert sind, sind ebenfalls schnell, aber Sie benötigen ein Skript, das regelmäßig auf die Festplatte schreibt. Die meisten Administratoren haben nicht den Mut, Daten auf RAM-Laufwerke zu schreiben. Und manche Tabellen sind zu groß.

verwandte Informationen