Votre question comporte différents aspects.
Premièrement, quelle est votre définition du terme "gratuit"? En réalité, ce n’est pas aussi simple que cela puisse paraître sous Linux (ou tout système d’exploitation moderne).
Comment Linux utilise la RAM (très simplifié)
Chaque application peut utiliser une partie de votre mémoire. Linux utilise toute la mémoire autrement inoccupée (à l'exception des derniers Mo) en tant que "cache". Cela inclut le cache de page, les caches d’inodes, etc. C’est une bonne chose: cela permet d’accélérer les choses. L'écriture sur le disque et la lecture à partir du disque peuvent être accélérées énormément par le cache.
Idéalement, vous avez suffisamment de mémoire pour toutes vos applications et il vous reste encore plusieurs centaines de Mo à mettre en cache. Dans cette situation, tant que vos applications n'augmentent pas l'utilisation de la mémoire et que le système ne cherche pas à obtenir suffisamment d'espace pour le cache, aucun échange n'est nécessaire.
Une fois que les applications réclament plus de RAM, elles accèdent simplement à une partie de l'espace utilisé par le cache, ce qui réduit le cache. Désaffecter le cache est assez simple et peu coûteux pour que ce soit tout simplement fait en temps réel: tout ce qui se trouve dans le cache est soit une seconde copie de quelque chose qui est déjà sur le disque, alors vous pouvez simplement le désallouer instantanément, ou c'est quelque chose que nous aimerions. ont dû vider le disque dans quelques secondes de toute façon .
Ce n'est pas une situation spécifique à Linux - tous les systèmes d'exploitation modernes fonctionnent de cette façon. Les différents systèmes d'exploitation peuvent simplement signaler la RAM libre différemment: certains incluent le cache dans ce qu'ils considèrent comme "libre" et d'autres pas.
Lorsque vous parlez de RAM libre, il est beaucoup plus utile d’ inclure le cache, car il est pratiquement gratuit: il est disponible si une application le demande. Sous Linux, la free
commande l'indique dans les deux sens: la première ligne inclut le cache dans la colonne RAM utilisée, et la deuxième ligne comprend le cache (et les tampons) dans la colonne libre.
Comment Linux utilise le swap (encore plus simplifié)
Une fois que vous avez utilisé suffisamment de mémoire pour qu'il ne reste plus assez de cache pour un cache en bon fonctionnement, Linux peut décider de réaffecter une partie de la mémoire d'application non utilisée de la RAM à permuter.
Cela ne correspond pas à une coupure définitive. Ce n'est pas comme si vous atteigniez un certain pourcentage d'allocation, alors Linux commence à permuter. Il a un algorithme plutôt "flou". Il prend en compte de nombreux éléments, qui peuvent être décrits de la manière suivante: "quelle pression existe-t-il pour l'allocation de mémoire". S'il y a beaucoup de "pression" pour allouer une nouvelle mémoire, cela augmentera les chances que certaines personnes soient permutées pour gagner de la place. S'il y a moins de "pression", cela réduira ces chances.
Votre système possède un paramètre "swappiness" qui vous aide à modifier le calcul de cette "pression". Il est généralement déconseillé de modifier cela, et je ne vous recommanderais pas de le modifier. Dans l’ensemble, la permutation est une très bonne chose - bien qu’il existe quelques cas extrêmes qui nuisent aux performances, si vous examinez les performances globales du système, c’est un avantage net pour un large éventail de tâches. Si vous réduisez le swappiness, vous laissez la quantité de mémoire cache diminuer un peu plus que ce ne serait le cas autrement, même si cela peut vraiment être utile. Il vous appartient de décider si cela vous convient, quel que soit le problème que vous rencontrez avec la permutation. Vous devriez juste savoir ce que vous faites, c'est tout.
Il existe une situation bien connue dans laquelle le swap nuit réellement aux performances perçues sur un ordinateur de bureau. Il s’agit de la rapidité avec laquelle les applications peuvent à nouveau réagir à la saisie de l’utilisateur après une longue période d'inactivité et des processus d'arrière-plan lourds en IO (comme une sauvegarde du jour au lendemain). Il s’agit d’une lenteur très visible, mais insuffisante pour justifier la désactivation de l’échange de swap et très difficile à éviter sous n’importe quel système d’exploitation. Désactivez l'échange et cette lenteur initiale après l'analyse de sauvegarde / virus ne se produira peut-être pas, mais le système risque de fonctionner un peu plus lentement toute la journée. Ce n’est pas non plus une situation limitée à Linux.
Lors du choix de ce qui doit être échangé sur le disque, le système essaie de choisir la mémoire qui n'est pas réellement utilisée - lue ou écrite. Il a un algorithme assez simple pour calculer cela qui choisit bien la plupart du temps.
Si vous avez un système où vous avez une énorme quantité de RAM (au moment de l'écriture, 8 Go est une quantité énorme pour une distribution Linux typique), vous aurez très rarement recours à une situation dans laquelle un échange est absolument nécessaire. Vous pouvez même essayer de désactiver le swap. Je ne recommande jamais de le faire, mais uniquement parce que vous ne savez jamais quand davantage de mémoire RAM pourrait vous éviter un blocage d'application. Mais si vous savez que vous n'en aurez pas besoin, vous pouvez le faire.
Mais comment l'échange peut-il accélérer mon système? L'échange ne ralentit-il pas les choses?
Le transfert de données de la RAM vers l’échange est une opération lente, mais elle n’est prise que lorsque le noyau est pratiquement certain que les avantages globaux l’emporteront. Par exemple, si la mémoire de votre application a atteint un niveau tel qu'il ne vous reste presque plus de cache et que vos E / S sont très inefficaces, vous pouvez obtenir beaucoup plus de vitesse de votre système en libérant de la mémoire, même après la dépense initiale de permutation des données afin de les libérer.
C'est également un dernier recours si vos applications demandent réellement plus de mémoire que vous n'en avez réellement. Dans ce cas, la permutation est nécessaire pour éviter une insuffisance de mémoire, ce qui entraînerait souvent le blocage d'une application ou son exécution forcée.
L’échange n’est associé qu’à des moments où votre système ne fonctionne pas bien, car il se produit parfois lorsque vous manquez de RAM utilisable, ce qui ralentirait votre système (ou le rendrait instable) même si vous n’aviez pas d’échange. Donc, pour simplifier les choses, l’échange se produit parce que votre système est en train de s’embourber, et non l’inverse.
Une fois les données échangées, quand les données sont-elles à nouveau publiées?
Transférer des données en mode swap est (du moins pour les disques durs traditionnels) aussi fastidieux que de les stocker. Il va donc de soi que votre noyau sera tout aussi réticent à supprimer des données de l’échange, en particulier si elles ne sont pas réellement utilisées (c’est-à-dire qu'elles sont lues ou écrites). Si vous avez des données en swap et qu'elles ne sont pas utilisées, c'est une bonne chose qu'elles restent en swap, car elles laissent plus de mémoire pour d'autres éléments utilisés, ce qui peut potentiellement accélérer votre système.
free -m
,top -b 1