Episode 10: Optimisations

 

Préambule:

Une problématique certaine : notre Pi, est fortement sollicité, en particulier sa carte SD.

 

J’en ai planté une (Boulanger 8Go C10) assez rapidement et j’ai même cru avoir perdu mon Pi dans la manœuvre qui consistait juste à installer un serveur http (Apache2)…

 

Depuis, j’y vais comme sur des œufs en faisant des sauvegardes étape par étape afin de permettre une reprise rapide.

J'ai même fini par comprendre pourquoi: La partition NTFS, qui contient tout (O.S. et applicatifs) n'avait pas été étendue à la totalité de la carte micro-SD.

 

Globalement, tout ce qui concours à éviter l’écriture sur la carte SD doit être mis en œuvre.

De nombreux blogs, tutos et articles sur le sujet m’ont permis de dégager quelques pistes.

Mais ma religion est faite, l’idéal au moment de la mise en production sera de transférer le soft sur un serveur NFS. Et pourquoi pas utiliser un Pi associé à un disque SSD pour ce faire ?

C’est à creuser.

 

Pour le moment, je vais m’attacher à limiter la casse.

1) Première mesure largement plébiscitée par les pros : remplacer Apache2 par lighttpd et MySql par slite3. C’est facile surtout si on n’a pas encore installé Apache2, ce qui est mon cas. Lire ICI.

Ensuite, je suis les conseils de ce tuto, sauf pour ce qui concerne l’overclocking que je laisse de côté pour le moment.

C’est parti !

2) Le fichier sysctl.conf est lu au démarrage et permet de régler certaines options du noyau. Règlage de la priorité du swap (swapiness) et de quelques options pour le réseau:

optim_00.jpg

Ces modifications concernent surtout le réseau (toutes les entrées net.ipv4)

L'entrée swapiness sert à régler le comportement du système vis à vis du swap (Rappel: le swap est un fichier situé sur l'espace de stockage physique, ici la carte SD, et qui prend le relai lorsque la RAM est pleine, ou en passe de l'être). Plus le chiffre est bas, plus le système va attendre et privilégier la RAM.

L'entrée vfs_cache_pressure contrôle le comportement du noyau vis à vis du rapatriement du cache des dossiers et des inodes situé en RAM. Plus le chiffre est bas, moins le noyau réclamera le cache.

A contrario, descendre trop bas va mettre trop de pression sur le fichier swap, chose qu'on ne veut pas. 50 est un bon compromis entre la performance et la stabilité.

Si vous prévoyez d'héberger un serveur, il sera peut-être nécessaire, en cas de problèmes, de mettre en commentaire la ligne net.ipv4.ip_fordward=0

La valeur standard de kernel.randomize_va_space est 2. (la plus haute) Il s'agit de se prémunir contre certaines attaques par débordement de tampon. On peut la passer à 1

optim_01.jpg

Pour prendre en compte ces modifications:

sudo sysctl -p

optim_05.jpg
3) Remplacer Bash par Dash

Sudo dpkg-reconfigure dash

 optim_03.jpg

 

4) Désactiver les terminaux TTY 2 à 6 pour gagner du temps au boot et aussi de la RAM.

sudo su (on passe en super-utilisateur)

La commande sed permet d'intervenir dans le fichier /etc/inittab sans passer par nano (ou vi ou votre éditeur de texte préféré)

Ici, elle met en commentaire les lignes 55 à 59 du fichier. (note 1)

optim_20.jpg

 

5) Utiliser 512 Mo de swap (au lieu de 100) améliore aussi la performance :

Sudo su

echo "CONF_SWAPSIZE=512" > /etc/dphys-swapfile

puis initialiser et activer

dphys-swapfile setup
dphys-swapfile swapon

exit

 optim_04.jpg

 

6) optimiser le temps de montage du systeme

sudo sed -i 's/defaults,noatime/defaults,noatime,nodiratime/g' /etc/fstab


7)Désactiver IPV6
Si vous n’utilisez pas IPV6, vous gagnerez en ressources et en vitesse de connexion.
Sudo su
echo "net.ipv6.conf.all.disable_ipv6=1" > /etc/sysctl.d/disableipv6.conf
echo 'blacklist ipv6' >> /etc/modprobe.d/blacklist 
sed -i '/::/s%^%#%g' /etc/hosts

disableipv6.conf
et blacklist sont créés avec pour contenus respectifs:

optim_06.jpg
 optim_07.jpg
Le fichier /etc/hosts avant la commande sed –i

optim_08.jpg 
et après :
optim_09.jpg
Les lignes 2 à 6 sont mises en commentaire.
reboot de rigueur ! pas la peine de précéder de sudo puisque nous sommes su (super
user)
 
8) Remplacer le deadline scheduler par le noop scheduler (plus adapté aux supports
SSD, disques ou cartes)
sudo su
sed -i 's/deadline/noop/g' /boot/cmdline.txt
shutdown -r now
 
9) Epurer les logs.
Raspbian est bavard ! C’est bien pratique lors de sa prise en main mais c’est au détriment
de l’utilisation du CPU et de la consommation de mémoire.
 
On remplace tout d’abord rsyslogd par inetutils-syslogd.
apt-get -y remove --purge rsyslog
 optim_12.jpg 
apt-get -y install inetutils-syslogd 
optim_13.jpg 
et on arrête le service qui vient de démarrer pour la suite: 
service inetutils-syslogd stop
 optim_14.jpg

On supprime les fichiers log obsolètes:

optim_18.jpg



Il faut enfin créer un fichier de configuration (un peu long à taper…)

optim_19.jpg
 
nb: dans la dernière ligne de commande ci-dessus (echo -e...), il n'y a pas d'espace entre le /n en fin
des lignes 1 à 3 et le /t du début de la ligne suivante.

puis relancer le service
service inetutils-syslogd start
 
(*) Voir ICI, quelques infos sur la commande sed.
 

 


Liens Relatifs