GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Comment utiliser l'espace d'échange uniquement pour les urgences ?

J'ai un ordinateur portable Debian (Buster) avec 8 Go RAM et échange de 16 Go. J'exécute une tâche très longue. Cela signifie que mon ordinateur portable est resté allumé pendant les six derniers jours alors qu'il tournait.

Tout en faisant cela, j'ai périodiquement besoin d'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, travaille sur des éléments sur un disque dur USB et ne prend pas beaucoup de RAM (<200 Mo) ou de processeur (<4 %).

Le problème est lorsque je reviens à mon ordinateur portable après quelques heures, il sera très lent et peut prendre 30 minutes pour revenir à la normale. C'est tellement grave que les moniteurs de crash signalent que leurs applications respectives ont gelé (en particulier les fenêtres du navigateur) et que les choses commencent à planter de manière incorrecte.

En regardant sur le moniteur du système, sur les 2,5 Go utilisés, environ la moitié est déplacée vers l'échange. J'ai confirmé que c'est le problème en supprimant l'espace d'échange (swapoff /dev/sda8 ). Si je le laisse sans espace d'échange, il reprend vie presque instantanément même après 24 heures. Avec swap, c'est pratiquement une brique pour les cinq premières minutes après seulement six heures. J'ai confirmé que l'utilisation de la mémoire ne dépasse jamais 3 Go même pendant mon absence.

J'ai essayé de réduire le swappiness (voir aussi :Wikipedia) à des valeurs de 10 et , Mais le problème persiste encore. Il semble qu'après une journée d'inactivité, le noyau pense que l'intégralité de l'interface graphique n'est plus nécessaire et l'efface de la RAM (la remplace sur le disque). La tâche de longue exécution consiste à lire une vaste arborescence de fichiers et à lire chaque fichier. Il se peut donc que le noyau soit confus en pensant que la mise en cache aiderait. Mais sur un seul balayage d'un disque dur USB de 2 To avec environ 1 milliard de noms de fichiers, un Go de RAM supplémentaire n'améliorera pas beaucoup les performances. Il s'agit d'un ordinateur portable bon marché 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 de n'utiliser l'espace d'échange qu'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 tuées et je préférerais commencer à utiliser le swap. Mais pour le moment, si je laisse l'échange activé, mon ordinateur portable ne peut tout simplement pas être utilisé quand j'en ai besoin.

La définition précise d'une « urgence » pourrait faire l'objet d'un débat. Mais pour clarifier ce que je veux dire :une urgence serait lorsque le système n'a d'autre choix que d'échanger ou de tuer des processus.

Qu'est-ce qu'une urgence ?Faut-il vraiment demander ?… J'espère que vous ne vous retrouverez jamais dans un immeuble en feu !

Il ne m'est pas possible 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é en mémoire qu'il a commencé à tuer des processus avec OOM Killer. Une urgence n'est PAS lorsque le noyau pense qu'il peut améliorer les performances en utilisant le swap.

Connexe :Ubuntu – Comment vérifier les connexions SMB et le dialecte utilisé sur Linux ?

Modification finale : J'ai accepté une réponse qui fait précisément ce que j'ai demandé au niveau du système d'exploitation. Les futurs lecteurs devraient également prendre note des réponses offrant des solutions au niveau de l'application.

Réponse acceptée :

Avoir un échange aussi énorme de nos jours est souvent une mauvaise idée. Au moment où le système d'exploitation n'a échangé que quelques Go de mémoire à échanger, votre système avait déjà rampé jusqu'à la mort (comme ce que vous avez vu)

Il vaut mieux utiliser zram avec une petite partition de swap de sauvegarde . De nombreux systèmes d'exploitation comme ChromeOS, Android et diverses distributions Linux (Lubuntu, Fedora) ont activé zram par défaut pendant des années, en particulier pour les systèmes avec moins de RAM. C'est beaucoup plus rapide que d'échanger sur le disque dur et vous pouvez clairement sentir la réactivité du système dans ce cas. Moins sur un SSD, mais selon les résultats de référence ici, il semble toujours plus rapide même avec l'algorithme lzo par défaut. Vous pouvez passer à lz4 pour des performances encore meilleures avec un taux de compression un peu moins élevé. Sa vitesse de décodage est près de 5 fois plus rapide que lzo sur la base de la référence officielle

En fait, Windows 10 et macOS utilisent également des techniques de compression de fichiers d'échange similaires par défaut

Il y a aussi zswap même si je ne l'ai jamais utilisé. Cela vaut probablement la peine d'essayer et de comparer celui qui convient le mieux à vos cas d'utilisation

Après cela, une autre suggestion consiste à réduire la priorité de ces processus liés aux E/S et éventuellement laisser un terminal fonctionner avec une priorité plus élevée afin que vous puissiez exécuter des commandes immédiatement même lorsque le système est sur une charge élevée

Autres lectures

  • Arch Linux – Amélioration des performances – Zram ou zswap
  • Activez ZSwap pour augmenter les performances
  • Activez la zRAM pour une meilleure gestion de la mémoire et moins d'échanges
  • Vous manquez de RAM dans Ubuntu ? Activer la ZRAM
  • Différence entre ZRAM et ZSWAP
  • Zram vs zswap vs zcache Guide ultime :quand utiliser lequel
  • Linux, SSD et swap
  • https://wiki.debian.org/ZRam
  • https://www.kernel.org/doc/Documentation/blockdev/zram.txt
  • https://wiki.gentoo.org/wiki/Zram

Linux
  1. Comment utiliser BusyBox sous Linux

  2. Comment utiliser la commande Linux sed

  3. Comment choisir un ordinateur portable Linux abordable pour la visioconférence

  4. Comment utiliser rsync avancé pour les sauvegardes Linux volumineuses

  5. Comment utiliser systemd-nspawn pour la récupération du système Linux

Comment j'utilise Cockpit pour la gestion du serveur Linux de ma maison

Comment étendre l'espace d'échange à l'aide du fichier d'échange sous Linux

Comment vérifier les ports d'écoute sous Linux (ports utilisés)

Quelle quantité d'échange devriez-vous utiliser sous Linux ?

Comment créer et utiliser un fichier d'échange sous Linux

Comment vérifier l'espace d'échange sous Linux