Probabilité propagation erreur sur un PC

Probabilité propagation erreur sur un PC - C++ - Programmation

Marsh Posté le 30-07-2009 à 04:54:16    

Bonjour.
Je me posais une petite question.
 
Imaginons un programme tout simple en C++ : par exemple un algorithme pour déterminer si un nombre N est premier ou non, programme ne comprenant aucun algorithme de vérification d'erreurs. Il teste i=2 puis tous les nombres i impairs entre 3 et sqrt(N) et si N%i est égal à 0 alors N n'est pas premier (exemple d'un algorithme tout bête). Si un seul bit (pour on ne sait quelle raison) change d'état alors le résultat final peut être complètement modifié (N détecté comme non premier alors qu'il l'est).
 
Imaginons que ce programme tourne sur un PC de bureau avec de la Ram non ECC, en zone urbaine (donc avec toutes les perturbations électromagnétiques que ça engendre) et qu'il teste des grands nombres.  
 
Quelle est la probabilité que le résultat final soit faux ? Et quel composant présente le plus de risque : le processeur (une erreur de proc de ce type est-elle possible), la liaison CPU<->Ram, la carte mère, ou la RAM ?
 
Merci beaucoup  :jap:

Reply

Marsh Posté le 30-07-2009 à 04:54:16   

Reply

Marsh Posté le 30-07-2009 à 08:29:25    

Je dirais : suffisement faible pour ne pas à avoir à s'en préoccuper pour quasi toutes les applications.
Pour faire les calculs, tu dois prendre en compte toutes les défaillances possible, et calculer leur probabilité d'apparition à partir des données de fiabilité des fabriquants (il existe des listes pour des composants "standard" : résistances, relais (heu dans un PC y'en a pas beaucoup...), etc,...). Bonne chance pour un PC  :sweat:  
Tu as la possibilité aussi il me semble d'évaluer une probabilité de fonctionnement correct à partir de l'expérience (si tu fais tourner ton bazar 10 ans sans erreur, alors tu peux affirmer que t'as un p'tit 10-1/an de probabilité de défaillance...).
Pour les applications pour lesquelles cette information est importante, on cherche généralement des probabilités de défaillance non détectées très faibles, on rajoute donc du code de vérification, on fait faire le calcul deux fois sous deux formes différentes au processeur (genre une fois en utilisant des instructions sur les entiers, l'autre coup en utilisant les instructions sur les flottants, quand c'est possible). On peut faire faire le calcul deux fois à deux processeurs de conception différentes (un x86 et un PPC, par exemple).
La fiabilité va dépendre aussi de ta conception logicielle (bug = mauvaise fiabilité). Il existe des normes qui imposent des méthodologies de développement pour obtenir certaines fiabilités de fonctionnement.
 
Si on reste sur ton exemple, la probabilité d'apparition d'une défaillance de cellule mémoire RAM préalablement testée OK de PC classique doit être assez faible en environnement "normal" (= changement de valeur d'une cellule mémoire) (si t'arrives à trouver des chiffres chez les constructeurs, fais tourner).
Après, si tu tourne en environnement chaud (radiations), j'suis pas sur qu'un PC standard apprécie longtemps :o
 
Sujet interessant mais question un peu hardcore pour démarrer  :pt1cable:  
 

Reply

Marsh Posté le 30-07-2009 à 11:57:16    

considère que la probabilité que le résultat soit faux est 0. De toute façon, si ce problème devait arriver, il y a bien plus de chance que tu te retrouves à crasher directement. Imagine ce qui se passerait si jamais ton système récupère une adresse avec un bit modifié parce que tu es dans un environnement douteux. Tu arriveras bien plus rapidement à des crash qu'à des erreurs sur tes résultats uniquement.


---------------
last.fm
Reply

Marsh Posté le 30-07-2009 à 15:03:27    

Paye ton blindage TEMPEST !

Reply

Marsh Posté le 30-07-2009 à 16:52:43    

Ouaip. Enfin faut calculer. Ca va (peut-être) te protéger, dans une certaine mesure, contre des défaillances induites par certaines fréquences de parasites électro-magnétiques. Si t'es dans un environnement radiatif (neutrons :o ), ca sert à rien  :pt1cable: . Ca ne sert à rien non plus contre les défaillances induites par un vieillissement d'un composant...
 
Enfin bon si t'as posé la question parceque tu as réèllement une problématique de sureté de fonctionnement d'un calculateur, bah faut approfondir.
Si t'as posé la question seulement par curiosité, bah CF la réponse de Theshockwave :)

Reply

Marsh Posté le 30-07-2009 à 17:06:58    

Dans tous les cas, calculateur ou pas, on ne peut pas résoudre une panne physique (ici, un rayonnement quelconque violent) juste de manière logicielle
 
Edit : Bon, je m'emballe peut-être, en généralisant ca, c'est sur que si tu veux éliminer les parasites sur une webcam, tu pourras chercher à faire quelque chose, mais là, ce qui est décrit est vraiment un problème majeur.


Message édité par theshockwave le 30-07-2009 à 17:07:55

---------------
last.fm
Reply

Marsh Posté le 30-07-2009 à 19:09:31    

Y a des technos dites de "durcissage" que les militaires emplois sur des composants standards (cf les activités de Thales à ce sujet)

Reply

Marsh Posté le 31-07-2009 à 11:54:26    

d'après mes calculs, 0.0000000000000000000000000000000001% environ

Reply

Marsh Posté le 31-07-2009 à 14:52:55    

Merci à tous pour vos réponses.
 
Juste 1 question : prenons par exemple "Superpi" qui peut être utilisé pour tester la stabilité d'une machine. Prenons un ordi un peu trop overclocké : Superpi va finir par indiquer une erreur. Alors que se passe-t-il si je fais tourner le programme défini dans mon premier message sur cette machine ? Parce que pour moi il y a 2 solutions liés à cette instabilité de la machine : soit le programme va indiquer quelque chose de faux, soit l'ordi va planter ?
 
Laquelle des deux solutions va se vérifier dans ce cas ?

Reply

Marsh Posté le 01-08-2009 à 11:12:35    

Pas déterministe.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed