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 argument
Fehler 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.
Antworten:
Sicher. Auf FreeBSD:
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
):Sagen Sie
swapon
dann, dass Sie das zum Pool der verfügbaren Swap-Geräte hinzufügen sollen, undswapinfo
bestätigen Sie, dass ich jetzt 8G Swap habe:quelle
mdconfig(8)
enthält einen Hinweis, dass das Weglassen der-o reserve
Option "eine sehr einfache Möglichkeit ist, ein System in Panik zu versetzen". Es wird auch darauf hingewiesen, dass der Typ eingestellt werden kann,swap
der 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 force
für Dummies wie mich, die "zusätzliche Gesundheitsprüfungen" weglassen möchten. Ich hatte ein gutes Lachen beim Lesen.Es sollte nicht möglich sein.
swapon
Systemaufruf erfordertreadpage
undbmap
(indirekt) Aufrufe, die vom Dateisystem implementiert werden:http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
Da jedoch keine von ihnen von tmpfs implementiert wird , fehlt ein solcher Eintrag in der entsprechenden Datei
address_space_operations
: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104Aus dem gleichen Grund können tmpfs keine Loop-Mounts enthalten, und Ramfs funktionieren auch nicht (es gibt keinen
bmap
Aufruf).quelle
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):
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 :
Was in Ihrem Szenario so gut wie unmöglich wäre.
Es könnte funktionieren
ramfs
, obwohl - was dieses Problem nicht hat.quelle
tmpfs
Wenn Sie eine Partition als Swap festlegen, wird eine Endlosschleife gestartet, wenn die Maschine mit dem Swap beginnt.Sie können die Probleme mit fehlenden Funktionen leicht vermeiden und zu tmpfs wechseln, wenn auch etwas indirekt:
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.
quelle