Performances importantes Code Natif (C) " Les donnes sont de + en + dynamique Raliser une partie des traitement au niveau du cache"> Performances importantes Code Natif (C) " Les donnes sont de + en + dynamique Raliser une partie des traitement au niveau du cache">
Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAubert Dubost Modifié depuis plus de 10 années
1
Dyner : un noyeau efficace pour le tissage dynamique d'aspects sur processus natif en cours d'ex cution. Exprimentation d'EAOP sur une application concr te diffuse et concurrente 1/49 ;-)
2
Problmatique Gnrale " Adaptation d'application (changer des fonctionnalits) " Application dont la continuit du service est une contrainte " Application aux performances critiques
3
Domaine Applicatif " Cache Web Le prix d'un cache vari de mani re exponentiel par rapport aux nombres de requetes traits à la seconde -> Performances importantes Code Natif (C) " Les donnes sont de + en + dynamique Raliser une partie des traitement au niveau du cache
4
Cache et Composant " Les composants supposs tlchargeables sont tous tr s diffrents Pas possible d'avoir une Interface commune " (voir echec d'ActiveCache et Plugxy) On a montr que sur un certain type de composant l'insertion de la fonctionalit crosscutait le cache " (Compsants tlchargeables en vues : Les services Web)
5
Anticipation des acc s et Cache " Exemple simple Anticipation des acces dans cache web coopratif " Pas anticiper les acces des voisins. " Notion de trace du programme " Vers l'AOP " Contraintes : Tlcharger à la vole des stratgies d'anticipation des acc s Ne pas arr ter le cache lors de l'adaptation Garantir une greffe cohrente et sure
6
AOP en 4 mots " Points de jonction " Langage de Coupe (enchaînement de fonctions) " Langage d'action " Tissage BuildTime / LoadTime / RunTime
7
EAOP (en un peu plus...) " Point de jonction gnr un venement Cet venement est insr dans un trace L'venement propage une partie du contexte d'excution " Un moniteur est charg de reprer un squence d'venement La squence est dfinie par le langage de coupe L'aspect est activ si le motif est trouv
8
EAOP par rapport à notre cadre applicatif " Intrins quement non concurrent une trace d'excution) Le mcanisme de moniteur central et mal adapt (goulot) " Taille des vnements importantes en fonction de la taille du contexte a dupliquer " Langage de coupe non ddi
9
Notre solution " Mod le intrinsequement multi-thread " Langage de coupe clairement identifi Parser / compilateur Volontairement le plus simple possible " Tissage à l'excution Sur code Binaire Sans arr t du processus hôte On ne g le pas le processus via ptrace
10
Les Acteurs " Le concepteur du logiciel de base Annotation de son source " Le concepteur de l'aspect Ecriture de la coupe Ecriture de l'insert " L'administrateur du logiciel en cours d'excution Tissage et de-tissage des aspects.
11
Exemple d'un pt de vue langage 0: Test: [ 1: int pov(int a,int b) : [ 2: int foo(int a,int b) :[ 3:{ a=a+2; 4:if (a>10) continue_foo(a,b); 5:return -1; 6:} 7:int bar(int a, int b):[ 8:{ printf(«entr e coupe bar»); 9:continue_bar(a,b); 10: debug(1); 11:} 12:] 13:] 14:int bar(int a,int b) :[ 15:{int temp; 16:temp=continue_bar(a,b); 17: debug(2);return temp;} 18:] 19:]] Hookable int var_glob; Hookable int bar(int a,int b){ a=b; printf(«bar %d\n», a); return a;} Hookable int foo(int a,int b) { printf(«foo\n»); bar(a,b+1); return 1;} int pov(int a,int b) { foo(a,b); bar(2,3); return1;} void main(){ pov(1,2);}
12
Établissement des Liens Schmas simple La trhread est rerout donc dans l'aspect nous avons tout le contexte d'excution du programme
13
Excution de l'aspect Saut Retour de fonction prevent_propagation_pointcut()){ return int handle_request(char* req) { } // original function code int relay_request(struct * request) { JMP 3 ; NOP ; NOP ; NOP ; Gnr à la compilation du programme de base Gnr à la compilation de l aspect Gnr au tissage Appel de fonction Aspect.so Lgende = relay_request+5 ; // function pointer /* check wether relay_ request handle_request are on the stack */ } if (is_prefetching_request(request)) return NO_NEIGHBOR_HAS_FILE; else returncontinue_relay_request(request); } JUMP crochet int prevent_propagation(struct * request) { int prevent_propagation_pointcut() { relay_request(request) // original function code Processus hôte } save registers restore registers } else { JMP prevent_propagation JUMP relay_request+5i restore registers } Crochet if(aspect_loaded && int continue_relay_request(struct * request) Deux niveaux de D-tissage : Temporaire Permanent
14
Architecture gnrale " Temps de conception Prparation du binaire Compilation de la coupe et de l'aspect " Temps d'excution Tissage et dtissage de l'aspect " Instrumentation du code " Garder la cohrence lors de l'instrumentation de plusieurs points de jonction Activation des aspects
15
Chaîne de compilation - excution Dveloppeur du code de base Administrateur du support d excution Dveloppeur de l aspect extensions ANSI C with GNU 89 (thread en attente sur socket
) Code de base prtrait Binaire ELF x86 Linux Cache adaptable Librairie partage (.so) ELF x86 Librairie support µDyner Support d instrumentation Source C prtaite Excute Excution Prtraitement Conception et compilation Thread d instrumenta- tion µDyner Processus du cache (processus hôte) Thread du cache Advice et pointcut fonctions Source de politique de prchargement Collections d aspects en µDyner Aspects compils Compile - lie (gcc) language C annotat with hookable Source du cache: code de base Posttraitement Compile lie (gcc) Prtraitement (weave - deweave) Politique de prchargement dploye par commandes shell
16
Performance du Tisseur Environnement d'Évaluation Matriel : P4 1.6 GHz RAM: 256 Mo Logiciel : TinyProxy Gcc 3.2.1 O2 kernel linux 2.4.17 Rendre hookable toutes les fonctions et toutes les variables : ~ 3% Tissage d un aspect vide Tissage effectu en ~ 266 µs Dont chargement du code de l'aspect (temps minimal) : ~ 199 µs Interruption de l application pour l insertion d un crochet Au pire : 16.5 µs (boucle d attente d active pour l acc s aux variables) Dlai de retransmission TCP : 250 ms soit + de 14 000 crochets
17
Performance du lien Rappels : Un syst me à aspect permet d attraper un appel de mthode et d appeler la mthode attrape depuis l aspect. Un syst me rflexif permet d attraper un appel de mthode et d appeler la mthode attrape depuis le meta niveau. Dans le cas d une mthode retournant immdiatement, le ratio du temps ncessaire pour effectuer cette tâche sur le temps d un appel direct à cette mthode est un bon indicateur de performance. Code : f(){} g(){ f(); } f : continue_f(); K(); Coupe
18
Performance du lien sur l'appel de fonction Quelques ratios sur un appel vide : µDyner (AOP pour C rcriture dynamique du code) : 2.2 IguanaJ (MOP pour Java rcriture dynamique du code JIT) : 24 MetaXa (MOP pour Java utilisation d une VM modifie) : 28 Prose (AOP pour Java utilisation des API de dverminage) : 40 Guaranà (MOP pour Java utilisation d une VM modifie) : 70 Quelques ratios sur un appel dans tinyproxy : Surcoût : 1.015 Variations moyenne des mesures : ~ 20 %
19
Travaux connexes Dyninst Instrumentation dynamique d application native Base sur les API de dverminage UNIX (ptrace) donc coûteux Reloge le code instrumente Probl me si l intruction reloge est la cible d un saut Utilisation d heuristiques pour rsoudre ce probl me Kerninst Instrumentation dynamique du noyau de l OS Recriture du code Solaris dispose d un espace mmoire fixe pour l OS. Les fonctions de l OS sont rparties dans cette espace (contrainte d alignement). Kerninst utilise ces trous pour allouer des sauts jusqu à pouvoir atteindre un trou suffisamment grand pour contenir un crochet. Les fonctions de l espace utilisateur n ont pas ces contraintes d alignement. Il est rare qu il y ait des « trous » non utiliss dans le segment de code. Java Aspect Component Syst me à tissage dynamique d aspect pour Java Recrit le bytecode au chargement Pour chaque objet de base introduit une chaîne d objet d interposition L indirection introduit par la chaîne d objet permet le tissage sur n importe quel objet. Tr s coûteux : ralentit une application d un facteur 5 environ
20
Etat des travaux en cours " Principalement interess aux technologies pour l'tablissement du lien entre le code de base et l'aspect. Dfinir un sous-ensemble de crochets Instrumentation lg re et sans arret du processus " Sans passer par le dvermineur Activation base sur des mcanismes de bas niveau " (rification de la pile, des acc s aux variables et aux fonctions) " Le langage de coupe est dduit de ces mcanismes de base
21
Comp. " Orient excution (pas source) " Evenements : point dexcution avec la totalit du contexte dexcution " Coupe : enchainement de certain type devenement -> acc s variable/fonction " Plusieurs aspects sur une meme coupe sont excuts sequentielement pas de // et Seq " On peut avoir un tat par aspect (comme EAOP)
22
Conclusion " Guid par EAOP, principalement interess aux technologies pour l'tablissement du lien entre le code de base et l'aspect. " On fait le lien au niveau mod le par la trace et au niveau implmentation par rcriture de code. " Travail autour d'un langage de coupe plus volu " Supression du hookable ?
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.