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.
Antworten:
Dies ist keine gute Idee TM .
Sie werden mit einer großen
/tmp
Partition, die so montiert ist (von Ihrer/etc/fstab
)Und Sie können Ihr externes Laufwerk als riesige Swap-Partition hinzufügen
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
/tmp
mit einem nicht protokollierten Dateisystem mit deaktiviertem atime und diratime (z. B.ext2
) bereitstellen . Das wäre wesentlich schneller als mit einer Maschine handelt , die sichSWAP
ingquelle
tmp
Zugriff benötigt.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.
quelle
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-init
ist das Programm, das das Einrichten von zram automatisiert, einem komprimierten RAM-Block-Gerät. In derzram-init
Konfiguration gibt es normalerweise ein Beispiel für das Mounten/tmp
als zram. Es wird ungefähr so seinDadurch 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.
quelle