Optimiser la gestion de la RAM et du Swap sous Linux

l’Almanet doLys Gnu/Linux – Open Source – Entreprises Forums L’almanet doLys Open Source Optimiser la gestion de la RAM et du Swap sous Linux

15 sujets de 1 à 15 (sur un total de 17)
  • Auteur
    Articles
  • #5611
    nam1962nam1962
    Keymaster

      Sous Linux, on peut optimiser la gestion de la RAM en gérant la swappiness.

      Régler la swappiness

      Pour vérifier votre réglage actuel :

      cat /proc/sys/vm/swappiness
      cat /proc/sys/vm/vfs_cache_pressure

      Si la swappiness est à 60 et le cache_pressure à 100, c’est un réglage pour serveur qui n’est pas optimal pour un ordinateur individuel (cf note en bas)

      Ces valeurs par défaut sont plus logiques pour un serveur que pour un ordi personnel.

      Après le réglage que je vous propose, vous constaterez que votre ordinateur sous Linux est plus rapide et vivace ! 🙂

      …n’oubliez pas, pour sélectionner chaque commande, le triple clic sur chaque ligne :

      echo vm.swappiness=5 | sudo tee -a /etc/sysctl.d/99-swappiness.conf
      echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.d/99-swappiness.conf
      sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
      

      Si vous utilisez un SSD, il faut limiter très fortement la swap donc regardez ce post : https://dolys.fr/forums/topic/1327/

      Sur les ordinateurs suffisamment costauds en RAM (plus de 6Go), je complète ceci par la mise de /tmp en RAM

      Régler la swap

      Il y a 3 moyens d’avoir une swap sous Linux : une partition swap, une swapfile, ou utiliser systemd-swap

      On DOIT avoir une swap même si on a beaucoup de RAM (regardez en fin d’article pourquoi)

      Partition swap

      Les puristes disent que la partition swap reste le plus rapide, mais il faut dans ce cas la créer lors de l’installation car modifier des partitions ultérieurement est toujours fastidieux et délicat.

      Swapfile

      De nombreuses distribution en créent une à l’installation, mais parfois ce n’est pas le cas, parfois la taille ne vous convient pas. Voici donc comment l’installer ou la modifier.
      1. Vérifiez son existence et sa taille

      sudo swapon -s

      2. si il y a une swapfile, désactivez la :

      sudo swapoff -a

      3. ajoutez une swapfile, agrandissez ou rétrécissez là :

      sudo dd if=/dev/zero of=/swapfile count=4M bs=1K

      Ici je vous ai proposé une swapfile de 4M*1K = 4Gib pour ajuster à votre taill voulue, changez le count, par exemple 8M pour avoir 8Gib

      4. donnez les bonnes permissions à votre swapfile

      sudo chmod 600 /swapfile

      5. Donnez-lui le statut de swap et démarrez la

      sudo mkswap /swapfile
      sudo swapon /swapfile

      6. vérifiez qu’elle soit bien déclarée d&ans fstab :

      cat /etc/fstab

      vois devez voir :
      /swapfile none swap sw 0 0

      7. Si non passez

      echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

      8. Redémarrez

      9. Vérifiez votre nouvelle swapfile avec

      sudo swapon -s

      Systemd-swap

      systemd-swap est séduisante, mais le dev lui-même dit qu’il n’a pas assez de temps pour maintenir sérieusement son script. Je vous la cite car je lui trouvais plusieurs avantages :

      * contrairement aux deux autres solutions, elle ne mobilise pas en permanence un espace, mais s’ajuste aux besoins.
      * couteau suisse de la gestion de swap, elle ajoute un outil d’optimisation : zswap

      Mais évitez de l’installer sauf pour des tests (ou faire un fork et dans ce cas dîtes le moi ! 😀 )

      1. Si vous avez une partition swap, il faut préalablement la supprimer avec gparted et supprimer son entrée UUID dans fstab via :

      gedit admin:///etc/fstab

      Si vous avez une /swapfile (automatique sur pas mal de distros), là aussi la supprimer :

      sudo swapoff -a
      sudo rm -f /swapfile
      Sous Debian, Ubuntu et variantes :
      sudo apt install --reinstall build-essential
      git clone https://github.com/Nefelim4ag/systemd-swap.git 
      ./systemd-swap/package.sh debian 
      cd ~/systemd-swap 
      sudo dpkg -i systemd-swap_*_a??.deb
      Sous Manjaro et autres Arch :
      sudo pacman -S systemd-swap

      Puis pour toutes les distributions, nous allons régler systemd-swap, en activant swapfc, zswap l’est déjà et nous n’activons pas zram (incompatible avec les deux premiers), nous allons aussi mettre un fichier minimum et régler sa taille à 512Mo :

      sudo mkdir /etc/systemd/swap.conf.d
      sudo touch /etc/systemd/swap.conf.d/overrides.conf

      Puis copiez/collez tout ce pavé dans le terminal :

      sudo tee -a /etc/systemd/swap.conf.d/overrides.conf <<EOF
      swapfc_enabled=1
      swapfc_min_count=1
      swapfc_chunk_size=512M
      EOF

      Comme vous l’avez compris, le fichier /etc/systemd/swap.conf.d/overrides.conf est un fichier utilisateur qui a priorité sur les réglages par défaut de /usr/share/systemd-swap/swap-default.conf

      [Note] si vous êtes sous Debian, le mode de compression par défaut : zstd ne fonctionnera pas, utilisez alors lz4 en ajoutant :
      echo zswap_compressor=lz4 | sudo tee -a /etc/systemd/swap.conf.d/overrides.conf

      Pour activer systemd-swap, passons :

      systemctl start systemd-swap
      systemctl enable systemd-swap

      Et redémarrez !

      Pour vérifier le bon fonctionnement de systemd-swap :

      swapon -s

      Qui doit vous indiquer quelque chose de ce genre :

      ~]$ swapon -s
      Nom de fichier Type Taille Utilisé Priorité
      /var/lib/systemd-swap/swapfc/1 file 524284 780 -2

      [Note] J’ai supprimé resume dans
      /etc/default/grub et (quand l’ordi est sous Manjaro) dans /etc/mkinitcpio.conf puis :

      sudo mkinitcpio -P
      sudo update-grub

       

      Ceci permet de continuer à pouvoir hiberner (même si je n’ai jamais compris l’intérêt de l’hibernation 😉 )

      J’ai aussi mis le contenu de /tmp (les fichiers temporaires) en RAM : https://dolys.fr/forums/topic/accelerer-le-demarrage-sous-linux/

       


       

      Explication des réglages de swappiness :

      Swappiness est le nom que les développeurs du noyau Linux ont donné à la préférence entre les applications de pagination sur disque et la réduction des caches.
      Si elle est proche de 0, Linux préférera garder les applications en RAM et ne pas agrandir les caches.
      Si elle est proche de 100, Linux préférera swapper des applications et agrandir les caches en RAM autant que possible.

      https://www.howtogeek.com/449691/what-is-swapiness-on-linux-and-how-to-change-it/

      Tout ce qui est swappé bascule sur les disques (HDD ou SSD) qui sont nettement plus lents que la RAM, d’où cette impression de blocage quand une application bascule en Swap

      Dans la configuration d’origine, sur Ubuntu et ses variantes par exemple, la swappiness est réglée à 60.

      60 est utile pour un serveur qui a intérêt à optimiser la vitesse des caches, mais pas pour un ordinateur personnel (d’ailleurs, tenant compte de cela,sur Manjaro, le réglage par défaut est… 10 !)

      Avec ce tuto, votre ordi maximisera l’usage de la RAM pour les applications avant de penser à autre chose.

      Le cache pressure, lui, donne priorité aux inodes sur les autres caches, c’est à dire s’assure, là aussi, que de la plus grande vitesse percue quand l’ordi cherche des fichiers (grosso les inodes sont un peu comme les infos d’un annuaire).

      Pour les curieux : Tales from Responsivenessland

      L’avis de la communauté Ubuntu :

      The default setting in Ubuntu is swappiness=60. Reducing the default value of swappiness will probably improve overall performance for a typical Ubuntu desktop installation. A value of swappiness=10 is recommended, but feel free to experiment. Note: Ubuntu server installations have different performance requirements to desktop systems, and the default value of 60 is likely more suitable. –> source

      Excellente explication du fonctionnement de la mémoire sous Linux par Nicolas PANHALEUX. 

      Enfin, la swap est elle nécessaire si j’ai beaucoup de RAM ? Réponse : oui ! Car les OS et programmes s’attendent à en avoir pour gerer correctement leurs évènements, explications là et là : https://chrisdown.name/2018/01/02/in-defence-of-swap.html

      https://haydenjames.io/linux-performance-almost-always-add-swap-space/

       

      Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

      #11509
      andsoandso
      Participant

        bonjour nam et tous
        pourquoi ne pas avoir plusieurs récipiendaires pour la swap et définir des priorités?

        j’ utilise zram (je sais: t’ aime pas) qui crée un tampon swap en mémoire vive
        explication vachement initiale
        et aprés utilisation de swapoff swapon pour définir les piorités:

        pj@pj-desktop:~$ cat /proc/swaps
        Filename				Type		Size	Used	Priority
        /dev/sda9                               partition	4364284	0	-3
        /dev/zram0                              partition	1000112	0	-1
        /dev/zram1                              partition	1000112	0	-2
        

        les zram0 et zram1 correspondent aux 2 cœurs de ma cpu: eles devraient avoir la même priorité.

        j’ obtiens mon systeme extrémement fluide

        mon réglage en test (avec 4Go de mem) de /etc/sysctl.d/99-swappiness.conf:

        vm.swappiness=10
        vm.vfs_cache_pressure=100

        edit: tu l’ as crée le /etc/systemd/swap.conf ?

        #11510
        nam1962nam1962
        Keymaster

          Hello andso, l’avantage de systemd-swap est qu’il crée des tranches de swap de 512 Mo au fur et à mesure des besoins.

          le /etc/systemd/swap.conf a été créé lors de l’install de systemd-swap, j’ai juste dû activer swapfc

          Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

          #11612
          andsoandso
          Participant

            t’ as pas pigé: zram compresse ta ram et l’ utilise en tampon pour le swap,
            en réglant /proc/swaps
            avant basculement vers un dédé.
            Tu suis le script de GammaDraconis sur ubuntu qui propose zram.

            Un swap en mémoire vive avant basculement vers un dédé,
            ça roxe!

            #11633
            Avatargog
            Participant

              Bonjour,

              Je n’arrive pas à appliquer la partie gitub et trouver le numéro de .deb

              Par le passé j’ai déjà effectuer cette manipulation, mais je n’y arrive pas cette fois ci.

              Cdlt

              #11640
              nam1962nam1962
              Keymaster

                Hello !
                Effectivement, any est devenu all dans systemd-swap_*_any.deb
                Je corrige le tuto, merci ! 🙂

                Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

                #11683
                Avatarfurnicket
                Participant

                  Bonjour,
                  je suis novice sur linux et moi non plus la manip de remplacer * par le numéro de version dans le .deb ne fonctionne pas.
                  Cela me fait :
                  elsa@elsa-X510UQ:~/systemd-swap$ sudo dpkg -i systemd-swap_4.0.1_all.deb
                  dpkg: erreur: cannot access archive ‘systemd-swap_4.0.1_all.deb’: Aucun fichier ou dossier de ce type.
                  Pourraiez-vous m’aider ?

                  Cordialement

                  #11684
                  nam1962nam1962
                  Keymaster

                    Bonsoir, peux-tu nous donner un à un les retours de chacune des commandes prescrites ?
                    La commande que tu indiques ne provient pas du tuto dolys.
                    Il faut exactement copier coller les commandes du premier post, sans rien y modifier.

                    Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

                    #11685
                    Avatarfurnicket
                    Participant

                      Si je fais chaque commande j’obtiens :

                      elsa@elsa-X510UQ:~$ git clone https://github.com/Nefelim4ag/systemd-swap.git
                      fatal: le chemin de destination ‘systemd-swap’ existe déjà et n’est pas un répertoire vide.
                      elsa@elsa-X510UQ:~$ ./systemd-swap/package.sh debian
                      ./systemd-swap/package.sh: ligne 16: make : commande introuvable
                      elsa@elsa-X510UQ:~$ cd ~/systemd-swap
                      elsa@elsa-X510UQ:~/systemd-swap$ sudo dpkg -i systemd-swap_*_a??.deb
                      [sudo] Mot de passe de elsa :
                      dpkg: erreur: cannot access archive ‘systemd-swap_*_a??.deb’: Aucun fichier ou dossier de ce type

                      #11686
                      nam1962nam1962
                      Keymaster

                        Hmm, les *buntus oublient de plus en plus d’outils dans leur install, que donne :

                        sudo apt install --reinstall build-essential
                        ./systemd-swap/package.sh debian
                        cd ~/systemd-swap
                        sudo dpkg -i systemd-swap_*_a??.deb

                        Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

                        #11687
                        Avatarfurnicket
                        Participant

                          Super ! j’imagine que c’est bon, on m’indique :

                          elsa@elsa-X510UQ:~$ swapon -s
                          Nom de fichier Type Taille Utilisé Priorité
                          /var/lib/systemd-swap/swapfc/1 file 524284 0 -2

                          Ensuite pour désactiver l’hibernation je n’ai pas très bien compris : Dans mon fichier etc je n’ai pas defaul ou mkinitcpio.conf, je n’ai que systemd.
                          Du coup après avoir fait la commande que tu préconise ça me donne :

                          elsa@elsa-X510UQ:~$ sudo update-grub
                          Sourcing file `/etc/default/grub’
                          Création du fichier de configuration GRUB…
                          Image Linux trouvée : /boot/vmlinuz-5.3.0-42-generic
                          Image mémoire initiale trouvée : /boot/initrd.img-5.3.0-42-generic
                          Image Linux trouvée : /boot/vmlinuz-5.3.0-28-generic
                          Image mémoire initiale trouvée : /boot/initrd.img-5.3.0-28-generic
                          Adding boot menu entry for EFI firmware configuration
                          fait
                          elsa@elsa-X510UQ:~$ sudo mkinitcpio -P
                          sudo: mkinitcpio : commande introuvable

                          ça te parait bon ?

                          #11688
                          nam1962nam1962
                          Keymaster

                            Çà sent bon 🙂

                            Pour vérifier, donne-nous :

                            cat /etc/default/grub 
                            cat /etc/mkinitcpio.conf

                            Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

                            #11690
                            Avatarfurnicket
                            Participant

                              Voilà :

                              elsa@elsa-X510UQ:~$ cat /etc/default/grub 
                              # If you change this file, run 'update-grub' afterwards to update
                              # /boot/grub/grub.cfg.
                              # For full documentation of the options in this file, see:
                              #   info -f grub -n 'Simple configuration'
                              
                              GRUB_DEFAULT=0
                              GRUB_TIMEOUT_STYLE=hidden
                              GRUB_TIMEOUT=0
                              GRUB_DISTRIBUTOR=<code>lsb_release -i -s 2> /dev/null || echo Debian</code>
                              GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
                              GRUB_CMDLINE_LINUX=""
                              
                              # Uncomment to enable BadRAM filtering, modify to suit your needs
                              # This works with Linux (no patch required) and with any kernel that obtains
                              # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
                              #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
                              
                              # Uncomment to disable graphical terminal (grub-pc only)
                              #GRUB_TERMINAL=console
                              
                              # The resolution used on graphical terminal
                              # note that you can use only modes which your graphic card supports via VBE
                              # you can see them in real GRUB with the command 
                              vbeinfo'
                              #GRUB_GFXMODE=640x480
                              
                              # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
                              #GRUB_DISABLE_LINUX_UUID=true
                              
                              # Uncomment to disable generation of recovery mode menu entries
                              #GRUB_DISABLE_RECOVERY="true"
                              
                              # Uncomment to get a beep at grub start
                              #GRUB_INIT_TUNE="480 440 1"
                              elsa@elsa-X510UQ:~$ cat /etc/mkinitcpio.conf
                              cat: /etc/mkinitcpio.conf: Aucun fichier ou dossier de ce type
                              #11691
                              nam1962nam1962
                              Keymaster

                                Là c’est bon, semble-t’il.

                                J’ai amendé le tuto pour intégrer l’installation de build-essential

                                Merci ! 🙂

                                Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

                                #11692
                                Avatarfurnicket
                                Participant

                                  Super, merci beaucoup Nam, ton tuto est génial je m’y réfère à chaque fois que je formate (j’ai du l’utiliser 4 ou 5 fois).
                                  Bonne continuation !

                                15 sujets de 1 à 15 (sur un total de 17)
                                • Vous devez être connecté pour répondre à ce sujet.