J'ai un ordinateur portable Debian (Buster) avec 8 Go de RAM et 16 Go d'échange. Je lance une très longue tâche en cours d'exécution. Cela signifie que mon ordinateur portable est resté allumé pendant les six derniers jours pendant qu'il passe à travers.
Ce faisant, je dois régulièrement utiliser mon ordinateur portable comme ordinateur portable. Cela ne devrait pas être un problème. la tâche longue est liée aux E / S, passe par des tâches sur un disque dur USB et ne nécessite pas beaucoup de RAM (<200 Mo) ou de CPU (<4%).
Le problème est que lorsque je reviendrai à mon ordinateur portable au bout de quelques heures, ce sera très lent et 30 minutes peuvent être nécessaires pour revenir à la normale. Cela est si grave que les contrôleurs d'incident signalent que leurs applications respectives sont gelées (en particulier les fenêtres du navigateur) et que les incidents qui se produisent entraînent une défaillance incorrecte.
En regardant sur le moniteur système, des 2,5 Go utilisés, environ la moitié est basculée en swap. J'ai confirmé le problème en supprimant l'espace de permutation ( swapoff /dev/sda8
). Si je le laisse sans espace d'échange, il revient à la vie presque instantanément, même après 24 heures. Avec swap, c'est pratiquement une brique pour les cinq premières minutes, n'ayant été laissée que six heures. J'ai confirmé que l'utilisation de la mémoire ne dépasse jamais 3 Go, même en mon absence.
J'ai essayé de réduire le swappiness ( voir aussi: Wikipedia ) aux valeurs de 10
et 0
, mais le problème persiste. Il semble qu'après un jour d'inactivité, le noyau estime que la totalité de l'interface graphique n'est plus nécessaire et l'efface de la mémoire vive (la permute sur le disque). La longue tâche consiste à lire une vaste arborescence de fichiers et à lire chaque fichier. Il se peut donc que le noyau ait du mal à croire que la mise en cache aiderait. Toutefois, sur un seul disque dur USB HD de 2 To avec environ 1 milliard de noms de fichiers, une Go de RAM supplémentaire n’aidera pas beaucoup les performances. Ceci est un ordinateur portable pas cher avec un disque dur lent. Il ne peut tout simplement pas charger les données dans la RAM assez rapidement.
Comment puis-je dire à Linux d'utiliser uniquement l'espace de swap en cas d'urgence? Je ne veux pas courir sans échange. Si quelque chose d'inattendu se produit et que le système d'exploitation a soudainement besoin de quelques Go supplémentaires, je ne veux pas que les tâches soient détruites et je préférerais commencer à utiliser le swap. Mais pour le moment, si je laisse la permutation d'échange activée, mon ordinateur portable ne peut tout simplement pas être utilisé quand j'en ai besoin.
La définition précise du terme "urgence" pourrait faire l’objet d’un débat. Mais pour clarifier ce que je veux dire: une urgence serait où le système est laissé sans autre option que d’échanger ou de tuer des processus.
Qu'est-ce qu'une urgence? - As-tu vraiment besoin de demander? ... J'espère que tu ne te retrouveras jamais dans un immeuble en feu!
Il m'est impossible de définir tout ce qui pourrait constituer une urgence dans cette question. Mais par exemple, une urgence peut survenir lorsque le noyau est tellement sollicité pour la mémoire qu'il a commencé à tuer des processus avec le KOM Killer . Une urgence n'est PAS lorsque le noyau pense qu'il peut améliorer les performances en utilisant swap.
Final Edit: j'ai accepté une réponse qui répond exactement à ce que j'ai demandé au niveau du système d'exploitation. Les futurs lecteurs devraient également prendre note des réponses proposant des solutions au niveau de l'application.