GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich den beim Kopieren verwendeten Cache begrenzen, damit noch Speicher für andere Caches verfügbar ist?

Der Befehl nocache ist die allgemeine Antwort auf dieses Problem! Siehe https://github.com/Feh/nocache oder finden Sie es in Debian und Ubuntu 13.10 (frech).

Danke, Peter, dass du uns auf die Option --drop-cache" in rsync aufmerksam gemacht hast. Aber das wurde von den Originalautoren abgelehnt (Bug 9560 – drop-cache option), zugunsten einer allgemeineren Lösung dafür:dem neuen Befehl "nocache". basierend auf der rsync-Arbeit mit fadvise.

Sie müssen einfach "nocache" jedem gewünschten Befehl voranstellen. Es hat auch nette Dienstprogramme zum Beschreiben und Ändern des Cache-Status von Dateien. Z.B. Hier sind die Effekte mit und ohne Nocache:

$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%)  [filesize=7776.2K, pagesize=4K]
$ ./nocache cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%)  [filesize=7776.2K, pagesize=4K]\
$ cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 1945/1945 (100.0%)  [filesize=7776.2K, pagesize=4K]

Hoffentlich funktioniert das auch mit anderen Sicherungsprogrammen (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar usw.) und anderen Befehlen, die Ihren Cache nicht zerstören sollen.


Kristof Provost war sehr nah dran, aber in meiner Situation wollte ich weder dd verwenden noch meine eigene Software schreiben, also bestand die Lösung darin, die Option „--drop-cache“ in rsync zu verwenden.

Ich habe dies viele Male verwendet, seit ich diese Frage erstellt habe, und es scheint das Problem vollständig zu beheben. Eine Ausnahme war, wenn ich rsync zum Kopieren von einem FreeBSD-Rechner verwende, der "--drop-cache" nicht unterstützt. Also habe ich einen Wrapper geschrieben, um den Befehl /usr/local/bin/rsync zu ersetzen und diese Option zu entfernen, und jetzt funktioniert auch das Kopieren von dort.

Es verwendet immer noch eine riesige Menge an Speicher für Puffer und scheint fast keinen Cache zu behalten, funktioniert aber trotzdem reibungslos.

$ free
             total       used       free     shared    buffers     cached
Mem:      24731544   24531576     199968          0   15349680     850624
-/+ buffers/cache:    8331272   16400272
Swap:      4194300     602648    3591652

Der Kernel kann nicht wissen, dass Sie die zwischengespeicherten Daten vom Kopieren nicht erneut verwenden werden. Das ist Ihr Informationsvorsprung.

Aber Sie könnten die Swapiness auf 0 setzen:sudo sysctl vm.swappiness=0. Dies bewirkt, dass Linux den Cache löscht, bevor Bibliotheken usw. in den Swap geschrieben werden.

Funktioniert auch gut für mich, besonders sehr performant in Kombination mit riesigem RAM (16-32 GB).


Linux
  1. So löschen Sie den Speichercache in Linux

  2. Linux – Wie erhält man die Menge an verfügbarem Speicher portabel über Distributionen hinweg?

  3. Wie kann ich die tatsächliche Speichernutzung einer Anwendung oder eines Prozesses messen?

  4. So bereinigen Sie Caches, die vom Linux-Kernel verwendet werden

  5. Wie kann ich die Trefferanzahl für jede Regel in iptables überprüfen?

CentOS / RHEL 6 :So begrenzen Sie Speicherressourcen für einen bestimmten Benutzer mithilfe von cgroups

CentOS / RHEL :So priorisieren Sie die Geräte, die für die Swap-Partition verwendet werden

Wie kann ich *nur* die Anzahl der auf einer Festplatte verfügbaren Bytes in Bash abrufen?

Wie kann ich die Speichernutzung jedes Prozesses anzeigen, wenn ich ein 'ps -ef' mache?

So begrenzen Sie den Speicher für einen von systemd verwalteten Dienst

Wie kann ich einen Speicherblock aus dem Linux-Kernel reservieren?