Linux: Créer des RAM Disks

Dans le domaine du developpement informatique, le temps de réponse est une question critiale qui amène parfois à repenser totalement ses systèmes. Dans certains cas, le temps de réponse et limité par le processeur et la mémoire RAM, mais parfois, plus souvent qu’on ne le croit, il peut être significativement réduit avec des optimisations lors de la lecture des données.

Les RAM Disks sont des petits espaces de la mémoire RAM que l’on réserve pour stocker des données dans la mémoire RAM ! Cette méthode de stockage peut augementer les temps de lectures pour notament pour :

  • Les systèmes de caches sur fichiers
  • Les bases de données

Seulement, il y as plusieurs avantages et inconvénients :

Avantages

  • Lecture des données plus rapide
  • Écriture plus rapide

Inconvénients

  • Volatilité des données
  • Espace restreint

Note: Tous les exemples suivants sont faits sur Debian Etch (4.0)

Mettre en place

Pour mettre en place un RAM Disk, c’est très simple. Dans un premier lieu, nous allons préparer le terrain: on va créer un dossier appelé par exemple “ram” où vous voulez sur le disque (j’ai choisi de mettre ce dossier à la racine, donc: /ram) :

mkdir /ram

Une fois notre répertoire d’accueil créé, nous allons monter l’espace RAM sur ce dossier. Nous allons choisir le système de fichier “tmpfs”, idéal pour les RAM Disks et nous allons fixer la taille à 50m.

mount /dev/ram0 /ram -t tmpfs -o size=50m

“/dev/ram0″ correspond au fichier d’un espace possible de la ram dans /dev. Vous ne pouvez pas créer autant que RAM Disks que vous voulez, ce nombre est limité. Chez moi, c’est 16, ça peut différer en fonction du système et des versions. Pour connaitre le nombre de RAM Disks que vous pouvez faire, tapez :

ls /dev | grep ram | wc -l

Cette commande vous renvoi un chiffre, c’est le nombre de RAM Disks disponibles (en quelques sortes).

Une fois la commande mount éffectuée, vous devez pouvoir copier des fichiers, lire, etc.. depuis le dossier /ram. Tout le contenu de /ram est en fait dans la mémoire RAM. Pour vérifier l’utilisation de votre RAM Disk, faites :

df -h

Normalement, une ligne de ce genre devrait apparaitre :

/dev/ram0              50M  1,9M   49M   4% /ram

Ici, le dossier /ram est bien monté avec /dev/ram0. Il y a 50 mégas au total. 1,9M sont utilisés, 49M sont libres. Ce qui fait une utilisation totale de 4%.

Gérer la volatilité

Le gros problème de ce système, c’est que si le serveur s’arrête ou s’il y a simplement un redémarrage, toutes les données sont perdues… Pour gêrer ce problème, nous allons créé un script qui va être appelé à chaque démarrage et à chaque arrêt (ou re-démarrage) qui va monter et copier les données au démarrage et faire un backup et démonter à chaque arrêt.

Le script, vous pouvez le télécharger ici :
http://www.sroze.io/uploads/linux/mountram

Dans ce script, les données sont sauvegardées dans /home/backups/ram/ à chaque arrêt du serveur. Editez le script pour changer l’emplacement.

Note: Ce script n’assure pas la sauvegarde régulière (toutes les x minutes par exemple), il assure uniquement la restitutions des données au démarrage telles qu’elles étaient lors du dernier arrêt (normal) du serveur. C’est pourquoi, je vous conseil d’y ajouter un cron qui fait des sauvegardes toutes les 5 ou 10 minutes par exemple.

Pour le mettre en place directement, faites (en root) :

cd /etc/init.d
wget http://www.sroze.io/uploads/linux/mountram
chmod +x ./mountram

Ensuite, pour “demander” l’éxécution lors de l’arrêt et lors du démarrage, faites :

update-rc.d mountram start 10 1 2 3 4 5 . stop 50 6 0 .

Maintenant, redémarrez.

Il ne vous reste plus qu’à définir des tablespaces (PostgreSQL) dans votre base de données ou à changer les répertoires de stockage de vos caches !

facebooktwittergoogle_plusredditpinterestlinkedinmail

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">