• Aucun résultat trouvé

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

N/A
N/A
Protected

Academic year: 2022

Partager "I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi"

Copied!
25
0
0

Texte intégral

(1)

I-JVM: une machine virtuelle Java pour l’isolation de composants

dans OSGi

Nicolas Geoffray

1

, Gaël Thomas

1

, Gilles Muller

1

, Pierre Parrend

2

, Stéphane Frénot

3

, Bertil Folliot

1

[email protected]

1 Université Pierre et Marie Curie, INRIA/Regal

2 FZI Karlsruhe

3 INSA Lyon, INRIA/Amazones

(2)

Les composants en Java

Qu’est-ce qu’un composant?

Ensemble de code composable

Browsers web (applets), Serveurs web

(servlets), IDEs (plugins), OSGi (bundles)

Utilisation des chargeurs de classe

Chargement/déchargement dynamique

Isolation de nom

Politiques de sécurité

Couplage dynamique: communications avec appels de méthode directs

(3)

Vulnérabilités des chargeurs de classe Java

Pas d’isolation mémoire

Partage d’objets (static, String, Class)

Pas de comptage de ressources

Utilisation mémoire

Utilisation CPU

Utilisation réseau

Pas de terminaison non volontaire

Terminé lorsque non référencé

(4)

Solutions existantes

Plusieurs JVMs

Un composant par JVM

Isolation système

Communications par appels RMI

MVM (OOPSLA01, OOPSLA02)

Plusieurs applications dans une JVM

Isolation VM

Communications par Incommunicado

(5)

Solutions existantes

Plusieurs JVMs

Un composant par JVM

Isolation système

Communications par appels RMI

MVM (OOPSLA01, OOPSLA02)

Plusieurs applications dans une JVM

Isolation VM

Communications par Incommunicado

Incompatible avec les applications

existantes

(6)

Solutions existantes

Plusieurs JVMs

Un composant par JVM

Isolation système

Communications par appels RMI (90ms)

MVM (OOPSLA01, OOPSLA02)

Plusieurs applications dans une JVM

Isolation VM

Communications par Incommunicado (9ms)

(Appel direct: 20µs)

(7)

OSGi

Plateforme d’exécution de bundles Java

Gestion du cycle de vie (installation, mise-à- jour, désinstallation)

Communications avec appels de méthode directs

Domaines d’application

Automobiles, boxes internet, téléphones

mobiles, IDE (Eclipse), Serveurs web (Jonas)

(8)

Un exemple OSGi

(9)

Problèmes de sécurité OSGi

(10)

Notre contribution

Un nouveau modèle d’isolation pour

composants où la communication reste par appels directs

 Mémoire, ressources, terminaison

 Compatible avec l’existant

 Overhead léger lors des communications

(11)

Plan

1. Motivation 2. I-JVM

3. Résultats

4. Conclusions

(12)

I-JVM

Un Isolate par Bundle avec droits limités

Isolation mémoire

Comptage de ressources

Communication par appels directs

Threads “migrent” de contexte

Migration détectée à l’exécution

Isolate0 pour le runtime OSGi

Peut créer/démarrer/arrêter des Isolates

Peut “tuer” un isolate

(13)

Isolate par bundle

Isolation Mémoire (MVM [OOPSLA01])

Langage sûr avec Java

Variables globales dupliquées (static, string, Class)

Comptage de ressources

Mémoire: algorithme GC (Price [OAKLAND03])

CPU: Test sur variable locale au thread

E/S: Modifcation du JRE (JRes [OOPSLA98])

(14)

Migration de Threads

Appels Inter-Isolate

Appels directs

Même pile, changement de contexte

Objets passés par référence

Chaque thread référence son isolate courant

I-JVM insère des tests à l’entrée de chaque méthode

L’isolate courant est mis-à-jour lors des appels inter-isolate

(15)

Terminaison d’Isolate

Le runtime OSGi arrête les bundles de manière volontaire

Plus aucune dépendance

Plus de threads exécutant du code du bundle

Comment terminer des bundles non

coopératifs?

(16)

Terminaison d’Isolate

1. I-JVM interrompt tous les threads 2. Les threads inspectent leur pile

1. L’isolate interrompu est en fin de pile 2. L’isolate interrompu est dans la pile

3. L’exécution reprend

1. Retour vers l’isolate interrompu ->

StoppedIsolateException

2. Appel vers l’isolate interrompu ->

StoppedIsolateException

(17)

Implémentation d’I-JVM

Codée avec VMKit (http://vmkit.llvm.org)

Ajout de ~650 lignes de code

Isolation mémoire (~200 loc)

Tests de migration (~150 loc)

Comptage de ressources (~100 loc)

Isolate par bundle (~50 loc)

Terminaison d’Isolate (~150 loc)

(18)

Plan

1. Motivation 2. I-JVM

3. Résultats

4. Conclusions

(19)

Surcoût à l’exécution

Appel intra-bundle Appel inter-bundle Allocation d’objets

Accès variable static

0% 12.5% 25.0% 37.5% 50.0%

Surcoût relatif à VMKit

(20)

Surcoût à l’exécution

compress jess raytrace db javac mtrt jack

0% 5.0% 10.0% 15.0% 20.0%

Surcoût relatif à VMKit

(21)

Surcoût mémoire

Felix 1.2.1

Equinox 3.4.0

0% 10.0% 20.0% 30.0% 40.0%

Surcoût relatif à VMKit

Exécution de runtime OSGi avec les bundles de

base (administration, shell, service de nommage, ...)

3 bundles

22 bundles

(22)

Vulnérabilités

Classification et attaques OSGi (Parrend [SPE09])

Isolation mémoire

Modification d’une variable static

Synchronized sur une variable static

Comptage de ressources

Sur-utilisation mémoire

Sur-utilisation CPU

Création d’objets excessive

Création de threads excessive

Thread bloqué

(23)

Vulnérabilités

Classification et attaques OSGi (Parrend [SPE09])

Isolation mémoire

Modification d’une variable static

Synchronized sur une variable static

Comptage de ressources

Sur-utilisation mémoire

Sur-utilisation CPU

Création d’objets excessive

Création de threads excessive

Thread bloqué

Par défaut avec I-JVM

(24)

Vulnérabilités

Classification et attaques OSGi (Parrend [SPE09])

Isolation mémoire

Modification d’une variable static

Synchronized sur une variable static

Comptage de ressources

Sur-utilisation mémoire

Sur-utilisation CPU

Création d’objets excessive

Création de threads excessive

Thread bloqué

Par défaut avec I-JVM

Remonté à l’administrateur

(25)

Conclusions

Un nouveau modèle d’isolation

Pour plateformes orientées service

Surcoût léger

Travaux futurs: système autonome

Dans ces travaux, comptage de ressources comme aide pour l’administration

Dans travaux futurs, écriture de politiques de ressource

Références

Documents relatifs

Le code source Java est compilé non pas pour un processeur donné, mais pour une machine virtuelle (c'est-à-dire qui n'a pas d'existence physique), la JVM (Java Virtual Machine)..

– Chargeur, éditeur de liens, Initialisation de la machine – Création, affectation des champs d'instances ou de classe – Segment d'activation, méthodes statiques et virtuelles,

1 While such benchmarks are undeniably useful to the implementers of the Scala compiler, who have to decide between different code generation strategies for a given language

Dans FROGi, une application Fractal est conditionnée sous la forme d’un ou plusieurs bundles OSGi ; ce qui permet de réaliser leur livraison et leur déploiement de façon

Important : La machine virtuelle Java doit être installée sur la version RELEASE du simulateur Palm TX (simulateur non lancé).. ¾ Décompressez le fichier

3rd International Workshop on Distributed Auto-adaptive and Reconfigurable Systems, ICDCS’2003, IEEE, Providence, Rhode Island, Mai 2003.].

Utilisation des CHRs pour générer des cas de test fonctionnel pour la Machine Virtuelle Java Card.. Sandrine-Dominique Gouraud,

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des