Performances importantes – Code Natif (C) " Les donnes sont de + en + dynamique – Raliser une partie des traitement au niveau du cache">

La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

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 – O2 kernel linux •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 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 : •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 ?

23


Télécharger ppt "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."

Présentations similaires


Annonces Google