Verwenden Sie tmpfs + eine sehr große Swap-Partition für / tmp anstelle eines regulären Dateisystems?

8

Ich habe einen Linux-Server und eine freie 500-GB-Festplattenpartition. Ich wollte es formatieren und für / tmp verwenden. Der Server führt gelegentlich einige große Datenverarbeitungsaufgaben aus, sodass es vorkommen kann, dass / tmp GB temporärer Daten enthält.

Dann kam mir die Idee, dass ich es stattdessen als Swap-Partition hinzufügen und / tmp zu tmpfs einbinden könnte. Ist diese Idee vernünftig?

Der Server verfügt über 6 GB RAM, sodass sich die Daten auf / tmp in den meisten Fällen nur im RAM befinden, mit dem offensichtlichen Geschwindigkeitsvorteil. Die Frage ist, was ist, wenn es 10-20 GB Daten auf / tmp geben wird, wie wird das System funktionieren? Was wäre die Leistung im Vergleich dazu, wenn einfach / tmp auf einer ext4-Partition gemountet wäre? Danke für die Hilfe.

Bearbeiten: Es ist klar, dass das System den Speicher austauscht, wenn die Verwendung von tmpfs das RAM-Limit erreicht. Aber ist Linux intelligent genug, um tmpfs-Daten auszutauschen und "normale" Daten im RAM zu behalten? Wenn ja, dann könnte es sich vernünftigerweise verhalten. Wenn nicht, ist das gesamte System stark betroffen.

Petr Pudlák
quelle
Vergiss Zram nicht.
Ken Sharp

Antworten:

12

Dies ist keine gute Idee TM .

Sie werden mit einer großen /tmpPartition, die so montiert ist (von Ihrer /etc/fstab)

tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0

Und Sie können Ihr externes Laufwerk als riesige Swap-Partition hinzufügen

/dev/sdb1  swap  swap  defaults  0 0

Wenn dies an seine Grenzen stößt, beginnt Ihr Computer, die Seiten vom RAM auf die Festplatte zu tauschen. An diesem Punkt gehen die durchschnittlichen Lastwerte durch das Dach und der Computer kommt zum Stillstand.

Es ist eine schlechte Idee, sich in irgendeiner Weise auf SWAP zu verlassen. Sie sollten Ihr 500-GB-Laufwerk besser verkaufen und einfach mehr RAM kaufen - es ist billig.

Zusammenfassend

Wenn Sie Ihre 500-GB-Festplatte wirklich verwenden möchten, können Sie Ihre 500-GB-Festplatte /tmpmit einem nicht protokollierten Dateisystem mit deaktiviertem atime und diratime (z. B. ext2) bereitstellen . Das wäre wesentlich schneller als mit einer Maschine handelt , die sich SWAPing

Fran
quelle
1
Dies ist eine schreckliche Idee. Die Verwendung von tmpfs und das Verlassen darauf, dass sie zum Tauschen gepusht werden, klingt nach einer Idee ... aber die Realität ist, dass Ihr System möglicherweise die falschen Dinge zum Tauschen pusht, um tmpfs im physischen RAM zu halten. Sie sollten Ihre 500-GB-Partition einfach auf / tmp mounten und damit fertig sein. Ich würde vorschlagen, ein extrem leichtes Dateisystem wie xfs of riserfs zu verwenden ... da Sie es beim Start oder bei Bedarf schnell neu formatieren können ... und Sie wirklich nicht alle erweiterten Funktionen von benötigen ext2 / 3/4 und so.
TheCompWiz
3
Warum das Downvote? Ich habe diese Aktion nicht gutgeheißen - sondern ein Mittel bereitgestellt, wie es geht. Die Frage war, ob es möglich war und wie man es macht - nicht, ob es eine gute Idee war oder nicht. Ich hatte ausdrücklich erklärt, dass dies eine schlechte Idee ist - und dass die eigentliche Lösung darin bestehen sollte, mehr RAM zu kaufen, wenn er einen schnelleren tmpZugriff benötigt.
Fran
1
Dies ist ein Ort für gute Ideen ... nicht für Klebeband- und Kaugummilösungen. Die Leute kommen hierher, um Hilfe zu holen ... und nicht um Ideen zu bekommen, wie sie ihr Leben zur Hölle machen können.
TheCompWiz
Ich habe meine Antwort entsprechend Ihrem Kommentar bearbeitet, danke für Ihre Eingabe
Fran
3
Alle hier scheinen zuzustimmen, dass dies eine schlechte Idee ist. In der Dokumentation zu tmpfs.txt in der Kernel wird dies jedoch als einer der Anwendungsfälle für tmpfs aufgeführt. @Fran, haben Sie Daten, die Ihre beängstigende Behauptung stützen, dass dies zu Prügeln führen würde? Offensichtlich hängt dies davon ab, was auf / tmp weitergeht.
Migle
1

Dies könnte eine vernünftige Idee sein.

Das Einfügen eines tatsächlichen Dateisystems in / tmp verursacht Overheads, da Dateisysteme große Anstrengungen unternehmen, um sicherzustellen, dass die Daten auf der Festplatte bei einem Systemausfall nicht beschädigt werden. Für ein / tmp, das beim Booten bereinigt wird, ist das offensichtlich nur Overhead. Die Verwendung eines tmpfs würde diesen Overhead vermeiden.

Andererseits stellen Dateisysteme auch sicher, dass Dateien auf der Festplatte so organisiert sind, dass die Zugriffszeit optimiert wird - dh Fragmentierung wird vermieden. Typische sequentielle Dateizugriffe führen (meistens) zu sequentiellen Datenträgerzugriffen, die effizienter sind als zufällige Zugriffe. Dieser Effekt ist bei sich drehenden Festplatten stärker ausgeprägt als bei SSDs. Die Kombination swap + tmpfs kann dies nicht einfach tun, da swap nicht weiß, welcher Speicher zu welcher Datei gehört, und tmpfs nicht weiß, wie Seiten dem physischen Speicher oder der Festplatte zugeordnet werden. Für große Dateien sollte es jedoch gut funktionieren, da sowohl tmpfs als auch swap versuchen, die Dinge in diesem Fall zusammenhängend zu halten. Zumindest solange beim Swap viel freier Speicherplatz vorhanden ist (andernfalls setzt die Fragmentierung ein) und das Schreiben langsam genug erfolgt, dass die Chance besteht, dass sie ausgetauscht werden.

Das Fazit lautet also: Es kommt darauf an, dass Sie beide Optionen ausprobieren sollten, um herauszufinden, welche am besten funktioniert.

Denken Sie beim Mounten der tmpfs daran, die Größe explizit festzulegen. Der Standardwert ist die Hälfte des physischen Arbeitsspeichers, also nur 3 GB.

Arnout
quelle
- die vernünftige Antwort (die ironischerweise viel tiefer als die andere ist)
poige
1

Dies ist eigentlich eine gute Idee, wenn Sie normalerweise nicht viele Daten haben /tmp, aber gelegentlich endlose Gigabyte für eine begrenzte Dauer verbrauchen. Das Problem ist, dass das Linux-Swap-System nicht genug über Ihren Anwendungsfall weiß, um es richtig zu machen. Im Allgemeinen wird das Speichern oder Vertauschen des Caches gegenüber den Programmseiten priorisiert, aber das hilft nicht wirklich. Es kann möglich sein, cgroups zu verwenden, um Ihr Ziel zu erreichen. Dies ist der Fall, wenn die Arbeitsdaten im Programmspeicher gespeichert sind. Ich bin mir jedoch nicht sicher, wie cgroups in diesem Fall konfiguriert werden sollen (ich nehme an, Sie könnten ein FUSE-tmpfs verwenden ...). . Zum Glück ist das nicht erforderlich. Sie können das gewünschte Verhalten mit zram und einem Sicherungsgerät erzielen.

zram-initist das Programm, das das Einrichten von zram automatisiert, einem komprimierten RAM-Block-Gerät. In der zram-initKonfiguration gibt es normalerweise ein Beispiel für das Mounten /tmpals zram. Es wird ungefähr so ​​sein

type0=/tmp
flag0= 
size0=524288 # 500G of logical space
mlim0=2G # 2G of memory
back0=/dev/loop0 # (or /dev/sdxN, your large slow drive)
notr0= 
maxs0=4 # maximum number of parallel processes for this device
algo0=zstd 
labl0=tmp # the label name
uuid0= 
args0= 

Dadurch wird alles, was in / tmp geschrieben wurde, komprimiert und im Speicher gespeichert. Die übliche Komprimierung liegt bei etwa 50%. Es verbraucht höchstens 2 G physischen Speicher. Wenn der physische Speicher knapp wird, werden die ältesten Dateien auf das noch komprimierte Sicherungsgerät übertragen. Beachten Sie, dass das Komprimieren und Dekomprimieren der Dateien einen gewissen CPU-Overhead verursacht. Dies wird jedoch normalerweise durch die reduzierte E / A ausgeglichen.

Ein ähnliches Setup kann in Verbindung mit cgroups verwendet werden, um bestimmte Prozesse auszutauschen, ohne die Gesamtsystemleistung zu beeinträchtigen.

Perkins
quelle