Ich besitze einen ziemlich alten Server mit 4 GB RAM, der fast den ganzen Tag die gleichen Dateien bereitstellt, dies jedoch von der Festplatte, während 3 GB RAM "frei" sind.
Jeder, der jemals versucht hat, einen Ram-Drive zu fahren, kann bezeugen, dass es in Bezug auf die Geschwindigkeit fantastisch ist . Der Speicherverbrauch dieses Systems ist normalerweise nie höher als 1 GB / 4 GB, daher möchte ich wissen, ob es eine Möglichkeit gibt, diesen zusätzlichen Speicher für etwas Gutes zu verwenden.
- Kann das Dateisystem angewiesen werden, bestimmte Dateien immer außerhalb des Arbeitsspeichers bereitzustellen?
- Gibt es andere Methoden, mit denen ich die Lesefähigkeit von Dateien mithilfe des Arbeitsspeichers verbessern kann?
Genauer gesagt, ich suche hier keinen "Hack". Ich möchte, dass Dateisystemaufrufe die Dateien aus dem RAM bedienen, ohne ein RAM-Laufwerk erstellen und die Dateien manuell kopieren zu müssen. Oder zumindest ein Skript, das das für mich erledigt.
Mögliche Anwendungen sind hier:
- Webserver mit statischen Dateien, die häufig gelesen werden
- Anwendungsserver mit großen Bibliotheken
- Desktop-Computer mit zu viel RAM
Irgendwelche Ideen?
Bearbeiten:
- Fanden das sehr informativ: Der Linux Page Cache und pdflush
- Wie Zan betonte, ist der Speicher nicht frei. Ich meine, es wird nicht von Anwendungen verwendet und ich möchte steuern, was im Speicher zwischengespeichert werden soll.
quelle
Antworten:
vmtouch scheint ein gutes Werkzeug für den Job zu sein.
Höhepunkte:
vmtouch manual
BEARBEITEN: Die in der Frage gestellte Verwendung ist in Beispiel 5 auf vmtouch Hompage aufgeführt
EDIT2: Wie in den Kommentaren vermerkt , ist jetzt ein Git-Repository verfügbar.
quelle
vmtouch
passt gut in diese Nische.Dies ist auch möglich , die Verwendung von vmtouch Virtual Memory Toucher Dienstprogramm .
Mit diesem Tool können Sie den Dateisystem-Cache auf einem Linux-System steuern. Sie können eine bestimmte Datei oder ein bestimmtes Verzeichnis im VM-Cache-Subsystem erzwingen oder sperren oder damit überprüfen, welche Teile einer Datei / eines Verzeichnisses in der VM enthalten sind.
Oder...
quelle
Der Trick eines armen Mannes, Dinge in den Dateisystem-Cache zu bekommen, besteht darin, sie einfach zu katerisieren und sie nach / dev / null umzuleiten.
quelle
cat
erstellen Sie in regelmäßigen Abständen einen Cron-Job, in dem die Datei in / dev / null abgelegt wirdLinux speichert so viel Festplatten-IO wie möglich im Arbeitsspeicher. Dies sind die Cache- und Pufferspeicherstatistiken. Es wird wahrscheinlich besser funktionieren als Sie, wenn Sie die richtigen Dinge aufbewahren.
Wenn Sie jedoch darauf bestehen, Ihre Daten im Arbeitsspeicher zu speichern, können Sie ein RAM-Laufwerk mit tmpfs oder ramfs erstellen. Der Unterschied besteht darin, dass RAMFS den gesamten von Ihnen angeforderten Speicher zuweist, da tmpfs nur den Speicher verwendet, den Ihr Block-Gerät verwendet. Mein Gedächtnis ist ein wenig verrostet, aber Sie sollten in der Lage sein, Folgendes zu tun:
oder
und dann kopieren Sie Ihre Daten in das Verzeichnis. Offensichtlich gehen Ihre Daten verloren, wenn Sie den Computer ausschalten oder die Bereitstellung dieser Partition aufheben.
quelle
Nach einigem gründlichen Lesen der 2.6er Kernel-Swap- und Page-Caching-Funktionen habe ich 'fcoretools' gefunden. Welches besteht aus zwei Werkzeugen;
(Falls jemand anderes dies interessant findet, poste ich dies hier)
quelle
Es gibt zwei Kernel-Einstellungen, die auch ohne Verwendung anderer Tools erheblich helfen können:
swappiness
teilt dem Linux-Kernel mit, wie aggressiv er Swap verwenden soll. Zitiert den Wikipedia-Artikel:
vfs_cache_pressure
Zitat aus vm.txt :
Durch Setzen von
swappiness
high (wie 100) verschiebt der Kernel alles, was nicht ausgetauscht werden muss, wodurch RAM für das Zwischenspeichern von Dateien frei wird. Wenn Sie einevfs_cache_pressure
niedrigere Einstellung wählen (sagen wir 50, nicht 0!), Werden die Dateien im Cache gespeichert, anstatt die Anwendungsdaten im RAM zu belassen.(Ich arbeite an einem großen Java-Projekt, und jedes Mal, wenn ich es ausführe, hat es viel RAM beansprucht und den Festplatten-Cache geleert. Beim nächsten Kompilieren des Projekts wurde also alles erneut von der Festplatte gelesen. Durch Anpassen dieser beiden Einstellungen verwalte ich um die Quellen und die kompilierte Ausgabe im RAM zwischenzuspeichern, was den Prozess erheblich beschleunigt.)
quelle
Ich bezweifle sehr, dass es sich tatsächlich um Dateien von der Festplatte mit 3 GB RAM handelt. Das Zwischenspeichern von Linux-Dateien ist sehr gut.
Wenn Sie Datenträger-E / A sehen, würde ich Ihre Protokollierungskonfigurationen untersuchen. Viele Protokolle werden als ungepuffert festgelegt, um sicherzustellen, dass im Falle eines Absturzes die neuesten Protokollinformationen verfügbar sind. Verwenden Sie in Systemen, die dennoch schnell sein müssen, gepufferte Protokoll-E / A-Vorgänge oder einen Remote-Protokollserver.
quelle
Wenn Sie viel Speicher haben, können Sie einfach die Dateien einlesen, die Sie mit cat oder ähnlichem zwischenspeichern möchten. Linux wird dann einen guten Job machen, um es am Laufen zu halten.
quelle
Möglicherweise können Sie ein Programm haben, das nur
mmap
Ihre Dateien enthält und dann ausgeführt wird.quelle
Es gibt verschiedene RAMFS-Systeme, die Sie verwenden können (z. B. RAMFS, TMPFS). Wenn jedoch Dateien tatsächlich so oft gelesen werden, befinden sie sich in Ihrem Dateisystem-Cache. Wenn Ihr Arbeitsspeicher größer ist als Ihr freier Arbeitsspeicher, werden die Dateien gelöscht. Wenn Ihr Arbeitsspeicher jedoch größer ist als Ihr freier Arbeitsspeicher, können Sie auch nicht alles in eine RAM-Disk einbauen.
Überprüfen Sie die Ausgabe des Befehls "free" in einer Shell. Der Wert in der letzten Spalte unter "Cached" gibt an, wie viel von Ihrem freien RAM für den Dateisystem-Cache verwendet wird.
quelle
Stellen Sie bei Ihrer letzten Frage sicher, dass sich Ihr RAM auf verschiedenen Speicherkanälen befindet, damit der Prozessor die Daten parallel abrufen kann.
quelle
Ich denke, dies könnte auf Anwendungsebene besser gelöst werden. Zum Beispiel gibt es dafür wahrscheinlich spezialisierte Webserver, oder Sie könnten mod_cache mit Apache in Betracht ziehen . Wenn Sie ein bestimmtes Ziel haben, beispielsweise das schnellere Bereitstellen von Webinhalten, können Sie Verbesserungen erzielen, die ich denke.
Ihre Frage ist jedoch allgemeiner Natur. Das Linux-Speichersubsystem wurde entwickelt, um die bestmögliche allgemeine Nutzung des Arbeitsspeichers zu gewährleisten. Wenn Sie auf bestimmte Leistungstypen abzielen möchten, ziehen Sie in Betracht, alles in / proc / sys / vm nachzuschlagen.
Das Paket fcoretools ist interessant, ich würde mich für Artikel über seine Anwendung interessieren ... Dieser Link beschreibt die tatsächlichen Systemaufrufe, die in einer Anwendung verwendet werden.
quelle
Desktop-Computer (z. B. Ubuntu) verwenden bereits das Vorabladen von Dateien (zumindest gängige gemeinsam genutzte Bibliotheken), um beim Booten Speicherplatz freizugeben. Es wird verwendet, um das Booten und Starten verschiedener Bloarware wie FF, OO, KDE und GNOME (mit dem evolution bloat-mailer) zu beschleunigen .
Das Tool heißt readahead http://packages.ubuntu.com/dapper/admin/readahead
Es gibt auch einen entsprechenden Syscall: readahead (2) http://linux.die.net/man/2/readahead
Es gibt auch ein Projekt zum Vorladen des Daemons: http://linux.die.net/man/8/preload
quelle
http://www.coker.com.au/memlockd/ macht das
Obwohl Sie es wirklich nicht brauchen, wird Linux die von Ihnen verwendeten Dateien ziemlich gut zwischenspeichern.
quelle
Ich habe gerade versucht, dd if = / dev / yourrootpartition von = / dev / null \ bs = 1Mcount = wievielMemoryyouwanttofill
Es gibt mir nicht die Kontrolle, die Sie wünschen, aber es versucht zumindest, verschwendeten Speicher zu nutzen
quelle
Ich benutze find / -name stringofrandomcharacter es hilft viel
quelle
Nicht genau was gefragt wurde, aber ich benutze
um die Initialisierung von Dateien in einem AWS-Volume auszulösen, das aus einem Snapshot erstellt wurde. Es ist fokussierter als die offizielle Empfehlung, dd zu verwenden, wenn Sie nur einige Dateien lesen möchten.
quelle
Manchmal möchte ich vielleicht Dateien in einem bestimmten Ordner und dessen Unterordnern zwischenspeichern. Ich gehe einfach in diesen Ordner und führe Folgendes aus:
finden . -exec cp {} / dev / null \;
Und diese Dateien werden zwischengespeichert
quelle