Aller au menu - Aller au contenu

Dimmunix traque les bugs de nos ordinateurs

Revenir à la liste des news
Participer à la discussion

Image

Informations

Contributeur(s) : Lukas
Publié : le 08/02/2010 à 22:11:31
Catégorie : Programmation
Visualisations : 17 005

Licence : Creative Commons BY SA

Dimmunix traque les bugs de nos ordinateurs

Quels que soient les logiciels utilisés, tout le monde a un jour ou l'autre été confronté à un bug informatique. Du freeze d'un programme aux pertes de données, les bugs sont un fléau que tout bon développeur se doit d'éradiquer pour contenter les utilisateurs. Développé par l'EPFL, Dimmunix est un projet qui entend révolutionner cette approche, en permettant à l'ordinateur d'éviter lui-même les bugs.

Dans sa dernière version, gratuitement téléchargeable, il se base sur le principe du cloud computing pour permettre de protéger une ferme de serveurs entière, en partageant les informations entre ceux-ci.

Le principe de Dimmunix


Le concept est inspiré de notre système immunitaire humain. Lors d'une infection, notre corps produit en effet des anticorps, qui seront alors capables de reconnaître à nouveau le facteur infectieux lors d'une future attaque. George Candea, directeur du projet, présente Dimmunix comme une application de ce principe aux programmes informatiques : lorsqu'un logiciel plante à cause d'un bug particulier, celui-ci est sauvegardé, et Dimmunix tente de l'éviter par la suite.

En fait, Dimmunix ne permet pour le moment d'éviter que certains bugs, appelés deadlocks ou interblocage en français. Ces interblocages peuvent survenir en programmation concurrente, quand un même logiciel utilise plusieurs processus, en parallèle, c'est à dire quand certaines instructions sont exécutées simultanément (ou que l'on considère qu'elles le sont). Pour que ceci soit possible, on met en place des verrous sur les ressources système, de manière à ce qu'il n'y ait pas de conflits lorsque les processus demandent simultanément l'accès à ces ressources. Cependant il peut arriver qu'un processus bloque une ressource A et demande une ressource B, pendant qu'un autre processus bloque la ressource B et demande la ressource A.


interblocage


Évidement dans ce cas les deux processus se retrouvent bloqués indéfiniment, et le programme également : c'est à ce niveau que doit agir Dimmunix. Pour cela, un processus est chargé de surveiller l'exécution du programme. Lorsque celui-ci détecte un interblocage, il renseigne le Resource Allocation Graph, qui garde un historique des obtentions et relâchements de verrous avant l'interblocage, pour créer ensuite ce que l'on appelle la signature. Cette signature permettra à Dimmunix de prévenir l'interblocage dans le futur si la même situation est détectée. Si ce programme est surtout fait pour les serveurs, il est cependant tout à fait utilisable par un utilisateur quelconque et pour n'importe quelle application (Dimmunix a par exemple été testé sur Limewire).

Le RAG, ou Ressource Allocation Graph



Le RAG est un graphe (une sorte de schéma) qui résume l'ensemble des interactions entre les processus et les verrous. Il est construit pour représenter les différents évènements qui se déroulent pendant que le logiciel étudié tourne : le premier correspond à la demande d'accès à un verrou par un processus ; le deuxième au fait que Dimmunix autorise ce processus à faire une pause en attendant d'obtenir un accès ; un autre indique que le processus obtient effectivement l'accès. Le dernier type d'évènement possible correspond au fait qu'un processus cède sa place à un autre. Ce graphe permet à Dimmunix de détecter des structures cycliques, qui sont le signe d'un interblocage.

À partir de la détection de ce cycle, le programme est arrêté, mais il faut que Dimmunix enregistre une signature de manière à empêcher cet interblocage de survenir de nouveau. Cette signature est en fait constituée des numéros de toutes les évènements représentés sur le graphe, indiquant soit l'accès à un verrou par un processus, soit l'arrêt d'un processus en faveur d'un autre. Elle est stockée dans un fichier, et c'est elle qui va permettre à Dimmunix d'empêcher l'interblocage par la suite.

Empêcher les bugs de survenir à nouveau



Une fois la signature enregistrée, il faut faire en sorte d'éviter que le bug survienne de nouveau. Pour cela, toutes les requêtes d'accès aux verrous sont interceptées par Dimmunix, qui va ensuite indiquer au processus si celui-ci peut se bloquer en attendant la ressource, ou s'il doit laisser la main à un collègue (donc cesser de tourner jusqu'à ce que ce collègue libère la ressource). Pour cela, il consulte son historique, et cherche si le fait d'attendre la ressource peut amener le programme dans une situation d'interblocage. S'il trouve une signature qui correspond à la situation courante, il ordonne alors au processus qui fait la requête de laisser la main à un autre processus de manière à libérer la ressource.

D'un serveur à toute une ferme



La dernière version de Dimmunix généralise ce principe à un ensemble de serveurs : chaque machine faisant tourner un logiciel surveillé par Dimmunix est en quelque sorte capable de communiquer avec les autres pour partager les rapports d'erreurs, ainsi que les solutions. Ainsi, si un interblocage est détecté sur un serveur, tous les autres seront protégés, comme un vaccin que l'on injecterait à toute une population.

Un test concret



On peut écrire un petit programme en C pour tester le fonctionnement de Dimmunix :

Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>

pthread_mutex_t mutex1;
pthread_mutex_t mutex2;

void f1() {
        pthread_mutex_lock(&mutex1);
        sleep(1);
        pthread_mutex_lock(&mutex2);
        pthread_mutex_unlock(&mutex2);
        pthread_mutex_unlock(&mutex1);
        printf("thread 1 done\n");
}

void g1() {
        pthread_mutex_lock(&mutex2);
        sleep(1);
        pthread_mutex_lock(&mutex1);
        pthread_mutex_unlock(&mutex1);
        pthread_mutex_unlock(&mutex2);
        printf("thread 2 done\n");
}

void* f(void* args) {
        f1();
}

void* g(void* args) {
        g1();
}

int main() {

        pthread_mutex_init(&mutex1, 0);
        pthread_mutex_init(&mutex2, 0);

        pthread_t t1;
        pthread_t t2;

        pthread_create(&t1, NULL, f, 
NULL);
        pthread_create(&t2, NULL, g, 
NULL);

        pthread_join(t1, NULL);
        pthread_join(t2, NULL);
}


Ce code reproduit en effet la situation énoncée en début de news et aboutit à un interblocage. Lançons le programme, compilé sous le nom de "test", sans oublier de précharger Dimmunix :
$ LD_PRELOAD=../src/libdimmunix.so ./test
Et l'on obtient :
deadlock found and saved to dlock.history
Complété
Cela signifie que le programme a effectivement buggé, et que Dimmunix l'a détecté. Le fichier dlock.history doit contenir le nécessaire pour éviter que l'interblocage ne se reproduise. On teste donc une seconde fois :
$ LD_PRELOAD=../src/libdimmunix.so ./test
Et l'on obtient cette fois :
thread 1 done
thread 2 done
Le programme a donc correctement fonctionné, et ce sans qu'il soit nécessaire de le modifier ou même de le recompiler. Tout est fait de manière automatique par Dimmunix, qui s'occupe d'ordonnancer l'attribution des verrous de manière à éviter l'interblocage détecté précédemment.

Un projet prometteur


Dimmunix est une petite révolution dans le monde des bugs informatiques. Cependant il ne faut pas perdre de vue que le programme peut aussi détecter de faux positifs (c'est à dire croire à un interblocage alors qu'il n'y en a pas). Ceci n'est pas très grave en soi, et ne porte pas atteinte à l'exécution générale du programme, mais peut causer des ralentissements inutiles. Bien sûr, la meilleure solution pour éviter ce genre de bugs est de s'en préoccuper lors de la conception du programme : même si les interblocages sont parfois difficiles à éviter, on trouve généralement une solution.

Dimmunix permet cependant de pallier le problème temporairement, en attendant que les développeurs du logiciel buggé corrigent leur code. Il permet également dans ce cas-là de faire remonter aux développeurs l'historique enregistré, pour les aider à comprendre la situation. Le fait que le projet soit désormais jugé utilisable pour des vrais serveurs est très prometteur, puisqu'il a déjà été testé avec succès sur des projets variés comme MySQL, Apache, Limewire ou ActiveMQ.

Liens



49 Participations

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1  2  Suivante
Pseudo Discussion
1 visiteur sur cette news (0 membre et 1 Anonyme)
Page 1  2  Suivante
Hors ligne z-scientifique # Posté le 08/02/2010 à 22:14:26 Commentaire supprimé pour le motif suivant : Pas de "preums"..
Hors ligne christophetd # Posté le 08/02/2010 à 22:17:31
Regardez-moi !
Avatar
Flux RSS

Ville : Gap
Pays : France métropolitaine

Bien rédigé, mais je ne considère pas vraiment ça comme une news : ce n'est pas une actualité mais plus un projet.
Sinon le système est très prometteur, en effet. :)
 
Hors ligne Lukas # Posté le 08/02/2010 à 22:19:55
Groupe : Anciens

Ville : Mont-dol
Pays : France métropolitaine

christophetd: En quoi un projet ne peut-il pas être une actualité ? généralement c'est bien des projets que naissent les actualités, je me trompe ?
Hors ligne ricanare # Posté le 08/02/2010 à 22:20:32
apple OWNS !!!
Avatar

Merci pour la news !! Tres interessant !

--- Ricanare ---
 
Hors ligne Smil # Posté le 08/02/2010 à 22:21:02
Avatar

Ville : Paris
Pays : France métropolitaine
Études : EPITA

Wah, c'est vraiment du délire o_O C'est dingue de se dire que l'informatique peut progresser au point d'empêcher elle-même ses dysfonctionnements... Chapeau :)
Hors ligne anonyme # Posté le 08/02/2010 à 22:24:07

Très intéressant tout ça ! Mais heu, ça cause des ralentissement significatifs ou pas ? Parce qu'il s'agit tout de même de surveiller ce que font les programmes et ensuite d'intervenir dessus, donc de bouffer des cycles pour voir ce qu'il se passe sur les programmes.
Hors ligne SdT # Posté le 08/02/2010 à 22:25:32
www.brightmarks.fr
Avatar

Merci pour la news, bonne information ! ;)

BrightMarks v2 : Système de report de résultats scolaires.
 
Hors ligne razira59 # Posté le 08/02/2010 à 22:26:16
Don't give it to me.
Avatar

Bonne news, ca à de l'avenir, cool vraiment, on apprend des choses :)

EDIT: Par contre ca aurait été mieux d'expliquer un peu plus le code :D

Image utilisateur
Image utilisateur
Image utilisateur



 
Connecté CTR*Seb # Posté le 08/02/2010 à 22:29:01
CreativiCloud
Avatar

Ville : Saint pierre de varennes
Pays : France métropolitaine

Wahou, ca à l'air compliqué quand même ...

Image utilisateur
 
Hors ligne Android # Posté le 08/02/2010 à 22:30:15
Qui a dit Android ?
Avatar
Groupe : Bannis

À merci Lukas pour cette news! mais il était pas nécessaire de rajouter du langage c, je me trompe non !

Image utilisateur
Image utilisateur
 
Hors ligne Graphox # Posté le 08/02/2010 à 22:30:58
Avatar
Groupe : Anciens

Citation : razira59
EDIT: Par contre ca aurait été mieux d'expliquer un peu plus le code :D

Le code correspond au schéma du début de news ;)
 
Hors ligne berdes1 # Posté le 08/02/2010 à 22:37:27
Avatar
Flux RSS

Ville : Bon encontre
Pays : France métropolitaine

Ça a l'aire vraiment intéressant, espérons que ce genre de chose pour se généraliser à d'autres bugs et que ça devienne un truc courant comme les anti-virus.
La deuxième solution serait que les développeurs ne fassent pas d'erreur :p

Image utilisateur Image utilisateur
 
Hors ligne Juju33_78 # Posté le 08/02/2010 à 22:48:09
Le net en France... Blackout
Avatar
Flux RSS

Ville : Verneuil sur seine
Pays : France métropolitaine
Études : Lycée Janson de Sailly - Paris 16ème

Ça aurait été bien de parler des ressources qu'utilise ce programme.
Parce que vu comme ça j'ai l'impression que ça bouffe énormément de ressources si ça contrôle chaque action d'un programme avant de l'autoriser ou non à effectuer cette action.

Réduisez vos liens sur http://short.fr.nf
Thème Lightwood pour Neko CMS disponible.
Réducteur d'url simple et léger disponible au téléchargement.
 
Hors ligne Melvin's # Posté le 08/02/2010 à 22:49:44
Avatar

Ville : Coligny
Pays : France métropolitaine

C'est vraiment intéressant comme sujet, et le sujet est bien expliqué.

Tu dis que
Citation : news
le le programme peut aussi croire à un interblocage alors qu'il n'y en a pas. Ceci n'est pas très grave en soi, et ne porte pas atteinte à l'exécution générale du programme, mais peut causer des ralentissements inutiles.

Puisque Dimmunix réfléchit à la tâche à donner dans ce cas là et choisit parmi toutes celle qui, en pondérant chaque tâche par sa probabilité de bon déroulement (si j'ai bien saisi), a le plus de chance de bien se passer, n'existe-t-il pas alors une possibilité pour qu'un faux interblocage entraîne la demande d'une autre tâche que celle désirée, car mieux probabilisée ?

usandthem.fr - Photos de voyage, chroniques en tous genres. Votre blog, et le notre aussi.
tour du Monde de Thibault Cuminet
 
Hors ligne Keaulaim # Posté le 08/02/2010 à 22:50:38

Ville : St genis laval
Pays : France métropolitaine

Je me pose la même question que schtroumfette. Est-il réellement rentables niveau ressources processeur, de vérifier a chaque fois ce que font les processus. Les serveurs ont besoin d'être rapides et c'est pour cela qu'ils utilisent des processus concourants. Alors a quoi ca sert concrètement sur les serveurs de production. Sinon il est vrai que cela pourra être très pratique en deboguage. Surtout lorsqu'il sera capable de réparer le code de lui même.
Hors ligne Ksass`Peuk # Posté le 08/02/2010 à 22:53:55
Comment ça pas de doc ? O.o
Avatar

Ville : La gaudaine
Pays : France métropolitaine
Études : Université d'Orléans

Assez impressionant
Cependant si la banque des bugs répertoriés et le nombre de programmes lancés devient important ça doit pouvoir engendrer des pertes de vitesse pour la machine je pense (enfin c'est qu'une idée). Par contre c'est une sacré bonne idée pour les systèmes qui nécessitent une fiabilité élevée (et plus importante que sa vitesse).

En tout cas très bonne news ^^ .

Image utilisateur
Un problème ? RTFM : [C++] - [STL] - [Qt] - [Boost]
Image utilisateur
Un problème ? RTFM : [Man Online] - [Howto : man]
Tout devrait toujours être aussi simple que possible. Mais pas plus.
 
Hors ligne Zhela # Posté le 08/02/2010 à 23:04:36
Avatar

Ville : Court-st-etienne
Pays : Belgique
Études : Université catholique de Louvain

Etonnant que personne n'y ait songé avant...
 
Hors ligne Tchouk! # Posté le 08/02/2010 à 23:11:46
Avatar
Groupe : Bannis
Flux RSS

Citation : Schtroumpfette
Très intéressant tout ça ! Mais heu, ça cause des ralentissement significatifs ou pas ? Parce qu'il s'agit tout de même de surveiller ce que font les programmes et ensuite d'intervenir dessus, donc de bouffer des cycles pour voir ce qu'il se passe sur les programmes.


C'est exact. Le site web de dimmunix en parle, d'ailleurs :

Citation
Dimmunix proved effective in avoiding reported deadlock bugs, while introducing only modest performance overhead (negligible for a few tens of threads, and up to 4.5% on a lock-intensive microbenchmark with 1,024 threads).

NeXTSTEP, l'ancêtre de Mac OS X — en 1993.
Image utilisateur
Si vous avez des couilles et que vous aimez
la programmation sans chichis, venez sur PM !
 
Hors ligne Craw # Posté le 08/02/2010 à 23:12:38
Rien n'est parfait !
Avatar
Modérateurs

Citation : Ksass`Peuk
Assez impressionant
Cependant si la banque des bugs répertoriés et le nombre de programmes lancés devient important ça doit pouvoir engendrer des pertes de vitesse pour la machine je pense (enfin c'est qu'une idée). Par contre c'est une sacré bonne idée pour les systèmes qui nécessitent une fiabilité élevée (et plus importante que sa vitesse).

En tout cas très bonne news ^^ .


Je pense que les bugs rencontrés sont assez souvent les mêmes et qu'au final on tourne en rond.
Mais comme tu le dis avec plusieurs programmes différents on peut arriver à une saturation, enfin je ne sais pas.
Il fallait quand même y penser de reproduire l'immunité du corps humain en informatique, après l'I.A issue de la conscience humaine on a maintenant l'immunité.
Sinon belle news qui m'a appris quelque chose ce soir. ;)
Connecté thorgrin # Posté le 08/02/2010 à 23:42:50
voir signature !!
Avatar

oui une bonne new et un logiciel qui peu se révéler utile dans bien des cas.
Je vais même le tester rapidement.

Le troll est interdit, merci d'en prendre conscience à l'avenir.
 
Hors ligne anonyme # Posté le 08/02/2010 à 23:57:18

Disons simplement que ça n'était pas nécessaire, et puis surtout ça m'étonnerais que ça arrange grand chose.
Hors ligne congelli501 # Posté le 09/02/2010 à 00:20:25
Avatar

Ville : La férté-milon
Pays : France métropolitaine
Études : UTC

Super news, et très détaillée !
J'ai beaucoup aimé l'exemple concret (le programme en C) mais je pense qu'il aurait fallu ajouter quelques commentaires dans le code : tout le monde ne comprend pas le C.

En tout cas, le programme est intéressant, même s'il n'est utilisable que pour des bugs précis.

Le troll est interdit, merci d'en prendre conscience à l'avenir.

Mes programmes open sources !

On dit que la Grèce antique beaucoup d'influence sur notre culture... C'est vrai : la chute d'Athènes a eu lieu en 404 avant JC. Ça vous rappelle quelque chose ?
 
Hors ligne Lukas # Posté le 09/02/2010 à 06:37:51
Groupe : Anciens

Ville : Mont-dol
Pays : France métropolitaine

Alors pour répondre, le logiciel n'est pas utilisable pour windows, sauf peut être pour le langage Java (ça reste à voir).

Pour les pertes de performances la citation de Tchouk! apporte une réponse. Les pertes de performances sont *minimales*, il s'agit en effet simplement de constater l'acquisition ou le relâchement des locks, et de "modérer" l'ordonnancement des processus. Il est indiqué en effet un temps d'exécution augmenté de 4,5% lors de la gestion de 1024 thread, ce qui est la conséquence d'une augmentation de la complexité des vérifications à effectuer, les interdépendances étant extrêmement nombreuses.
Hors ligne Feitan # Posté le 09/02/2010 à 08:10:49
Avatar

Ville : Brazey en plaine
Pays : France métropolitaine

Il vaut mieux, je pense utiliser plus de ressources et empécher les bugs que l’ inverse
Hors ligne Benjil@n05 # Posté le 09/02/2010 à 08:26:43
Avatar

Ville : Strasbourg
Pays : France métropolitaine

Très intéressant :) !

Image utilisateur
 
Hors ligne hiveNzin0 # Posté le 09/02/2010 à 08:27:05
Tu mens !
Avatar

Je pense que le code aurait du être relu avant d'être affiché car là... grosse blague l0l. :)

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
Some are born to lame, others have to learn... it's a hard way to become a good lamer. Don't be afraid to assume your lame attitude !
 
Hors ligne MrKooky # Posté le 09/02/2010 à 09:07:19
10h
Avatar
Flux RSS

Ville : Paris
Pays : France métropolitaine
Études : Paris 6 - Université Pierre et Marie Curie (Jussieu)

C'est une très bonne nouvelle pour le monde informatique, surtout pour les utilisateurs qui ne savent pas programmer ;)
Je pense cependant, que ca pourrait nuire aux développeurs, non ?

Au passage: Merci Lukas, ta première news est franchement réussie !
 
Hors ligne JC Second # Posté le 09/02/2010 à 09:30:13
Avatar

Très intéressant. Et qui démontre l'intérêt d'une recherche de pointe : une école comme l'EPFL apporte régulièrement d'importantes contributions technologiques dans différents domaines.

Image utilisateur
 
Hors ligne anonyme # Posté le 09/02/2010 à 09:49:29

Hey, c'est cool, libre et ça à l'air bien fait :p
Nickel :p
Hors ligne Kurapix # Posté le 09/02/2010 à 10:18:44
Avatar

Ca a l'air intéressant comme projet mais on ne peut pas dépendre entièrement d'un projet tel que celui-ci (on ne résout pas le bug à la racine).
Quelle sont les effets secondaires autre que la perte de performance?

Image utilisateur
Rejet de la loi HADOPI

;) La puissance n'est rien sans maîtrise.
-----------------------------------------------------------------------
[GCC] Re-arrangement de la pile
[Bash] Script d'installation de C::B a partir des sources.
[ASM][ARM][GBA] Procédure hline : tracé d'une ligne horizontale
srand(), rand() ... gné?

-----------------------------------------------------------------------

To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
 
Pour accéder à cette section
Connectez-vous !
connexion_rpx

Revenir à la liste des news