#1 Le 11/10/2010, à 17:23
- ddmdllt
Vider le swap sans swapoff ? (et sans jamais le désactiver)
Bonjour,
Je cherche une solution pour vider entièrement le swap en mémoire, lorsque c'est possible (ou sinon avec une politique de meilleur résultat possible), et ce sans utiliser swapoff à aucun instant, et bien sûr sans désactiver le swap un instant par un autre moyen que swapoff.
Pourquoi ? En fait l'utilisation du swap pour moi se limite souvent aux rares cas où j'utilise la fonction d'hibernation. Toute la RAM est alors sauvée via le swap. Au redémarrage, une bonne partie reste en swap et le système ne cherche pas forcément à tout charger, y compris lorsque le disque dur n'a rien d'autre à faire...
Ce qui veut dire que si même 2 minutes après avoir retrouvé ma session, je ré-ouvre une fenêtre d'un firefox consommant pas mal de mémoire (avec beaucoup d'onglets), il y a de grande chance que le navigateur réponde très mal, voire qu'il y ait des "unresponsive script". Un peu gênant pour le moins, non ?
J'ai déjà recherché un peu les solutions pour vider le cache, néanmoins la plupart du temps ça ressemble à un swapoff suivi d'un swapon. Hors, c'est une solution qui a ses défauts : à un moment le système se retrouve sans swap, et ça peut mettre la pagaille dans de (très) rares cas.
J'ai sinon essayé une méthode bête qui consiste à faire en root un "dd if=/dev/swap_partition of=/dev/null", visiblement ça semble accélérer bien les choses après (ce qui semble logique vu que le swap se retrouve ainsi en bonne partie en cache en mémoire lorsque celle-ci est peu remplie), mais je ne crois pas du tout que ce soit une solution idéale...
Bref si quelqu'un a une solution toute faite, je suis preneur
Hors ligne
#2 Le 11/10/2010, à 18:18
- jacobus77
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
Si tu veux agir sur le swapp je vois pas trop comment tu peux faire sans le désactiver. Une solution serait de créer un swap dans un fichier et d'utiliser un script pour le régénérer mais il y a forcément un moment (même trés court) ou tu n'as plus de swap actif (?)
Hors ligne
#3 Le 11/10/2010, à 19:13
- ddmdllt
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
En fait j'y ai pensé mais ça ne me tente pas trop. Ça n'implique pas de ne plus avoir de swap actif, il suffit d'activer le swap dans un fichier avant de désactiver le swap principal (la partition) et de réactiver le swap qu'il y avait avant de désactiver le swap dans un fichier. Si je ne me trompe pas, au moment du "swapoff /dev/sda_num", le swap via un fichier ne sera utilisé que si nécessaire, en fonction de la ram disponible. (Il faut cependant créer avant le fichier d'une taille choisie et faire le mkswap...)
Petits trucs qui me gênent :
* il faut recréer à chaque fois un gros fichier de taille fixe, faire ensuite un mkswap dessus
* ou alors laisser le fichier swap prendre de la place sur la partition
* ou alors "prendre un peu plus de risques" en créant à chaque fois un fichier swap de taille adaptée pour servir de sécurité en cas d'excédent de nouvelle consommation mémoire entre juste avant le début du swapoff et la réactivation du swap sur partition
Bref, soit du temps en plus pour pas grand chose, soit une consommation mémoire supplémentaire.
Hors ligne
#4 Le 11/10/2010, à 21:11
- jacobus77
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
Le comportement que tu décris: swap en usage aprés hibernation n'est absolument pas le comportement attendu.
( Aprés une sortie d'hibernation, top me donne toujours un usage du swap de 0. )
Essaies de voir du côté de:
http://doc.ubuntu-fr.org/swap?s[]=swap&s[]=hibernation#regler_le_declenchement_du_swap
tes réglages d'utilisation de swap on peut-être été altéré, à moins qu'il ne s'agisse d'une mauvaise implémentation / bug ( au niveau de ton bios? honètement aucune idée )
Dernière modification par jacobus77 (Le 11/10/2010, à 21:12)
Hors ligne
#5 Le 12/10/2010, à 20:55
- ddmdllt
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
Bonjour,
J'avais déjà remarqué la possibilité de régler le "swappiness" mais je n'y ai pas touché. Le but décrit de ce réglage semble être d'influer sur la décision de déplacer ou non des données de la RAM vers le swap, et non d'influer directement sur la façon dont les données en swap sont rapatriés vers la RAM.
Lors d'une hibernation ("mise en veille prolongée" ou "suspend to disk"), il est normal que les données de la RAM soient déplacées ailleurs puisque le PC est réellement éteint. Ça je ne cherche même pas à influer la dessus.
En sortie d'hibernation cependant, mon usage de swap est souvent loin d'être nul, et j'ai bien l'impression qu'une bonne partie des données stockées en swap n'est rapatriée en RAM que quand cela est strictement nécessaire. Je ne sais pas si c'est ou non le comportement normal prévu mais c'est comme ça que ça semble se passer pour moi... (Ubuntu 9.10) Un "cat /proc/swaps" ne fait aucune ambiguïté.
Ce que je préférerais est de rapatrier au plus tôt le maximum de données en swap vers la RAM pour que le système réponde vite (ou tout simplement correctement dans le cas d'un firefox avec plein d'onglets) à la reprise.
Quant au bios, je ne vois honnêtement pas comment il pourrait poser problème ici...
Hors ligne
#6 Le 13/10/2010, à 00:37
- jacobus77
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
vider le swapp vers la ram:
https://help.ubuntu.com/community/SwapFaq#Empty%20Swap
remarque: tu fais tjrs unswappon swapoff à un moment pas trop le choix en fait
Dernière modification par jacobus77 (Le 13/10/2010, à 00:42)
Hors ligne
#7 Le 13/10/2010, à 12:03
- ddmdllt
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
Oui, ça j'avais repéré comme méthode, mais comme je l'ai dit au départ, je ne souhaite pas être obligé de me retrouver sans swap disponible simplement parce que j'ai voulu rapatrier toutes les données en swap dans de la RAM suffisamment disponible.
Hors ligne
#8 Le 13/10/2010, à 12:15
- jacobus77
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
Crée un second swap, active le.
Vide le premier en adaptant le script: swap2ram.sh pour qu'il ne soit actif que sur ton premier swap.
Désactive le second swap une fois que le premier est redevenu actif, ainsi tu auras tjrs un swap actif.
Non ?
Hors ligne
#9 Le 13/10/2010, à 12:32
- ddmdllt
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
À priori ça marche, je ne dis pas le contraire d'ailleurs, mais soit il faut allouer de façon fixe un espace disque pour ça, soit faut recréer à chaque fois un fichier de swap (remplir un fichier d'une certaine taille puis mkswap). Sachant qu'en plus pas moyen de faire du swap avec des fichiers "creux".
Dernière modification par ddmdllt (Le 13/10/2010, à 12:32)
Hors ligne
#10 Le 13/10/2010, à 13:20
- jacobus77
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
ok j'avais pas compris.
Si tu es intéressé sur comment fonctionne la gestion de la mémoire dans linux tu as cet ouvrage, si la réponse a ta question est quelquepart c'est là: tu as la partie 12 consacré au swap.
http://www.skynet.ie/~mel/projects/vm/g … tml.tar.gz
bye.
Dernière modification par jacobus77 (Le 13/10/2010, à 14:58)
Hors ligne
#11 Le 13/10/2010, à 17:48
- ddmdllt
Re : Vider le swap sans swapoff ? (et sans jamais le désactiver)
Euh, pour précision mon problème est bien un problème pratique : j'en arrive à ne plus trop vouloir utiliser le mode hibernate dans les cas où j'en ai envie (besoin de couper mon laptop rapidement alors que j'ai plein d'onglets ouverts sous firefox et/ou parfois eclipse et/ou quelques autres programmes ouverts).
(Sinon me plonger en profondeur dans le code du noyau linux ne me déplairait pas, c'est juste que je peux garantir qu'il y a très peu de chances que ça arrive entre aujourd'hui et 2011... Merci quand même.)
Hors ligne