Projet de Fin d Études Big-GC : Un ramasse-miette concurrent pour grands volumes de données Réalisé par Abdel CHITOU & Dramane SANGARE Encadré par Gaël Thomas & Elisabeth Brunet
Problématique Big Data: plusieurs Po de données analysées par jour Chaque machine du réseau gère plusieurs centaines de Go à chaque instant Énorme pression sur le ramasse-miette des JVMs Besoin d un nouvel algorithme de ramassemiettes Problématique
Le projet Big-GC But du projet Big-GC à long terme Collecter la mémoire qui contient les objets les moins utilisés lors de l exécution d une application Notre contribution Identifier et libérer en mémoire les objets les moins utilisés lors de l exécution d une application Solution
But du PFE Se servir du matériel pour identifier les emplacements mémoires les moins récemment utilisés Ecrire un module Linux permettant de transférer cette information à un processus simulant une machine virtuelle Java et son application Java écrire une petite application simulant une machine virtuelle Java et son application Solution
Plan Rappel de quelques notions importantes sur le noyau Linux Application de simulation Mise en œuvre du module Linux Démonstration Solution
Rappel de quelques notions sur le noyau Linux Architecture de la solution
Gestion mémoire dans Linux Processus Zone mémoire du processus Adresse logique PTE PMD PGD Access Bit = 1 MM_STRUCT Solution
Module noyau Linux insmod module.ko init_module() TERMINAL MODULE KERNEL rmmod module.ko cleanup_module() Solution
Communication Module-Processus open() device_open() Côté User read() write() DEVICE «/dev/lien» device_read() device_write() Côté Kernel close() device_release() terminal$ mknod /dev/lien c 402 0 Solution
Application de simulation Architecture de la solution
Application de simulation Principe Simuler un tas Java avec la fonction mmap() Simuler des écritures dans le tas Java Interroger périodiquement le module Linux pour obtenir les emplacements mémoires LRU Donc 2 parties: les processus d accès et de contrôle Architecture de la solution
Programme utilisateur : Processus d'accès Simuler un tas Java : mmap() (length = 50Mo) void *pa = (void *)mmap(null, length, PROT_READ PROT_WRITE, MAP_SHARED MAP_ANONYMOUS, -1, 0); Simuler des écritures dans le tas Java *((volatile int *)(pa+pas)) = 42; (pas < length) Envoi de l'adresse pa au module noyau via un write() sur le device Initialisation du timer du processus de contrôle géré par une SIGACTION sur un signal SIGALRM Implémentation de la solution
Programme utilisateur : Processus de contrôle Fonction timer_handler() invoquée par la SIGACTION du processus d'accès Communication avec le module noyau pour récupérer le résultat des traitements du module : les pages LRU : Ouverture du device : fonction open() Lecture du résultat des traitements : fonction read() Fermeture du device : fonction close() Implémentation de la solution
Module noyau Linux Architecture de la solution
Module noyau LINUX Fonction de chargement-déchargement du module int init_module( void ) : Chargement du module register_chrdev(major, DEVICE_NAME, &fops) o o o major : numéro majeur utilisé pour la création du device DEVICE_NAME : variable représentant le nom du device utilisé "lien" dans le dossier /dev fops : structure représentant les fonctions open, read, write et close du device void cleanup_module(void) : Déchargement du module lunregister_chrdev(major, DEVICE_NAME) Implémentation de la solution
Module noyau LINUX Fonction de communication avec le programme utilisateur via le device Open() : Ouverture du device Write() : Reçoit l adresse du segment virtuelle du segment à inspecter (adresse envoyé par mmap) Read() : Renvoie une liste de 100 pages LRU Close() : Fermeture du device Implémentation de la solution
Read() Récupération de mm_struct: struct mm_struct *my_mm = current->mm_struct; Pour toute @ virtuelle, trouver le PTE associé et renvoyer son @ si Acces Bit = 1 for(i=start; i<end; i+=pagesize) { pte_t *ptep = pte_offset(i); pte_t pte = *ptep; if(pte_present(pte) && pte_young(pte)) { write_to_user(i); *ptep = pte & ~ACCESSED; } } Implémentation de la solution
User Land Mémoire virtuelle Rappel de l architecture de la solution Processus d accès Projection en mémoire Processus de contrôle Affiche les adresses des pages LRU libérées Kernel Land Table des Pages Access Bit = 1? Module ASR_PFE Consulte la table des pages pour identifier et libérer les pages LRU Access Bit = 0 Architecture de la solution
Démonstration de la solution Démonstration de la solution
Difficultés rencontrées Conclusion et Perspectives Conclusion et Perspectives
Difficultés rencontrées Faible maîtrise de la programmation C au niveau noyau en Linux L indisponibilité de document de référence traitant du sujet de notre projet de fin d études Le manque de temps pour la documentation Implémentation de la solution
Conclusions et Perspectives Réalisation d un module Linux identifiant les zones mémoires LRU Acquisition d une grande maîtrise des structures internes d un noyau Linux Le livrable servira de base pour construire le ramasse-miette pour big data Implémentation de la solution
Merci pour votre attention! Fin
Projet de Fin d Études Big-GC : Un ramasse-miette concurrent pour grands volumes de données Réalisé par Abdel CHITOU & Dramane SANGARE Encadré par Gaël Thomas & Elisabeth Brunet