Gestion intelligente des ressources

Dans le document en fr (Page 114-118)

capteurs sans fil

3.2 La gestion de la mémoire Flash

3.2.2 Les concepts définis pour la gestion des données

3.2.2.2 Gestion intelligente des ressources

La solution de l’en-tête pour le stockage des attributs d’une page a été retenue car elle minimise le nombre d’écritures dans la mémoire Flash. Elle est l’un des mécanismes de gestion économe de la mémoire Flash. Les autres portent sur les conditions de déclenchement d’une programmation et la préservation des pages les plus utilisées.

Dans une première approche, le stockage des données acquises est effectué de manière séquentielle, donnée par donnée, page par page. Or, en règle générale, une donnée a une taille plus petite voire beaucoup plus petite que celle d’une page. La mémoire se retrouve ainsi considérablement fragmentée. En arrivant à la fin de la mémoire Flash, on peut facilement revenir au début de la mémoire et rajouter des données. Une rotation dans l’écriture des pages s’effectue naturellement et permet leur préservation (voir Figure 3.10).

Figure 3.10 – Ecritures séquentielles des données dans la mémoire Flash

Cependant, certaines applications autorisent de différer la sauvegarde des données en mémoire Flash. Elles permettent l’intégration d’une étape intermédiaire matérialisée par le stockage des données dans un espace mémoire ou « buffer » réservé dans la mémoire RAM.

La taille de ces espaces mémoires peut être inférieure ou égale à celle d’une page de mémoire Flash. En effet, il peut être inférieur, si au lieu de considérer la donnée seule, on considère une séquence significative composée de plusieurs données. Par exemple, la taille d’une page de mémoire Flash d’un microcontrôleur AT91SAM7S256 est de 256 octets. Les données peuvent donc être écrites par bloc de 256 octets dans la mémoire Flash après avoir été stockées dans un buffer de mémoire SRAM. La mémoire Flash est ainsi à la fois moins sollicitée et moins fragmentée. Chaque page remplie ne possède pas 256 octets de données car il faut prendre en compte l’espace mémoire occupé par l’en-tête (voir Figure 3.11).

Les conditions du déclenchement de l’écriture dans la mémoire Flash doivent être établies suivant les contraintes de l’application. Le stockage dans la mémoire Flash peut avoir lieu plus fréquemment que par bloc de 256 octets (en intégrant l’en-tête de la page) pour limiter la quantité de données perdues en cas de problème d’alimentation. En effet, les données stockées dans la mémoire SRAM seront effacées en cas de redémarrage du système.

Un compromis entre la préservation de la mémoire Flash et la quantité de données que l’on peut potentiellement perdre existe et doit être trouvé pour chaque application considérée. Pour les applications où toutes les données sont critiques, le stockage de manière séquentielle dans la mémoire Flash reste la solution la plus simple mais peut être remplacé par une collaboration entre plusieurs capteurs sans fil. Après avoir acquis une donnée, le capteur sans fil stocke celle-ci en mémoire SRAM et en envoie une copie à ses capteurs voisins. Ainsi,

CemOA : archive ouverte d'Irstea / Cemagref

même en cas de panne, la donnée n’est pas perdue. Ce mode de fonctionnement est abordé dans la section 3.5.1 dédié à la sauvegarde des données.

Figure 3.11 – Utilisation de la mémoire Flash sous le système LiveFile

Suivant la fréquence d’acquisition des données, le nombre de buffer de mémoire SRAM varie. Si cette fréquence est plus longue que le temps total de stockage des données dans la mémoire Flash qui comprend les étapes de recherche et de programmation d’une page, 2 buffers seulement sont nécessaires : l’un pour la programmation, l’autre pour la lecture de la mémoire Flash. Pour les applications avec des fréquences d’acquisition plus fortes, 2 buffers d’écriture peuvent être requis : l’un pour réaliser l’opération de programmation et l’autre pour stocker les données nouvellement acquises. La durée de la programmation d’une page étant incompressible, le temps nécessaire à une écriture dépend de la durée de recherche et de mise-à-jour des attributs de l’en-tête d’une page. Finalement, si la mémoire Flash est à la fois très sollicitée et fragmentée avec plus aucune page entièrement vide disponible, un quatrième buffer est obligatoire. Son rôle est de stocker temporairement la page sélectionnée pour ajouter de nouveaux éléments en fin (voir Figure 3.12).

Figure 3.12 – Nombres de buffers nécessaires suivant l’application supportée

CemOA : archive ouverte d'Irstea / Cemagref

L’écriture d’une page de mémoire Flash est une opération assez longue et consommatrice d’énergie. Limiter le nombre d’écritures permet donc d’économiser les ressources du système. Dans le microcontrôleur AT91SAM7S256, la durée de la programmation d’une page est de 6ms et doit être prise en compte si le nombre d’écritures planifié pour une application est important. Le fonctionnement du système d’exploitation pourra être adapté pour répondre à ce type de sollicitation.

Le nombre d’écritures déjà subies par une page est connu grâce à son en-tête et autorise l’élaboration d’une technique de rotation de programmation (« wear-levelling »).

L’objectif d’un tel dispositif est de préserver les pages qui auraient été utilisées de manière plus intensives par rapport aux autres. Au départ, la mémoire Flash va être programmée dans l’ordre de numérotation de ses pages. Une page qui serait libérée pour cause de données stockées devenues obsolètes, ne sera réutilisée que si la mémoire Flash est remplie. En effet, si les pages libérées étaient directement reprogrammées, elles auraient deux écritures de plus par rapport à d’autres pages (voir Figure 3.13).

Figure 3.13 – Premières écritures dans la mémoire Flash

Au fur et à mesure de l’application, la mémoire Flash va être de plus en plus fragmentée. Cela implique d’une part de stocker les emplacements mémoires vides et d’autre part de savoir pour chaque page si elle doit ou non être préservée. La première partie est réalisée, en stockant dans la mémoire SRAM, la liste des pages non utilisées pour éviter d’avoir à parcourir l’ensemble de la mémoire Flash pour les rechercher. Cette liste sera également stockée, en temps voulu, dans une ou plusieurs pages de type « CHECKPOINT » pour qu’en cas de redémarrage ou panne d’alimentation du système, les données stockées soient retrouvées. Dans le cas des enregistrements au format défini préalablement, la gestion des emplacements mémoire libres peut être affinée en considérant non seulement les pages intégralement libres mais également les espaces mémoires vides présents au sein des pages (voir Figure 3.14).

Cependant, toutes les pages libres ne vont pas faire partie de cette liste. Les pages les plus utilisées vont être reversées dans une liste dite de préservation. Pour déterminer dans quelle liste, une page va être répertoriée, un indicateur d’usure est défini. Celui-ci fixe le nombre d’écritures limites que peut subir une page avant d’être préservée. La valeur de cet indicateur est fixée au départ suivant les contraintes de l’application supportée. Cependant, pour certaines applications, cet indicateur ne doit pas être constant pour éviter la pénurie de pages libres au profit des pages préservées.

CemOA : archive ouverte d'Irstea / Cemagref

Figure 3.14 – Gestion des emplacements libres

Par conséquent, quand le nombre de pages préservées atteint un certain seuil, cet indicateur est incrémenté. Ainsi, les pages préservées sont donc toutes reversées dans la liste des emplacements libres (voir Figure 3.15).

Figure 3.15 – Fonctionnement du mécanisme de préservation des pages

En utilisant cette technique, pour une acquisition de données constamment renouvelées, toutes les pages dédiées au stockage ont quasiment le même nombre de programmations subies. Pour une application plus complexe où des pages entières sont conservées par rapport à certaines de leurs propriétés, cette répartition du nombre de programmations n’est pas uniforme sur l’ensemble de la mémoire Flash mais l’est au niveau du groupe des pages les plus utilisées. Une page peut être peu utilisée pour diverses raisons.

La principale est que celle-ci contient des informations systèmes utiles pour la récupération des données après une panne. Ces informations sont, par exemple, le début et la fin de la mémoire Flash réellement allouée aux stockages des données acquises. Une page qui

/* Recherche d’une page libre */

nouvelle_page recherche_page_libre();

/* Initialisation du compteur de changement du seuil d’usure */

compt_chgt_seuil 0;

/* Recherche d’une page pouvant être encore utilisée */

TANT QUE (nouvelle_page.nbre_ecriture > seuil_usure) ET (compt_chgt_seuil < chgt_seuil) FAIRE

compt_chgt_seuil compt_chgt_seuil + 1;

/* Préservation de la page trop utilisée */

preservation(nouvelle_page);

nouvelle_page recherche_page_libre();

FINTANTQUE

SI (comp_chgt_seuil = chgt_seuil) ALORS

/* Modification de la valeur du seuil d’usure */

seuil_usure seuil_usure + µ;

/* Réintégration des pages auparavant préservées */

reintegration(liste_page_preservees);

FINSI

CemOA : archive ouverte d'Irstea / Cemagref

stockerait des données acquises importantes par rapport aux phénomènes qu’elles caractérisent pourra rester inchangée tout au long du fonctionnement du capteur. Par exemple, dans une application de surveillance d’une forêt, les événements marquants comme des incendies seront stockés au sein de pages de la mémoire Flash pour, a priori, un certain temps.

Pour pallier ce problème, ces renseignements peuvent être déplacés dans des pages très utilisées pour les économiser voire dans des pages préservées.

De manière synthétique, la gestion intelligente des ressources s’appuie sur les trois mécanismes suivants :

• la programmation de pages différée grâce à l’utilisation de buffer de mémoire SRAM ;

• la rotation de la programmation entre les différentes pages ;

• la préservation des pages les plus utilisées.

Suivant l’application, ces mécanismes pourront être utilisés à différents niveaux. Pour des applications simples avec une faible quantité de données à stocker, la préservation des pages ne sera pas forcément utile et viendra alourdir le fonctionnement du système. De plus, la gestion des ressources, par l’intermédiaire de ces mécanismes, ne se résume pas seulement à la mémoire. L’énergie du capteur est d’une part économisée en limitant le nombre de programmations dans la mémoire Flash. D’autre part, cette gestion n’implique pas des traitements lourds qui monopoliseraient le processeur pendant des laps de temps conséquents.

Dans le document en fr (Page 114-118)