GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je limiter le cache utilisé par la copie afin qu'il y ait encore de la mémoire disponible pour un autre cache ?

La commande nocache est la réponse générale à ce problème ! Voir https://github.com/Feh/nocache ou le trouver dans Debian et Ubuntu 13.10 (saucy).

Merci, Peter, de nous avoir alertés sur l'option --drop-cache" dans rsync. Mais cela a été rejeté en amont (Bug 9560 - option drop-cache), en faveur d'une solution plus générale pour cela :la nouvelle commande "nocache" basé sur le travail de rsync avec fadvise.

Vous venez d'ajouter "nocache" à n'importe quelle commande que vous voulez. Il a également de bons utilitaires pour décrire et modifier l'état du cache des fichiers. Par exemple. voici les effets avec et sans 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]

J'espère donc que cela fonctionnera pour d'autres programmes de sauvegarde (rsnapshot, duplicity, rdiff-backup, amanda, s3sync, s3ql, tar, etc.) et d'autres commandes que vous ne voulez pas supprimer de votre cache.


Kristof Provost était très proche, mais dans ma situation, je ne voulais pas utiliser dd ou écrire mon propre logiciel, donc la solution était d'utiliser l'option "--drop-cache" dans rsync.

Je l'ai utilisé plusieurs fois depuis la création de cette question, et cela semble résoudre complètement le problème. Une exception était lorsque j'utilisais rsync pour copier à partir d'une machine FreeBSD, qui ne prend pas en charge "--drop-cache". J'ai donc écrit un wrapper pour remplacer la commande /usr/local/bin/rsync et supprimer cette option, et maintenant cela fonctionne également en copiant à partir de là.

Il utilise toujours une énorme quantité de mémoire pour les tampons et semble ne conserver presque aucun cache, mais fonctionne de toute façon sans problème.

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

Le noyau ne peut pas savoir que vous n'utiliserez pas les données mises en cache en les copiant à nouveau. C'est votre avantage informationnel.

Mais vous pouvez définir le swapiness sur 0 :sudo sysctl vm.swappiness=0. Cela entraînera la suppression du cache par Linux avant que les bibliothèques, etc. ne soient écrites dans le swap.

Fonctionne bien pour moi aussi, particulièrement très performant en combinaison avec une énorme RAM (16-32 Go).


Linux
  1. Comment effacer le cache mémoire sous Linux

  2. Comment puis-je mesurer l'utilisation réelle de la mémoire d'une application ou d'un processus ?

  3. Comment nettoyer les caches utilisés par le noyau Linux

  4. Comment puis-je *uniquement* obtenir le nombre d'octets disponibles sur un disque en bash ?

  5. Comment puis-je répertorier les modes vidéo disponibles pour une webcam USB sous Linux ?

Comment puis-je afficher l'utilisation de la mémoire de chaque processus si je fais un 'ps -ef' ?

Comment puis-je déterminer la taille actuelle de l'ARC dans ZFS, et comment l'ARC est-il lié à la mémoire libre ou cache ?

Comment limiter la mémoire pour un service géré par systemd

Comment puis-je tester la RAM pour la corruption des données sur un système basé sur ARM ?

Comment puis-je réserver un bloc de mémoire à partir du noyau Linux ?

Comment puis-je obtenir la quantité de mémoire disponible de manière portable entre les distributions ?