Quand y en a (plus de) RAM, y a ramzswap !
Et dire que j’étais venu à l’origine pour parler de ramzswap (alias compcache) … et que j’en suis arrivé à faire du style WordPress. Finalement, c’est du tout gagnant.
Je voulais donc toucher quelques mots sur un des nouveaux modules du noyau Linux : ramzswap. Késako allez-vous me dire ? C’est un module qui permet de créer des pages de fichier d’échange (swap pages) dans la RAM.
Présentation des bases
Si vous vous demandez ce que c’est que le swap, ou fichier d’échange, je vous invite à consulter Wikipedia (en ou fr). Grosso modo, le processeur va chercher les infos à traiter en RAM en temps normal. Quand il n’y a pas assez de place en RAM, des pans de RAM sont stockés dans un fichier1, le fichier d’échange. L’intérêt est que la place disponible sur un disque dur est plus importante (centaine de gigaoctets par disque dur contre deux, quatre voire six gigaoctets en RAM), mais les temps d’accès tout comme le taux de transfert sont désastreux : de l’ordre de la centaine de miliseconde sur un disque dur, alors que la RAM est accessible en quelques cycles processeurs, soit de l’ordre de la microseconde.
S’ajoute une problématique de durée de vie du support avec l’arrivée des supports flash que sont les cartes SD (et consors) ou les disques durs dit SSD : le nombre d’écritures sur un emplacement donné du support est limité.
Prenant en compte toutes ces considérations, le projet compcache2 est né. C’est un module noyau Linux qui permet de créer dans la RAM, un espace de swap compressé. Car c’est là tout l’intérêt de ce module : les données sont compressées efficacement grâce à LZO, disponible directement dans le noyau. Quid de l’utilisation processeur me direz-vous ? Au vu des puissances actuelles, celle dégagée pour la compression est négligeable au vu du gain de performances.
Le projet compcache est partiellement intégré au noyau linux 2.6.33 (drivers en staging), et sera complètement intégré au 2.6.34. En attendant, le site du projet fournit un package source permettant de compiler le module pour les noyaux ≤((tapé en bépo
))2.6.32.
Cas pratique
J’ai pu expérimenter sur mon ordinateur portable l’installation et l’utilisation de ce module. Il est recommandé de mettre un espace de swap par processeur/cœur. Étant équipé avec un Core 2 Duo T5600, j’ai crée deux disques RAM. Le gigaoctet de RAM disponible a été coupé en deux morceaux : 50% de RAM, 25% pour un premier ramzswap, et 25% pour un second. On a donc 512Mo de RAM et le reste disponible pour stocker de la RAM compressée.
Le lancement d’Eclipse((Non, eclipse n’est pas un logiciel gourmand en RAM)) s’est bien passé, avec une belle montée de l’occupation en RAM((Je n’ai pas pensé à noter des chiffres, mais ça pourrait venir)). Histoire de faire le fou, lancement d’Iceweasel((Firefox chez Debian)) pour arriver à un stade où avant la création des ramzswap, le système devenait lent. Et là, je ne sentait presque plus le manque de RAM. Il ne faut pas non plus penser que ce genre de mécanismes peut mener à un dédoublement de l’espace mémoire disponible pour les applications : il permet cependant de rassembler et compacter les données, permettant ainsi d’améliorer les performances des machines, dans le sens où le volume applicatif exécutable en parallèle sans accès intempestif au disque est augmenté.
Les clés du succès
Petit récapitulatif des opérations pour ceux qui veulent expérimenter compcache :
- Se placer dans un répertoire adapté
# cd /usr/src/
- Récupérer compcache-0.6.x.tar.gz :
# wget -c http://compcache.googlecode.com/files/compcache-0.6.2.tar.gz
- Décompacter l’archive :
# tar xf compcache-0.6.2.tar.gz
- Se placer dans le dossier de sources :
# cd compcache-0.6.2
- Compiler le module :
# make
- Le module et l’outil de manipulation des ramzswap sont maintenant compilés. Par commodité, déplaçons l’outil rzscontrol dans le PATH :
# mv sub-projects/rzscontrol/rzscontrol /usr/local/sbin
- On charge les modules dont dépend ramzswap :
# modprobe lzo_{de,}compress - On charge le module en créant deux espaces :
# insmod ramzswap.ko num_devices=2
- On initialise l’espace 1 :
# rzscontrol /dev/ramzswap0 --init --memlimit_kb=262144
- On le définit comme espace de swap avant le swap sur disque :
# swapon /dev/ramzswap0 -p 10
- On regarde les stats :
# rzscontrol /dev/ramzswap0 --stats
Et voilà ! J’espère agrémenter ce billet de retours d’expériences personnels sur l’utilisation de ce module dans les semaines à venir.
- Les plus pointilleux diront que ce n’est pas forcément vrai, mais passons [↩]
- Site officiel : http://code.google.com/p/compcache/ [↩]
