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
    Maître des clés

    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
    Maître des clés

    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
    Maître des clés

    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
    Maître des clés

    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
    Maître des clés

    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
    Maître des clés

    Çà 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
    Maître des clés

    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.