Tmpfs tauschen (Natürlich eine schlechte Idee, aber ist das möglich?)

11

Diese Frage entstand aus einem Witz zwischen Mitarbeitern über die Leistungssteigerung durch Verschieben von Auslagerungsdateien in ein tmpfs. Selbst wenn dies möglich ist, ist dies natürlich keine gute Idee. Ich möchte nur wissen, ob es möglich ist.

Ich bin derzeit auf Ubuntu 14.04, aber ich würde mir vorstellen, dass der Prozess für die meisten Linux / Unix-Maschinen ähnlich ist. Folgendes mache ich:

> mkdir /mnt/tmp
> mount -t tmpfs -o size=10m tmpfs /mnt/tmp
> dd if=/dev/zero of=/mnt/tmp/swapfile bs=1024 count=10240
> chmod 600 /mnt/tmp/swapfile
> mkswap /mnt/tmp/swapfile
# So far, so good!

> swapon /mnt/tmp/swapfile
swapon: /mnt/tmp/swapfile: swapon failed: Invalid argument

Können Sie unter Linux oder Unix (ich bin an einer Lösung interessiert) einen Swap für eine Datei / Partition einrichten, die sich in RAM befindet? Gibt es einen Weg, um den Invalid argumentFehler zu umgehen, den ich oben bekomme?

Ich möchte noch einmal betonen, dass ich nicht erwarte, dass dies eine Lösung für ein reales Problem ist. Nur ein lustiges Experiment, denke ich.

weit überlegen
quelle
Suchen Sie zram?
Frostschutz

Antworten:

1

Können Sie unter Linux oder Unix (ich bin an einer Lösung interessiert) den Swap für eine Datei / Partition einrichten, die sich im RAM befindet?

Sicher. Auf FreeBSD:

# swapinfo -h
Device          1024-blocks     Used    Avail Capacity
/dev/mirror/swap.eli     4194300       0B     4.0G     0%

Das zeigt, dass ich derzeit eine 4G-verschlüsselte Swap-Partition mit gespiegelter Redundanz habe. Ich werde ein weiteres 4G nicht redundanten, nicht verschlüsselten Swap hinzufügen:

Erstellen Sie zunächst ein 4G RAM-gestütztes "Speicherdatenträger" ( md):

# mdconfig -a -t malloc -s 4g; mdconfig -lv
md0
md0     malloc   4096M  -

Sagen Sie swapondann, dass Sie das zum Pool der verfügbaren Swap-Geräte hinzufügen sollen, und swapinfobestätigen Sie, dass ich jetzt 8G Swap habe:

# swapon /dev/md0; swapinfo -h
Device          1024-blocks     Used    Avail Capacity
/dev/mirror/swap.eli     4194300       0B     4.0G     0%
/dev/md0            4194304       0B     4.0G     0%
Total               8388604       0B     8.0G     0%
Jim L.
quelle
Das Häkchen "Akzeptierte Antwort" nach 4 Jahren zu verschieben, ist eine schwierige Entscheidung. Diese Antwort zeigt, dass es einen Weg gibt! mdconfig(8)enthält einen Hinweis, dass das Weglassen der -o reserveOption "eine sehr einfache Möglichkeit ist, ein System in Panik zu versetzen". Es wird auch darauf hingewiesen, dass der Typ eingestellt werden kann, swapder das sehr unterhaltsame Szenario eines Systems ermöglicht, das Speicherseiten in einen Swap verschiebt, der sich selbst im Speicher befindet! Es gibt sogar eine Option -o forcefür Dummies wie mich, die "zusätzliche Gesundheitsprüfungen" weglassen möchten. Ich hatte ein gutes Lachen beim Lesen.
Vastlysuperiorman
10

Es sollte nicht möglich sein. swaponSystemaufruf erfordert readpageund bmap(indirekt) Aufrufe, die vom Dateisystem implementiert werden:

http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412

if (!mapping->a_ops->readpage) {
    error = -EINVAL;
    goto bad_swap;
}   

Da jedoch keine von ihnen von tmpfs implementiert wird , fehlt ein solcher Eintrag in der entsprechenden Dateiaddress_space_operations : http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104

Aus dem gleichen Grund können tmpfs keine Loop-Mounts enthalten, und Ramfs funktionieren auch nicht (es gibt keinen bmapAufruf).

myaut
quelle
3

Aus diesen Fragen und Antworten /superuser/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem (die ursprünglich referenzierte Site antwortet nicht):

"Ungültiges Argument" sollte daher als "Ihr Dateisystem unterstützt keine Auslagerungsdatei" gelesen werden.

Der Grund für die Inkompatibilität, den ich vermute, ist eine "zirkuläre Abhängigkeit". Aus diesem Artikel: http://www.jamescoyle.net/knowledge/951-the-difference-between-a-tmpfs-and-ramfs-ram-disk :

Diese beiden Unterschiede zwischen ramfs und tmpfs machen tmpfs viel einfacher zu handhaben, dies ist jedoch ein Hauptnachteil. tmpfs kann SWAP-Speicherplatz verwenden. Wenn auf Ihrem System kein physischer RAM mehr vorhanden ist, werden Dateien in Ihren tmpfs-Partitionen möglicherweise auf festplattenbasierte SWAP-Partitionen geschrieben und müssen beim nächsten Zugriff auf die Datei von der Festplatte gelesen werden.

Was in Ihrem Szenario so gut wie unmöglich wäre.

Es könnte funktionieren ramfs, obwohl - was dieses Problem nicht hat.

Dan Cornilescu
quelle
Ja - tmpfsWenn Sie eine Partition als Swap festlegen, wird eine Endlosschleife gestartet, wenn die Maschine mit dem Swap beginnt.
dr_
1

Sie können die Probleme mit fehlenden Funktionen leicht vermeiden und zu tmpfs wechseln, wenn auch etwas indirekt:

dd if=/dev/zero bs=1M of=/tmp/swapfs count=128
chmod 0600 /tmp/swapfs
mkfs.ext2 /tmp/swapfs
mount -o loop /tmp/swapfs /mnt
dd if=/dev/zero bs=1M of=/mnt/swap
mkswap /mnt/swap
swapon /mnt/swap

In Kombination mit zswap sah es nach einer großartigen "Memory Expander" -Lösung aus, bis mein RasPi4 fast vollständig eingefroren war (SSH-Konsole eingefroren, X eingefroren, Youtube in Chrom sprach einige Minuten lang und auch eingefroren, aber das System antwortete auf Pings und Watchdog nicht Ich habe nichts Nützliches getan. Das Starten über ssh (bevor das passiert ist) auf der Oberseite zeigte auch nichts Außergewöhnliches - es schien genügend freien RAM- und Swap-Speicherplatz zu geben. Tatsächlich eine ähnliche Idee mit OpenSolaris (Swap auf ein komprimiertes zvol). zu einem ähnlichen Ergebnis führen.

Unisol
quelle
@Jesse_b, würde es einen Unterschied machen, eine Bindung anstelle eines Loop-Mount für diese Datei durchzuführen?
4.
@rjt: Nicht sicher. Ich habe die Antwort nicht geschrieben, sondern nur bearbeitet.
Jesse_b
@unisol, ist deine Swap-Datei über das hinaus gewachsen, was beabsichtigt war? Speicherplatz füllen
4.
1
Wo genau wird RAM tatsächlich verwendet? Es sieht so aus, als würde eine Datei auf / tmp / erstellt, die über Neustarts auf meinem Computer hinweg bestehen bleibt.
4.
Es war beabsichtigt, dass Sie tmpfs in / tmp gemountet haben (es ist gut in Bezug auf "Nach dem Neustart bleibt nichts mehr übrig" und wird häufig in eingebetteten Setups verwendet, ist aber gefährlich, wenn Sie wenig RAM haben und unangenehm, wenn etwas nicht in Ihr / tmp passt - wie mc mehrere Archivgigs auspacken). Der Themenstarter konnte keine Swap-Datei mit einem RAM-basierten Dateisystem abrufen. Ich erstelle einfach eine Datei darin, formatiere sie in den FS, der über die erforderlichen Funktionen verfügt (z. B. ext2), und erstelle einen Swap auf diesem FS. Zusätzliche Reifen & Schleifen - aber das Ziel ist erreicht.
Unisol