Dimmunix : exit les bugs

Restez toujours informé : suivez-nous sur Google (☆)

Une nouvelle approche pour gérer les conflits entre logiciels a été développée par le Laboratoire de George Candea, à l’EPFL (Ecole Polytechnique Fédérale de Lausanne). La dernière version de Dimmunix, disponible en ligne, permet à un réseau d’ordinateurs de coopérer pour éviter les bugs.

Le nouvel outil, développé par le Laboratoire des systèmes fiables, «Dimmunix», permet de contourner les bugs survenant dans les logiciels sans intervention du programmeur ni de l’utilisateur. Cette approche, appelée «immunité d'échec», permet aux programmes de développer leur capacité à éviter les occurrences futures d’un problème. La première fois qu’un bug survient, par exemple un blocage dans le plugin d’un navigateur, ce nouvel outil pose un point de repère, «observe» ce que fait l’ordinateur et garde des traces. Lorsque le conflit apparaît à nouveau, il ressort automatiquement ce qu’il a gardé en mémoire et altère l’exécution pour que le programme continue à fonctionner.

«Dimmunix peut être comparé à un système immunitaire humain qui produit des anticorps lorsqu’il est infecté par certaines maladies. Lorsqu’il rencontre à nouveau le même pathogène, il le reconnaît, et sait comment faire pour ne pas développer la maladie», explique George Candea, directeur du DSLab. La dernière version, mise en ligne fin décembre (http://dimmunix.epfl.ch/), permet une utilisation en réseau. Basée sur le principe du “cloud computing”, tous les ordinateurs faisant partie de la communauté Dimmunix bénéficieront d’un «vaccin» produit automatiquement lorsque la première erreur apparaît dans la communauté. Cette nouvelle version de Dimmunix est capable de protéger de manière sûre les logiciels des bugs, même dans des environnements non dignes de confiance, comme Internet et le Web.

Pour l’instant destiné à un public connaissant la programmation informatique, il fonctionne pour tous les logiciels courants utilisés par des privés ou des entreprises. Compatible avec les languages Java et C/C++, il a été testé sur des systèmes réels (JBoss, MySQL, ActiveMQ, Apache, httpd, JDBC, Java JDK et Limewire).

BO
Boudin

Après avoir lu la description, Dimmunix ne "corrige" pas les bugs mais permet simplement d'éviter un type particulier de blocage : le deadlock. C'est un cas particulier de blocage d'application (ou de quelques threads d'une application) qui survient quand 2 threads s'attendent l'un l'autre. Dimmunix ne va pas vraiment altérer le fonctionnement de l'application, mais ordonner l'obtention de jeton sur mutex afin d'éviter que le blocage mutuel des 2 threads en question ne se reproduise. Le programme ne fait que demander ce jeton, il est attribué par l'OS pour les programmes en natif, la machine virtuelle pour les programmes en java.
C'est donc là que dimunix opère, il est capable de repérer un cas de lock (prise de jeton sur mutex) par un thread ayant déjà provoqué un deadlock, puis de "déméler" l'exécution en faisant patienter les autres threads sur leurs locks de sorte à ce que le plantage ne se reproduise pas.

Tout autre type de bug n'est absolument pas géré par Dimmunix (et les deadlock ne représentent absolument pas la majorité des bugs).

JO
John Clipperton

Mais c'est énorme cette technologie!!!

En plus j'adhère totalement à la philosophie "contournement de bug". Souvent bien plus facile et bien plus rapide que corriger le dit bug.

Sans troller, va vraiment falloir qu'ils installent ça dans les OS( linux et windows en tête).

C'est des technos comme ça que je veux dans mes OS...

avatar
klinfran

moi aussi à lire l'article je trouve que ça fait envie, j'ai souvent plein d'applications ouvertes, et parfois ça plante, je me demande si ce logiciel permet d'accorder des priorités à tel ou tel programme, excuse moi BOUDIN, je n'ai pas bien suivi tes explications, car un peu techniques, bienvenu au passage.

BO
Boudin

Merci :)

Pour simplifier, un programme peut se décomposer en plusieurs "threads". Un thread peut être vu comme une suite d'instruction. Chaque thread s'exécute en parallèle des autres threads. Donc le programme n'est pas une simple suite d'instructions mais plusieurs suites d'instructions qui se déroulent en parallèle.
Là où ça se complique un peu, c'est que les différents threads d'un programme peuvent avoir à opérer sur les mêmes données. Pour garder une cohérence, il faut donc pouvoir synchroniser ces threads. Prenons par exemple une suite d'opérations mathématiques basiques :
a = 5
a = a + 1
a = a * 3

Si l'on modifie l'ordre d'exécution des opérations doit être respecté pour que le résultat soit cohérent.
Dans le cadre d'un programme informatique, si un premier thread s'occupe de faire l'opération a = a + 1 puis un second thread s'occupe de faire a = a * 3, ceux-ci s'exécutant en parallèle, rien ne garantie que la multiplication se fera après l'addition.

C'est là qu'interviennent les mutex. Le rôle d'un mutex est de permettre de synchroniser les thread. Dans le cas présent, un mutex permettra au thread de multiplication d'attendre que le thread d'addition ai bien effectué le traitement, donc de garantir la cohérence du résultat.

L'un des risques, de cette méthode est qu'un thread attende une opération qui ne se termine jamais, ce qui arriverait dans l'exemple pour le thread de multiplication si le thread d'addition n'était jamais lancé (ce qui n'est pas censé arriver quand un programme est conçu à la perfection, mais ça...). On peut aussi avoir des cas plus complexes où le thread 1 attend le thread 2 qui lui-même attend le thread 3 qui lui-même attend le thread 1.

Cette situation s'appelle "deadlock".

Et c'est précisément cette situation qu'est capable d'éviter Dimmunix. Il intervient au niveau de ces mutex pour "affiner" la façon dont les threads se synchronisent en se basant sur l'analyse de situations passées dans lesquelles une situation avait aboutit à un deadlock.

Je tenais a préciser ça car la news me donnait l'impression d'un logiciel magique corrigeant les "bugs" (qui est un terme très large). Ca reste quelque-chose de très intéressant et sûrement un outil très puissant, autant pour fiabiliser un logiciel en exploitation qu'avoir des informations pour débuguer un logiciel, mais ça ne corrigera pas toutes les formes de plantage.

avatar
klinfran

ok merci, c'est très bien expliqué!

RO
Roroleblaireau

klinfran
je me demande si ce logiciel permet d'accorder des priorités à tel ou tel programme

Windows le permet déjà, et on trouve d'ailleurs le paramètre "priorité du processus" dans les options de certains programmes. (Winamp par exemple)
Mais effectivement c'est pas très répandu, et je sais pas si c'est vraiment bien géré.

BO
Boudin

Ca m'étonnerais fortement qu'il permette de modifier les priorités d'un programme, ce n'est pas un ordonnanceur. C'est le système d'exploitation qui remplit ce rôle.

avatar
QJ

Comme le décrit à juste titre "Boudin" (L-O Boudin!) cette technologie est destinée uniquement aux applications de types serveur ou calcul en parallèle. Voyez sur les forums informatiques comment de "pauvres" informaticiens peuvent s'arracher les cheveux avec des problèmes de sémaphores.

Certains vieux de vielle diraient que le mieux c'est encore d'écrire les programmes proprement et sans bugs. :vieu:
... Certes oui ! Mais il est impossible de prévoir tout les cas pouvant entrainer une condition de course générant une erreur.

C'est très intelligent d'avoir réaliser Dimmunix, mais... Cela ne vas révolutionner l'informatique de monsieur tout le monde.
Hélas! Il y a encore bien des moyens de faire "planter" un logiciel... :dead:

Note pour les curieux: sous Unix, la commande nice est veille comme le monde informatique. Et l'on parle maintenant de cpu-affinity ainsi que de gestion fine de l'ordonnanceur.

avatar
cisou9

Certains vieux de vielle diraient que le mieux c'est encore d'écrire les programmes proprement et sans bugs.

Eh oui les vieux comme moi il y a quarante ans j'ai fais pas mal de programmation et j'avais quasiment pas de bugs. :lol:

avatar
Khainyan

C'était peut être pas la même complexité aussi non?