Tmpfs

Entendez Temporary File System (système de fichier temporaire), est implémenté dans le noyau 2.6 et se base sur ramfs, il propose une limite de taille mémoire allouable fixée au moment du montage modifiable à la volée et utilisant le swap si nécéssaire. Le gros avantage de tmpfs par rapport à ramfs est l’allocation dynamique de la mémoire permettant ainsi de ne pas utiliser la mémoire si cela n’est pas nécéssaire. Je m’explique si vous allouez 1Go de ram à un montage tmpfs, que vous y écrivez un fichier de 100Mo, les 900Mo restant seront allouables aux autres ressources. Je vous invite à regarder les options spécifiques de montage de tmpfs avec man mount. Par défaut, si vous ne spécifiez pas de valeur de taille, la moitié de votre ram sera allouée.

Il me semble une trés mauvaise idée d’allouer toute votre ram à tmpfs, cela risque en cas de saturation de l’obliger à swapper et, de fait, d’obtenir des performances inverses…

Bien, passons aux exemples.

Portage

Par défaut, portage utilise le repertoire de travail temporaire /var/tmp/portage afin d’y décomprésser les sources d’un paquet et d’y faire son travail de compilation (make), mais aussi son installation (make install), ensuite seulement il copie les fichiers installés dans votre système.

Je pense que vous aurez compris le bénéfice en terme de rapidité lors d’un emerge, d’écrire ces fichiers temporaires directement dans la mémoire via tmpfs plutôt que sur le disque dur sachant que généralement votre mémoire devrait être quelque chose comme 200 fois plus rapide que votre disque…

Dans la pratique, vous avez deux solutions: utiliser /dev/shm , ou créer un point de montage spécifique pour votre portage.

/dev/shm

/dev/shm alloue la moitié de votre ram avec tmpfs.

Pour ce faire il vous suffit de modifier votre ficher /etc/portage/make.conf avec les valeurs suivantes:

PORTAGE_TMPFS="/dev/shm"
PORTAGE_TMPDIR="/dev/shm"
BUILD_PREFIX="/dev/shm"

/var/tmp/portage

Si en revanche vous choisissez de créer un point de montage spécifique, vous devrez modifier votre fichier /etc/fstab:

none                    /var/tmp/portage     tmpfs     uid=250,gid=250,mode=775,noauto            0 0

Montez-le avant de lancer l’installation d’un paquet:

mount -v /var/tmp/portage

Certain paquets tels que gcc ou openoffice auront besoins de plus d'1Go d’espace temporaire, ou encore si vous avez beaucoup de paquets à mettre à jour, n’utilisez pas cette technique car vous arriverez vite à saturation des 1Go faisant ainsi planter vos installations

/tmp

Une autre utilisation est de monter tout votre /tmp avec tmpfs améliorant passablement les performances des logiciels ou du système lors de l’utilisation de ce repertoire.

Modifiez votre fichier /etc/fstab:

/dev/shm /tmp tmpfs defaults,nosuid,nodev,noexec 0 0

Ce qui, comme expliqué plus haut, allouera la moitié de votre mémoire à ce repertoire.

Je ne saurais trop vous conseillez dans ce cas d’ajouter une crontab root purgeant régulièrement le repertoire /tmp au cas où certaines applications ne le fassent pas correctement:

# vidage du repertoire /tmp des fichiers vieux de 24H toutes les 12H 
0 */12 * * * find /tmp -type f -mmin +1440 -delete > /dev/null

MySQL

Sous gentoo, la configuration par défaut de MySQL est d’utiliser le repertoire /tmp, donc si vous utilisez déjà tmpfs sur /tmp passez votre chemin… ;-) Si en revanche vous désirez séparer le repertoire de travail temporaire de MySQL, modifiez votre fichier /etc/mysql/my.cnf:

tmpdir = /var/tmp/mysql

Créez le repertoire en question:

mkdir /var/tmp/mysql

Modifiez ensuite votre fichier /etc/fstab:

none                    /var/tmp/mysql     tmpfs           uid=60,gid=60,mode=775         0 0

Passons à son activation:

mount -v /var/tmp/mysql && /etc/init.d/mysql restart

Conclusion

tmpfs est trés simple à utliser et peux du coup être adapté à tous vos besoins à condition d’avoir, vous l’aurez compris, une quantité de ram conséquente… ;-)