Votre question comporte plusieurs aspects.
Premièrement, quelle est votre définition de "libre"? En fait, ce n'est pas aussi simple que cela en a l'air sous Linux (ou tout autre système d'exploitation moderne).
Comment Linux utilise la RAM (très simplifiée)
Chaque application peut utiliser une partie de votre mémoire. Linux utilise toute la mémoire inoccupée (sauf les derniers Mb) comme "cache". Cela inclut le cache de la page, les caches inode, etc. C'est une bonne chose - cela aide à accélérer les choses. L’écriture sur disque et la lecture sur disque peuvent être accélérées par le cache.
Idéalement, vous avez suffisamment de mémoire pour toutes vos applications, et il vous reste encore plusieurs centaines de Mo pour le cache. Dans cette situation, tant que vos applications n'augmentent pas leur utilisation de la mémoire et que le système ne parvient pas à obtenir suffisamment d'espace pour le cache, aucun échange n'est nécessaire.
Une fois que les applications réclament plus de mémoire RAM, elles vont simplement dans une partie de l’espace utilisé par le cache, réduisant ainsi le cache. La désallocation du cache est assez simple et facile à réaliser 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, soit simplement libérée instantanément, soit ont dû vider le disque dans les prochaines 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 mémoire vive gratuite différemment: certains incluent le cache dans le cadre de ce qu’ils considèrent comme "gratuit" et d’autres pas.
Lorsque vous parlez de mémoire vive libre, inclure dans le cache est beaucoup plus utile, car il est pratiquement gratuit - disponible si une application le demande. Sous Linux, la commande free
la signale dans les deux sens - la première ligne inclut le cache dans la colonne RAM utilisée et la deuxième ligne inclut le cache (et les tampons) dans la colonne libre.
Comment Linux utilise le swap (encore plus simplifié)
Une fois que vous avez épuisé suffisamment de mémoire pour que le cache fonctionne correctement, Linux peut décider de ré-allouer de la mémoire d’application inutilisée de la mémoire RAM pour la remplacer.
Il ne le fait pas selon une coupure définitive. Ce n'est pas comme si vous atteigniez un certain pourcentage d'allocation, alors Linux commence à échanger. Il a un algorithme plutôt "flou". Cela prend beaucoup de choses en compte, ce qui peut être mieux décrit par "combien de pression existe pour l’allocation de mémoire". S'il y a beaucoup de "pression" pour allouer de la mémoire, cela augmentera les chances que certains soient échangés pour gagner de la place. S'il y a moins de "pression", cela diminuera ces chances.
Votre système a un paramètre "swappiness" qui vous aide à modifier la façon dont cette "pression" est calculée. Il n'est généralement pas recommandé de modifier cela du tout, et je ne vous recommanderais pas de le modifier. La permutation est globalement une très bonne chose - même s'il existe quelques cas extrêmes où elle nuit aux performances, si vous regardez les performances globales du système, cela représente un avantage net pour un large éventail de tâches. Si vous réduisez le swappiness, vous laissez la quantité de mémoire cache se réduire un peu plus qu'elle ne le ferait autrement, même si cela peut être vraiment utile. Que ce soit un compromis suffisant pour tout problème que vous rencontrez lors de l'échange est à vous. Vous devriez juste savoir ce que vous faites, c'est tout.
Il existe une situation bien connue dans laquelle le swap nuit aux performances perçues sur un système de bureau, et à la rapidité avec laquelle les applications peuvent répondre à nouveau aux entrées des utilisateurs après une longue période d'inactivité et des processus d'arrière-plan importants ( comme une sauvegarde de nuit) exécuter. Ceci est une lenteur très visible, mais pas suffisante pour justifier la désactivation du swap tous ensemble et très difficile à empêcher dans tous les systèmes d’exploitation. Désactivez le swap et cette lenteur initiale après l'analyse de sauvegarde / virus peut ne pas se produire, mais le système peut fonctionner un peu plus lentement toute la journée. Ce n’est pas non plus une situation limitée à Linux.
Lorsque vous choisissez ce qui doit être échangé sur le disque, le système essaie de sélectionner la mémoire qui n’est pas réellement utilisée (lecture ou écriture). Il a un algorithme assez simple pour le calculer, qui choisit bien la plupart du temps.
Si vous avez un système dans lequel vous avez une énorme quantité de RAM (au moment d’écrire, 8 Go représentent une quantité énorme pour une distribution Linux typique), vous ne rencontrerez que très rarement une situation où le swap est nécessaire. Vous pouvez même essayer de désactiver le swap. Je ne recommande jamais de le faire, mais seulement parce que vous ne savez jamais quand plus de RAM peut vous sauver de certaines applications en panne. Mais si vous savez que vous n’en aurez pas besoin, vous pouvez le faire.
Comment échanger rapidement mon système? Ne pas échanger ralentit les choses?
Le transfert de données de la mémoire RAM à l’échange est une opération lente, mais elle n’est prise que lorsque le noyau est certain que le bénéfice global sera plus important. Par exemple, si la mémoire de votre application a atteint le point où il ne reste presque plus de cache et que votre E / S est très inefficace, vous pouvez en fait obtenir beaucoup plus de vitesse en libérant de la mémoire, même après le coût initial de l'échange de données afin de le libérer.
C'est aussi 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 situation de mémoire insuffisante qui entraînera souvent le blocage d'une application ou sa mise à mort.
La permutation est uniquement associée à des moments où votre système fonctionne mal car cela se produit parfois lorsque vous manquez de RAM utilisable, ce qui ralentirait votre système (ou le rendrait instable) même si vous n'avez pas échangé. Donc, pour simplifier les choses, la permutation se produit car votre système s’enlève, plutôt que l’inverse.
Une fois que les données sont en échange, à quel moment s’en sort-il?
Le transfert de données hors échange est (pour les disques durs traditionnels, au moins) tout aussi long que leur insertion. Il est donc compréhensible que votre noyau soit tout aussi réticent à supprimer des données du swap, surtout s'il n'est pas réellement utilisé (c.-à-d. Lu ou écrit). Si vous avez des données en swap et qu'elles ne sont pas utilisées, alors c'est une bonne chose que cela reste dans le swap, car cela laisse plus de mémoire pour les autres choses utilisées , ce qui peut accélérer votre système.