Il existe deux types de mémoire sur un ordinateur moderne :
– la mémoire vive ou RAM, nécessaire à l’exécution des programmes
– l’espace disque, pour stocker les programmes et les fichiers
On n’utilise plus de mémoire morte (read-only memory ou ROM, comme dans CD-ROM) car la plupart des dispositifs de stockage temporaire sont des espaces disques réinscriptibles (clé USB, disque dur externe).
Dans cet article, nous verrons des manipulations tout à fait normales, comme aide-mémoire pour vos prochains projets ou par simple curiosité.
Il ne s’agit en aucun cas d’overclocking car nous ne modifions pas le fonctionnement normal de la RAM, nous modifions le système d’exploitation pour s’adapter à nos besoins. Overclocker la fréquence de la RAM (comme du CPU et du GPU) est possible mais ce n’est pas l’objet et nous le déconseillons pour un usage normal (apprendre et découvrir l’informatique embarquée).
Il ne s’agit pas non plus d’économiser de la mémoire : dégrader les fonctionnalités en remplaçant les programmes par défaut par des programmes moins gourmands est tentant mais ne doit être fait que si vous atteignez les limites de votre Raspberry Pi.
Pensez également à évaluer correctement vos besoins : si vous avez besoin de 200 Mo de mémoire vive, il est intéressant de chercher à récupérer la mémoire disponible. Si vous avez besoin de 600 Mo de mémoire vive... même pas la peine d’y penser, abandonnez la RPi et passez à une autre carte plus puissante (nous vous parlerons prochainement d’Odroid.. mais chuuuut).
Mémoire vive disponible
La Raspberry Pi version B (la plus courante) dispose de 256 Mo de mémoire (LPDDR2 pour ceux que ça intéresse, aussi appelée mobile DDR ou low-power DDR). Mais cette mémoire sert à la fois à l’exécution des programmes qu’à l’affichage vidéo (HDMI ou composite).
Pour nous qui utilisons les Raspberry Pi pour contrôler des robots sans écran ou avec un minimum de besoin (le projecteur de R2-D2 via la sortie composite), la première opération à faire pour récupérer des dizaines de méga-octets de mémoire vive est de diminuer drastiquement la part réservée à la vidéo.
Avant de taper frénétiquement sur le clavier des commandes récupérées ici ou là, il est important de comprendre ce qu’on fait, les conséquences en terme de qualité ou de simplicité d’utilisation.
Pour commencer, il faut définir quelle est la quantité de mémoire vive totale disponible et notre consommation de mémoire dans un usage courant, afin de vérifier la nécessité d’augmenter la mémoire.
Croyez-moi : gagnez du temps en arrêtant la lecture de cet article (il y en a plein d’autres tout aussi intéressant sur ce site) si vous n’avez pas besoin de mémoire.
La commande "top" dans un terminal (console SSH par exemple) permet de connaitre instantanément la consommation et le total disponible.
top - 09:46:34 up 19 min, 1 user, load average : 0,00, 0,01, 0,05
Tasks : 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
%Cpu(s) : 0,7 us, 0,7 sy, 0,0 ni, 98,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem : 187308 total, 56820 used, 130488 free, 10948 buffers
KiB Swap : 102396 total, 0 used, 102396 free, 27408 cached
Ici, on apprend que cela fait 19 minutes que je rédige cet article :) et que la Raspberry Pi dispose de 180 Mo de mémoire maximum, et qu’il m’en reste encore 130Mo : pas besoin d’aller modifier !
Maintenant, lançons un programme de contrôle du robot Nono en tâche de fond, utilisant du traitement XML, du Java et de la synthèse vocale.
top - 09:55:47 up 29 min, 1 user, load average : 2,41, 0,90, 0,37
Tasks : 61 total, 5 running, 56 sleeping, 0 stopped, 0 zombie
%Cpu(s) : 84,6 us, 15,4 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0
KiB Mem : 187308 total, 174980 used, 12328 free, 11096 buffers
KiB Swap : 102396 total, 0 used, 102396 free, 64552 cached
Ouch, 12 Mo... cela pourrait être juste quand le programme sera encore plus complet. Donc on va pouvoir procéder à l’augmentation de mémoire.
Dans la distribution utilisée aujourd’hui (Raspbian Occidentalis by AdaFruit), un utilitaire dédié à la Raspberry Pi est installé, c’est "rpi-update".
Il permet de réaliser différentes tâches, et en particulier la modification du démarrage et de la configuration. Si on le lance sans paramètre, il vous donnera la répartition par défaut.
Attention, cette commande va mettre à jour le firmware de la Raspberry Pi. N’exécutez pas cette commande si vous craignez de perdre des paramètres spécifiques. De plus cela prend beaucoup de temps. Prenez bien soin d’avoir fait les dernières mises à jour avant de l’exécuter.
pi@raspberrypi $ sudo apt-get update && sudo apt-get upgrade
pi@raspberrypi $ sudo rpi-update
Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS
Performing self-update
Autodetecting memory split
Using ARM/GPU memory split of 192MB/64MB
Updating firmware (this will take a few minutes)
Checking out files : 100% (2113/2113), done.
Using HardFP libraries
If no errors appeared, your firmware was successfully updated
A reboot is needed to activate the new firmware
On peut lui demander d’augmenter la mémoire programme à 240 ou 224 ou la diminuer à 128 (donnant autant de RAM à la vidéo qu’aux programmes).
Pourquoi garder de la mémoire pour le GPU si on n’utilise pas de sortie vidéo ? Parce que ce n’est pas qu’une carte graphique, c’est aussi un élément indispensable du démarrage bas-niveau (boot, comme le BIOS pour un PC standard) et surtout pour Nono le robot qui parle, le GPU gère le son !
Et ensuite, il n’y a plus qu’à rebooter :
pi@raspberrypi $ sudo rpi-update 240
...
pi@raspberrypi $ sudo reboot
Broadcast message from root@raspberrypi (pts/0) (Thu Sep 6 10:41:32 2012) :
The system is going down for reboot NOW !
Et on teste :
top - 10:43:47 up 1 min, 1 user, load average : 0,73, 0,41, 0,16
Tasks : 57 total, 1 running, 56 sleeping, 0 stopped, 0 zombie
%Cpu(s) : 0,7 us, 0,3 sy, 0,0 ni, 99,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0
KiB Mem : 237912 total, 55544 used, 182368 free, 9476 buffers
KiB Swap : 102396 total, 0 used, 102396 free, 27776 cached
Alternative sans rpi-update
Si vous ne disposez pas de rpi-update sur votre distribution, les instructions pour l’installer sont ici.
Si vraiment vous préférez vous en passer, alors il suffit de remplacer le fichier start.elf par une des versions disponibles dans la dernière branche officielle :
pi@raspberrypi $ ls -l /boot/*start.elf
– rwxr-xr-x 1 root root 2463440 sept. 6 10:23 /boot/arm128_start.elf
– rwxr-xr-x 1 root root 2463440 sept. 6 10:23 /boot/arm192_start.elf
– rwxr-xr-x 1 root root 2463440 sept. 6 10:23 /boot/arm224_start.elf
– rwxr-xr-x 1 root root 640592 sept. 6 10:23 /boot/arm240_start.elf
– rwxr-xr-x 1 root root 640592 sept. 6 10:32 /boot/start.elf
pi@raspberrypi $ sudo cp /boot/armXXX_start.elf /boot/start.elf
Remplacez XXX par la valeur de mémoire RAM pour les programmes que vous souhaitez. L’exemple ci-dessus montre bien que c’est le boot le plus récent (le 240 qui a été mis à jour par rpi-update) qui est installé. Vous n’aurez peut-être pas tous ces fichiers sur votre version.
Espace disque disponible
La mémoire de stockage disponible dépend de la taille de la carte mémoire utilisée. Mais selon l’installation que vous avez faite, il y a peut être une partie inutilisée.
La commande nécessaire pour tester l’espace disque sous Unix est "df" :
pi@raspberrypi $ df -h
Sys. fich. Taille Util. Dispo Uti% Monté sur
rootfs 3,6G 2,1G 1,4G 61% /
/dev/root 3,6G 2,1G 1,4G 61% /
devtmpfs 117M 0 117M 0% /dev
tmpfs 24M 200K 24M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 47M 0 47M 0% /tmp
tmpfs 47M 0 47M 0% /run/shm
/dev/mmcblk0p1 56M 34M 23M 60% /boot
Cela donne une indication (3,6 Go sur rootfs, 117 Mo sur devtmpfs, encore un peu sur /boot) ce qui permet de détecter si une carte est sous-utilisée. Ici, la carte de 4 Go est bien paramétrée.
Pour tester toute la carte au plus bas niveau, il faut utiliser fdisk :
pi@raspberrypi $ sudo fdisk -c -u /dev/mmcblk0
Command (m for help) : p
Disk /dev/mmcblk0 : 4075 MB, 4075290624 bytes
4 heads, 16 sectors/track, 124368 cylinders, total 7959552 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical) : 512 bytes / 512 bytes
I/O size (minimum/optimal) : 512 bytes / 512 bytes
Disk identifier : 0x000714e9
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 7741439 3809280 83 Linux
Pour ceux qui disposent d’une distribution récente, vous pouvez utiliser l’outil raspi-config qui regroupe différents utilitaires. L’une des options permet d’augmenter l’espace disque, comme vous pouvez le voir sur la copie d’écran suivante :
pi@raspberrypi $ sudo raspi-config
Testez les autres utilitaires à vos risques et périls, n’oubliez pas que la règle en informatique est de faire seulement ce qui est nécessaire !
Alternative sans raspi-config
L’utilisation de l’outil parted est également disponible pour les utilisateurs expérimentés. Nous recommandons de le faire depuis un système tiers, pas directement depuis votre Raspberry Pi. Voici les copies d’écran des opérations et calculs réalisés pour utiliser tout l’espace d’une carte 4 Go à partir d’une image Debian Squeeze ayant installé seulement 2 Go :
Cette opération est complexe : nous la réalisons en atelier, mais il est préférable de bien lire la documentation de fdisk, de parted et de resize2fs pour comprendre ce que vous faites.