Logiciels Libres et Systèmes Embarqués


Annexe A. Evaluation des logiciels pour l'embarqué

Nous allons voir dans ce chapitre l'évaluation des systèmes qui font l'objet de la synthèse du chapitre 6.

A.1. Problématique de l'embarqué

Lorsqu'on conçoit un système embarqué, c'est à dire un système fonctionnant sur une petite carte électronique, on est souvent confronté à de fortes contraintes sur :

La quantité de mémoire

Celle-ci est souvent très limitée pour des raisons de coût mais surtout de place. Sur de tels systèmes, il n'y a généralement que quelques méga-octets, et tout gaspillage peut produire un effondrement des performances. De plus, étant donné qu'il n'y a pas de disque dur, la sauvegarde des pages mémoires[23] est impossible. Cela signifie qu'en cas d'espace mémoire insuffisant, le noyau Linux supprimera aléatoirement des processus pour libérer de la place.

La réactivité

On ne parle pas de vitesse de calcul, mais de temps de latence faible, il ne faut pas se tromper de sujet ! Le vrai problème est donc le délai entre le moment où l'action est commandée et le moment où elle est effectuée. Qui n'a jamais perdu son sang-froid contre son téléphone portable qui met plus de trois secondes à afficher un simple menu... Plus sérieusement, dans les applications industrielles, des temps de latence faible permettent parfois de se passer d'un système temps réel.

A.1.1. Mémoire limitée

Il existe plusieurs solutions pour réduire la mémoire utilisée :

Diminuer la taille du noyau Linux

Celui-ci prend généralement entre 500 Ko et 1.5 Mo. Sachant qu'il n'existe pas de projet visant à diminuer sa taille, c'est au concepteur du système de bien choisir les fonctionnalités et les pilotes à incorporer.

Diminuer la taille des applications

Pour cela, on peut bien évidemment compiler avec l'option -Os de GCC, puis élaguer les binaires avec l'utilitaire strip. Mais c'est surtout le concepteur du système qui doit faire attention aux ressources, et doit alors utiliser des logiciels spécialement conçus pour le domaine de l'embarqué. Cela permet alors de réduire considérablement la taille du RAMDisk, ce qui économise de la mémoire statique[24], ainsi que la taille des processus, d'où une économie de mémoire dynamique[25].

Enfin, il faut savoir qu'il existe encore d'autres méthodes pour diminuer la mémoire utilisée, comme par exemple le système d'"eXecute In Place" (XIP) qui permet d'exécuter le noyau (et les applications) directement à partir d'une ROM, sans recopie en RAM.

A.1.2. Réactivité

Le fait de diminuer la taille du RAMDisk permet d'augmenter considérablement la réactivité du système lors du (re-)démarrage. En effet, on a alors :

Moins d'octets à recopier en mémoire lors de l'amorce

cela fait gagner du temps lors de la recopie.

Plus besoin de compresser le RAMDisk

Cela fait gagner le temps de décompression. Ce point est contradictoire avec le premier. Il faut donc utiliser cette technique uniquement lorsque le temps de chargement du RAMDisk compressé et de sa décompression est supérieur au temps de chargement du RAMDisk décompressé. La figure suivante illustre le problème :

Figure A.1. Gestion du temps de décompression et de chargement

Gestion du temps de décompression et de chargement

Lorsqu'on a moins de mémoire utilisée par le RAMDisk et/ou par les processus, la réactivité du système peut augmenter. En effet, cela permet d'avoir :

Plus de mémoire pour les applications utilisateurs

Ainsi, le concepteur de l'application peut calculer la taille maximale qu'aura besoin son programme durant l'exécution et ainsi allouer statiquement un gros bloque de mémoire. Il faut savoir que les appels aux fonctions malloc/realloc/free peuvent diminuer considérablement les performances d'une application, il est donc préférable de ne pas en avoir besoin.

Plus de mémoire pour le noyau

Le noyau utilise toujours le maximum de mémoire disponible, notamment pour gérer ce que l'on appelle les caches (pas ceux du processeur). Comme leurs noms l'indiquent, ces bloques mémoire permettent de garder une copie des applications et des données en mémoire vive. On voit parfaitement leur utilité lorsqu'on lance Mozilla ou OpenOffice sur sa station de travail : la première exécution est beaucoup moins rapide que les autres, celles-ci utilisant les caches.

Enfin, le temps de latence peut être diminué en utilisant un noyau modifié, avec les correctifs preempt-kernel et/ou low-latency par exemple (déjà intégrés au noyau 2.6), mais cela fait l'objet d'une autre étude.



[23] « swap » en anglais.

[24] qui est tout le temps utilisée.

[25] qui dépend de l'exécution.