2008-10-05 15 views
3

J'ai quelques centaines d'ordinateurs exécutant une application. Sur un ordinateur, deux instances d'un seul bit ont été incorrectement définies sur certaines chaînes que je retire de SQLite. Si c'était mon ordinateur de développement je suppose que j'ai un bug quelque part, mais il y a certainement un certain nombre d'installations à quel point je vais commencer à voir des erreurs matérielles rares.Probabilité de corruption de disque ou de mémoire liée au matériel?

Cela dépend certainement de combien d'IO je fais, mais y a-t-il des règles générales pour quand il y a une chance décente de voir ce genre de choses? Par exemple, pour les paquets TCP, this paper a déterminé qu'une corruption non détectée et silencieuse se produira dans "environ 1 sur 16 à 10 milliards de paquets".

Malheureusement, l'exécution d'un vérificateur mem/disk sur la machine en question n'est pas susceptible de se produire.

Répondre

4

Quand je vois des choses étranges qui se passe, ma stratégie est:

  1. vérifier s'il y a un bug dans le code
  2. vérifier s'il y a un bogue dans la bibliothèque utilisée/outil (SQLite, ici)
  3. vérifier s'il y a un bug dans le compilateur
  4. alors, et alors seulement, vérifier les défauts matériels

Au cours de mes 10 années de carrière, 99,99% des bogues étaient liés au logiciel.

Espérons que cela aide.

+1

Vous devez également ajouter une vérification du pilote ou contrôleur IO si vous travaillez sur un système d'exploitation personnalisé. – Quibblesome

+1

Bon conseil! heureusement, les erreurs matérielles sont beaucoup plus faciles à éliminer rapidement en commutant simplement le matériel de test et en voyant si le défaut bouge. Si le matériel est assez différent et que vous échouez toujours, il y a de fortes chances que ce ne soit pas du matériel. –

+0

Le matériel, les disques et la RAM de mon expérience sont tellement défectueux. Ce n'est pas 99,99%. –

0

avec des erreurs subtiles, il peut arriver à tout moment, et à partir de plusieurs sources, même le most unlikely. Comme vous pouvez voir les erreurs se produisant sur une seule machine, votre meilleure option est de gérer les dommages au lieu de compter sur des statistiques pour vous dire quand quelque chose pourrait mal se passer. Alors que les erreurs peuvent être dues à des facteurs externes, si vous en avez vu plus d'un, il serait prudent de faire fonctionner ce memchecker sur la machine pour vérifier que ce n'est pas un matériel défectueux. L'alternative est la confiance au hasard que vous ne verrez pas un échec total.

2

Des erreurs de bits peuvent se produire. Envisagez de protéger vos données avec le CRC ou un autre type de mécanisme de détection/correction d'erreur. Les chances que cela se produise dépendent du type de matériel dont vous disposez. Si vous avez de la mémoire avec ECC, cela sera moins probable que si vous ne le faites pas par exemple, mais même la mémoire ECC va mal et peut ne pas corriger les erreurs. Avec plusieurs centaines d'ordinateurs, je dirais que l'erreur matérielle étrange va très probablement se produire tous les jours.

1

"Wikipedia: ECC memory" dit « récents tests de DRAM donnent très variables taux d'erreur avec plus de 7 ordres de grandeur de différence, allant de 10^-10 à 10^-17 erreur/bit · h, à peu près une erreur binaire, par heure, par gigaoctet de mémoire à une erreur de bit, par siècle, par gigaoctet de mémoire. [7] [11] [12] "

Même si nous utilisons l'estimation la plus optimiste d'erreur d'un bit par siècle par gigaoctet, si vous avoir un cluster de 100 ordinateurs avec 2 Go de RAM chacun, ce qui implique que vous verrez un peu d'erreur deux fois par an. (Ceci n'inclut que l'erreur de bit de RAM Vous avez mentionné une corruption non détectée de paquet TCP, et vous pourriez également considérer des échecs d'unité de disque, débranchement accidentel de cordon d'alimentation, échecs de ventilateur de refroidissement, etc.). Les estimations les plus pessimistes impliquent que vous verrez des erreurs de bits bien plus souvent - comme l'a dit Steve Baker, les erreurs sur les bits sont inévitables.

0

Passer cette machine à. Dans ma position actuelle (~ 7 ans), j'ai vu un bluescreen causé par une erreur de mémoire matérielle une fois. Si vous constatez des erreurs sur la même machine deux fois, vous avez probablement trouvé le coupable. Dans la même période de temps, j'ai vu des dizaines d'échecs de contrôleur de disque/panne de disque/corruption de registre bluescreens. Donc, ils sont rares, mais ils arrivent. Du côté du réseau, nous avions un cas où un périphérique de compression WAN d'un fournisseur tiers comprimait les paquets TCP de nos applications ensemble, de manière incorrecte, puis y mettait un bon CRC. Cela a fait des ravages pour dire le moins.

+0

Si vous voyez ce que vous pensez être des erreurs sur plusieurs machines, ne vous embêtez pas à changer d'appareil;) –