Application des techniques d analyse prédictive pour la lecture anticipée des pages d une mémoire Flash 6 novembre 2015 1 Introduction Le stockage en mémoire secondaire reste le principal goulet d étranglement pour les performances des applications gourmandes en entrées sorties comme les systèmes de gestion de bases de données (SGBD). Afin de réduire l impact sur les performances des accès à la mémoire secondaire, les systèmes d exploitation implémentent un cache en mémoire pour maintenir les données les plus utilisées en mémoire et réduire ainsi le nombre d accès en mémoire seconaidre. Une autre utilisation du cache consiste à charger les données qui vont être utilisées dans un futur proche. Nous retrouvons cette technique dans le noyau Linux sous le nom de readahead. Dans le présent projet, nous étudions cette technique de readahead, ses limites et nous proposons une nouvelle politique pour anticiper le chargement des pages. 2 Contexte du projet Nous assistons aujourd hui à l émergence des support de stockage à base de mémoire Flash. Ces périphériques équipent de plus en plus les serveurs et les laptops et prennent de plus en plus de place face aux disques durs à mémoire magnétique même si l on ne parle pas encore de déclin de ces dernièrs. Ce nouveau type de périphérique présente de nouvelles caractéristiques qui font la différence sur les périphériques magnétiques, nous présentons brièvement cidessous ces nouvelles caractéristiques : Types d opérations : Trois opérations sont possibles sur les mémoires Flash, lecture, écriture et effacement. La granularité des opérations : Les opérations de lectures et écritures se font sur des pages alors que les opérations d effacement se font sur des blocs, un bloc est constitué d un ensemble de pages. Lectures symétriques : Les lectures aléatoires et séquentielles présentent les mêmes performances sur une mémoire Flash. 1
Écritures asymétriques : Les écritures aléatoires sont moins performantes que les écritures séquentielles. Durée de vie : Le nombre d effacement sur des cellules d une mémoire Flash est limité, une fois cette limite atteinte, ces cellules sont considérées comme inutilisables. Consommation énergique : Les mémoires Flash consomment mois d énergie que les disques durs. Les systèmes d exploitation ainsi que la plupart des applications ont été conçus sur la base du modèle de performance des disques durs magnétique. La démocratisation de l utilisation des périphériques de stockage à base de mémoire Flash impose la revue de certaines conceptions et implémentations, qu elles soient au niveau applicatif ou au niveau système d exploitation. 3 Problématique La lecture anticipée des pages dans le noyau Linux a toujours été basée sur une heuristique séquentielle afin de favoriser les accès séquentiels vers le périphérique de stockage. Aujourd hui avec l utilisation des périphériques de stockage à base de mémoire Flash, les applications ne sont plus contraintes par un accès séquentiels aux données, l accès peut se faire aléatoirement. Par conséquent, la lecture anticipée des pages basée sur une heuristique séquentielle devient totalement obsolète car elle ne prend pas en compte les accès aléatoires qui deviennent de plus en plus répandus. Figure 1 Exemple de déroulement d une opération de lecture en readahead 2
4 Objectif du projet Ce projet vise à optimiser la lecture anticipée des pages dans le noyau Linux pour l utilisation d une mémoire Flash. Nous souhaitons faire en sorte que la lecture anticipée des pages prennent en compte les accès aléatoires au stockage. Cette fonctionnalité pourrait rendre la lecture anticipée des pages efficace même pour des accès aléatoires. 5 Application d une machine d apprentissage automatique Pour résoudre le problème de l anticipation des lectures aléatoires, nous proposons l utilisation d une machine d apprentissage automatique (Machine learning en Anglais). Cette technique s utilise en deux étapes, une première étape d apprentissage et une deuxième étape de prédiction. L étape d apprentissage permet de documenter le comportement d un système, dans notre cas les accès aux stockages. La deuxième étape, la prédiction, permet de prédire les comportements futurs en se basant sur les comportements précédents documentés lors de la phase d apprentissage. 6 Développement 6.1 Environnement L environnement de développement du projet comprends les éléments hardware et software suivant : Carte Armadeus APF27 équipé d une mémoire Flash, d un processeur ARM. Noyau Linux 2.6.29. Gestionnaire de version : Nous utiliserons SVN comme outil de gestion de versions. Je vous communiquerai l adresse lors de notre première séance ensemble. Outils de virtualisation : VirtualBox et Qemu. Outil de gestion de projet : Redmine. 6.2 Développement de la solution Le développement de la solution nécessite des connaissances de bases sur le fonctionnement du noyau Linux et la pile des appels systèmes. Une documentation solide doit être faite sur le fonctionnement des E/S sous linux notamment les appels systèmes liés aux E/S et le mécanisme de ReadAhead (Lecture anticipée). Le projet est réparti en trois phase de développement, le développement de la phase d apprentissage, le développement de la phase de prédiction et le développement de l interface utilisateur. 3
Figure 2 Exemple d application de la machine learning pour l anticipation des lectures 6.2.1 Développement de la machine d apprentissage automatique Une fois le fonctionnement des E/S dans le noyau Linux est suffisament bien documentée, nous allons nous désigner un ensemble d appels systèmes qui permettraient de renseigner le comportement des E/S et alimenter la machine d apprentissage. Le développement de la phase d apprentissage nécessite l utilisation d une technique d interception des appels systèmes. L interception des appels systèmes peut se faire de plusieurs manières : Sondes jprobes et kprobes. Modification du code noyau. Hacking des appels systèmes.... 6.2.2 Développement de la phase de prédiction Cette phase de notre solution permettrait au noyau Linux de prédire les prochains accès au stockage en se basant sur les accès précédents. Pour y parvenir 4
on aura besoin de modifier le comportement du noyau, ceci pourra se faire comme suit : Modification du code noyau. Hacking des appels systèmes. 6.2.3 Développement de l interface utilisateur Ce projet consiste à développer un module noyau qui permettrai d intégrer une machine d apprentissage et de prédiction pour les E/S. Une fois le module implémenté, l utilisateur doit pouvoir prendre le contrôle de ce dernier, arrêter son action, démarrer son action, afficher les résultats de l apprentissage,... Côté noyau Il est nécessaire d implémenter un mécanisme de communication avec l espace utilisateur. Côté utilisateur il faudra implémenter un mécanisme d envoi de commande vers le module noyau. 6.3 Tests et résultats Une fois le développement de la solution finalisé, nous entamerons une phase de tests et de validation. Nous utiliserons soit des benchmarks reconnu pour faire cela, les étudiants souhaitant développer leur propre benchmark pourront le faire à condition de justifier leur choix. Une fois le module testé et validé, nous entamerons l étape de mesure des performances. Nous considérons les deux métriques hit et miss pour mesurer les performances pouvant être apporté par notre solution. Le taux de hits mesure le nombre de défaut de pages mineurs et le taux de miss mesure le nombre de défaut de pages majeurs. Les défauts de pages mineurs se produisent lorsque l utilisateur accède à une page qui n est pas présente dans son espace mémoire mais présente dans l espace noyau (Cache), Les défauts de pages majeurs se produisent lorsque l utilisateur accède à une page qui n est pas présente en mémoire, ni dans son espace utilisateur ni ailleurs. Un taux de hit élevé prouverait que notre politique de lecture anticipée est efficace. 7 Information sur le déroulement du projet Le projet s effectue en groupe de 4-5 personnes. Chaque groupe doit accomplir l intégralité du travail du projet. Le projet s étalera sur un peut plus d un mois, nous aurons ensemble 5 à 6 séances. Nous utiliserons ensemble un outil de travail collaboratif (Redmine) pour organiser les différentes taches. À cet effet, vous devez commencer par insérer un diagramme de Gant dans le Redmine et créer les différentes taches du projet. Chaque étudiant qui entame une tache doit la renseigner dans l onglet tâche du Redmine, les informations sur cette tâche doivent être mise à jour au fur à mesure que la tâche avance. Durant le projet, il est également demandé à chaque groupe de fournir un rapport hebdomadaire sur l avancement du tavail, les difficultés rencontrés, planification du travail à faire pour la semaine suivante. 5
Le rapport doit être envoyé par mail aux responsables du projet : jalil.boukhobza@univ-brest.fr et arezki.laga@univ-brest.fr Nous vous encourageons à utiliser massivement l outil redmine. Gérez le projet en petite tâches, chaque tâche doit être renseignée avec la description et l étudiant affecté. N hesitez pas aussi à utiliser le forum pour discuter du projet. 8 Documentation Ci-dessous quelques liens utiles : Wiki de Armadeus, la société fabriquant la carte APF27 qui sera utilisée dans le cadre de ce projet : http://www.armadeus.com/wiki/index.php?title=main P age Développement noyau Linux, modules : http://www.tldp.org/ldp/lkmpg/2.6/html/lkmpg.html et http://idak.gop.edu.tr/esmeray/understandingkernel.pdf Etude des sources noyau : http://lxr.free-electrons.com/ 6