Vider le cache d'accès disque
Par Heinry 1.0 Olivier le lundi, avril 28 2008, 10:17 - CLI - Lien permanent
Je cherche depuis un moment une solution afin de pouvoir soit vider soit désactiver momentanément le cache d'accès disque, qui est automatiquent géré par le système sous Linux. Etat des lieux de mes recherches, surtout initiées afin d'éviter d'avoir des sautes lors de lectures de vidéos dans Puredata, sans devoir effectuer un redémarrage comme je le fais actuellement.
La première solution, à l'ancienne peut-on dire, consiste généralement à copier un fichier d'une taille supérieure à la quantité de RAM disponible vers /dev/null: On commence par créer un gros fichier dans le /tmp avec la commande dd, ici un fichier rempli de zéro d'une taille de 2 Go. C'est la variable count= qui importe puisqu'il faut qu'elle soit supérieur à la RAM du système. Néanmoins, sinon on veut que cette opération reste un brin véloce, il vaut mieux ne pas créer un fichier inutilement gros. Evidemment, si le /tmp est sur une partition séparée, il vaut mieux que cette partition soit d'une taille supérieure à celle du fichier que l'on s'apprête à créer!
dd if=/dev/zero of=/tmp/gros_fichier bs=1024 count=2097152
Ensuite, on lit ce fichier avec cat et on le redirige vers /dev/null
cat /tmp/gros_fichier > /dev/null
Ca marche, mais c'est tout de même plutôt fastidieux et long. De plus, sur un portable où on dispose d'un seul disque dur, cela risque de faire beaucoup monter la charge système.
La deuxième solution, encore plus à l'ancienne, consiste à démonter puis remonter le système de fichier sur lequel se trouvent les fichiers que l'on souhaite vider du cache. Totalement inenvisageable!
La troisième piste ma paraît plus prometteuse. Sur le blog de mtj, un premier commentaire propose la solution suivante, jugée dangereuse par un autre commentateur (à quel titre? il serait intéressant de la savoir):
sync; echo 1 > /proc/sys/vm/drop_caches
Sur ce blog consacré à VIM, la solution faisant appel à cette dernière ligne de commande est recommandée également, avec la précision que la commande doit être donnée en tant qu'utilisateur root. Cette commande fonctionne à partir de la version 2.6.16 du noyau (Debian Etch et suivantes, Ubuntu Feisty et suivantes...). Enfin, sur le wiki de Open Office, solution similaire à la première solution à l'anciene, mais qui me paraît également trop lourde pour être effectuée en "live" (remplir toute la RAM, puis vider tout le cache d'un block device).