Ajuster les accès au swap pour accélérer le système

Bonjour à tous

J’ai récemment installé Debian sur une clé USB, avec notamment la partition de swap sur ladite clé.

Or, il faut savoir que le swap sert à 2 choses :
[b]

  1. permettre d’avoir “plus de RAM” au cas où le système en aurait besoin.[/b]
    Exemple : je dispose de 2 Go de RAM mais toutes mes applications lorsqu’elles sont ouvertes demandent 2,3 Go de RAM. Dans ce cas, le système va utiliser 300 Mo de la partition swap pour mettre en mémoire les 300 Mo de mémoire RAM manquants ;

2) permettre à intervalles réguliers de “soulager” la RAM en libérant certains blocs qui n’ont pas été utilisés depuis un certain temps.
Exemple : je dispose de 2 Go de RAM, et toutes mes applications ouvertes utilisent 1,8 Go de RAM. Mais comme je n’ai pas touché à certaines applications depuis un petit moment, le système va libérer (par exemple) 600 Mo de la RAM et les enregistrer dans le swap. Ainsi, je vais me retrouver avec une RAM “utile” de 1,2 Go, ce qui permet donc de disposer de davantage de RAM pour les applications que je suis en train d’utiliser.
Inconvénient de cette astuce : lorsque je vais basculer vers une application que je n’ai pas utilisé depuis un moment, je vais devoir attendre la lecture des données sur mon disque dur pour que le système les copie à nouveau dans la RAM. Cela est moyennement gênant lorsqu’il s’agit d’un disque dur à plateaux, peu gênant avec un SSD (Solid State Disk, les disques durs à mémoire flash), mais beaucoup plus handicapant quand a installé sa partition de swap sur une clé USB !! De plus cela économise les cycles d’écritures, ce qui n’est pas une mauvaise chose tant pour les clés USB que pour les SSD…

L’idée est donc la suivante : nous allons faire en sorte de désactiver ce qui est utilisé dans le second point afin de s’assurer que les programmes qui sont chargés dans la RAM ne soient que dans la RAM et pas en partie dans le swap, ceci afin de s’assurer que le système soit toujours le plus réactif possible.

Pour cela, nous allons régler la valeur d’une variable : swappiness.

Tout d’abord, vous pouvez visualiser sa valeur qui est à 60 par défaut sous Debian :

Vous pouvez maintenant la modifier de manière momentanée, ie. jusqu’au redémarrage de la machine, si vous souhaiter tester. Plus vous mettrez une valeur faible, plus le nombre de copies dans le swap sera faible. La valeur doit être comprise entre 0 et 100 inclus. Ainsi, pour désactiver totalement les copies dans le swap et donc rendre les applications plus réactives, vous mettrez :

Qui sera suivi par les 2 commandes suivantes pour que la valeur soit prise en compte :

[code]# swapoff -av

swapon -av[/code]

Si vous souhaitez enregistrer de manière permanente cette valeur dans le système, éditez le fichier :

et ajoutez-y la ligne suivante :

J’imagine que la valeur de la variable représente un pourcentage quelconque, cependant je ne peux pas l’affirmer puisque je ne sais pas réellement à quoi elle correspond… Si quelqu’un en sait plus, lâchez vos commentaires :wink:

J’ai testé et j’ai effectivement diminué certains temps morts lors de certaines actions, car bien que ma clé USB soit une des plus rapides du marché, elle reste bien plus lente que n’importe quel disque dur.

Notez que cela peut également avoir de l’intérêt si vous disposez d’une grande quantité de RAM et que vous avez tendance à ne pas l’utiliser entièrement.
De toutes façons ce que j’ai évoqué dans le point 1) reste de rigueur : si le système n’a plus assez de place dans la RAM il se chargera d’utiliser le swap automatiquement.

Certaines personnes préfèrent mettre une valeur à 100 en disant qu’il vaut mieux utiliser le swap pour que les grosses applications libèrent de la RAM au profit des actions qu’on utilise vraiment, car vous n’utilisez pas toutes les actions d’un logiciel, donc plus il est gros, plus il prendra de la place inutilement dans la RAM, d’où l’idée de ne garder que ce qui est vraiment utile en augmentant la valeur et ainsi dégager de l’espace dans la RAM pour que d’autres applications puissent tourner rapidement. M’enfin, si vous avec une grande quantité de RAM vous vous en fichez un peu, donc là vous aurez plutôt tendance à diminuer la valeur.

Source : road2mayotte.org/blog/?p=2178

Sans juger sur le fond (je n’ai pas approfondi), sur la forme, il serait bon de le traduire, une première fois et entre parenthèses. quand tu emploies un sigle peu usité.
Je pense en ça à “SSD”.

Salut,

[quote]Ainsi, pour désactiver totalement les copies dans le swap et donc rendre les applications plus réactives, vous mettrez :

Une valeur de 0 ne désactive pas totalement les copies dans le swap.

[quote]Qui sera suivi par les 2 commandes suivantes pour que la valeur soit prise en compte :

[code]# swapoff -av

swapon -av[/code][/quote]

Ces commandes ne servent pas à ça : à ce stade la valeur a déjà été pris en compte.
Par contre, quand on choisi une valeur faible et que la swap est utilisée elles peuvent servir pour se retrouver dans l’état souhaité plus rapidement (ce qui n’a pas forcement grand intérêt).

Depuis le noyau 2.6, le « swapping » est un moyen d’influencer les permutations vers le disque plutôt que la réduction des caches lorsque la mémoire arrive à saturation.

Le “swappiness” prend une valeur comprise entre 0 et 100 pour modifier la gestion grossière dans les permutations des processus afin de libérer le cache de certaines pages. Au niveau 100, le noyau préférera toujours chercher des pages inactives pour les envoyer vers la partition “swap” qui a été créée, rappelons-le, pour être une zone d’échanges. Dans les autres cas (valeur inférieure à 100), la permutation vers la zone d’échanges (”swap”) dépendra de la quantité de mémoire applicative utilisée et du niveau d’inefficacité du cache à trouver pour libérer les éléments inactifs.

Autrement dit, plus on abaisse la valeur du “swappiness”, plus longtemps la RAM sera occupée par les processus inactifs (ou vieux processus).

La valeur du “swappiness” par défaut est sur un bon nombre de distributions fixée à 60. Une valeur “0” donnerait quelque chose d’assez proche du comportement d’avant le noyau 2.6 avec lequel les applications requérant de la mémoire pouvaient réduire le cache à une fraction minuscule de la RAM.

Pour bien comprendre l’importance de cette valeur du “swapiness”, il faut bien saisir comment les pages (mémoire) swappées sont choisies.

Les paramètres “free_page_low” et “free_page_high” définissent deux seuils dont la surveillance est assurée par swapd (le démon de “swap” du noyau). Soit dit en passant, c’est peut-être ici qu’il faut chercher l’intérêt des commandes swapon -av /swapoff -av données par Cluxter (Cf. man swapon/swapoff).

swapd attend un certain délai (timer) et, à l’expiration de ce délai, il vérifie si le nombre de pages mémoire libres est supérieur à “free_page_high”. Si oui, rien ne change. Si le niveau est compris entre “free_page_high” et “free_page_low”, swapd déplace 3 pages sur la partition “swap”. Si le niveau est inférieur à “free_page_low”, il déplace alors 6 pages en “swap”.

Les pages déplacées sont choisies comme suit : les processus exécutés souvent sont considérés comme “jeunes” ; à l’inverse, les processus exécutés peu souvent sont considérés “vieux”. Conséquemment, plus on abaisse la valeur du “swapiness”, plus on maintient de vieux (inactifs) processus en RAM.

Dans une utilisation “Desktop” où l’on multiplie les processus, il me semble (amha) donc plus judicieux (ou préférable) d’augmenter la valeur du “swappiness” pour libérer la RAM de vieux processus et laisser la place aux processus les plus jeunes.

Source : road2mayotte.org/blog/?p=3440

Très intéressant.

Je rajouterais qu’en fait la valeur à préciser ne dépend que de 2 paramètres finalement :

  • de la technologie utilisée
  • de l’envie de réactivité de la personne utilisant la machine

Dans ton cas, une faible valeur est pertinente dans le fait que tu ne souhaite pas avoir une grosse quantité d’information écrite dans ta partition swap pour des raisons techniques.

Dans d’autres cas le fait de stocker pas mal d’informations dans la partition swap n’est pas forcément dénué d’intérêt tout dépend vraiment de ce que l’on souhaite et comment souhaite-t-on l’utiliser.

IMHO, pour les personnes souhaitant une réactivité lors de changement d’application alors une valeur faible est pertinente, pour les personnes souhaitant avoir leur rams libre de toutes informations qui pourraient êtres considérée comme inutile alors une valeur plus élevée est pertinente. Pour illustrer je reprendrais 2 citations

[quote=“Wakko Warner”]I keep soffice open all the time. The box in question has 512mb of ram.
This is one app, even though I use it infrequently, would prefer that it
never be swapped out. Mainly when I want to use it, I WANT it now (ie not
waiting for it to come back from swap)
[/quote]

[quote=“Andrew Morton”]My point is that decreasing the tendency of the kernel to swap stuff out is
wrong. You really don’t want hundreds of megabytes of BloatyApp’s
untouched memory floating about in the machine. Get it out on the disk,
use the memory for something useful.
[/quote]

[quote=“zarer”]Les paramètres “free_page_low” et “free_page_high” définissent deux seuils dont la surveillance est assurée par swapd (le démon de “swap” du noyau). Soit dit en passant, c’est peut-être ici qu’il faut chercher l’intérêt des commandes swapon -av /swapoff -av données par Cluxter (Cf. man swapon/swapoff).

swapd attend un certain délai (timer) et, à l’expiration de ce délai, il vérifie si le nombre de pages mémoire libres est supérieur à “free_page_high”. Si oui, rien ne change. Si le niveau est compris entre “free_page_high” et “free_page_low”, swapd déplace 3 pages sur la partition “swap”. Si le niveau est inférieur à “free_page_low”, il déplace alors 6 pages en “swap”.
[/quote]
Cela aurait été beaucoup plus intéressant de décrire comment la branche 2.6 du noyau gère la mémoire, d’autant plus que les sources du noyau sont très bien documentées pour qui a la curiosité, le temps et la patience (/linux/mm/) plutôt que ce qui semble n’être qu’une traduction partielle d’un obscure fichier PowerPoint vieux de 10 ans…

[quote=“zarer”]Soit dit en passant, c’est peut-être ici qu’il faut chercher l’intérêt des commandes swapon -av /swapoff -av données par Cluxter (Cf. man swapon/swapoff).
[/quote]
Aussi étonnant que cela puisse paraître kswapd se fout royalement de savoir si une zone d’échange est disponible ou pas, swapon/swapoff n’ont donc aucune influence sur lui.

Perso j’utilise une autre astuce qui est d’avoir mon /temp en ram via tmpfs afin que iceweasel par exemple soit un peu plus réactif.
fstab permet de la config de chez config…

[quote="…"]
Aussi étonnant que cela puisse paraître kswapd se fout royalement de savoir si une zone d’échange est disponible ou pas, swapon/swapoff n’ont donc aucune influence sur lui.[/quote]

Et swapd ? Je ne crois pas… mais tu sembles bien informé. Peut-être as-tu des sources à donner…

swapd est un processus noyau et apparait sous le nom kswapd avec un prefixe «k» comme tous les processus noyau je pense.

Oui, mettre en lumière une escroquerie intellectuelle est certainement beaucoup plus constructif que de la pratiquer, et non, de fait ce n’est pas une perte de temps (quelques dizaines de secondes seulement qui plus est).
Quand on s’adonne à ce genre pratique il ne faut quand même pas s’attendre à recevoir un bouquet de fleurs !

Maintenant peut être que ce n’était pas délibéré et que tu l’as fait en toute bonne foi ? Auquel cas il ne sert à rien de te formaliser : l’erreur est humaine et la reconnaître ne te coûtera pas un bras, bien au contraire…

Salut,

Un peu de calme s’il vous plait :slightly_smiling:

Un exemple de plus pour prouver que j’ai raison :mrgreen: :smt006

[quote="…"]
Oui, mettre en lumière une escroquerie intellectuelle est certainement beaucoup plus constructif que de la pratiquer…[/quote]

Je n’ai rien à ajouter devant autant de pénétration et de sagacité. Autant de finesse et de vivacité impose le respect et le silence.