4 votes

Comment l'erreur de mémoire à un seul bit affectera-t-elle Linux ?

Je suis en train de reconstruire un système AMD Athlon 5000 vieux de trois ans qui a une carte mère "ASRock NF7G-FullHD" avec 4 slots mémoire, étiquetés "DDR2 800", censés avoir une capacité de RAM de 8 Go au total. En plus d'une alimentation 550W et d'un disque de 500GB, j'ai acheté une "paire assortie" d'unités d'alimentation en énergie. 2 DIMM de 2 Go chacun qui, malheureusement, présentent des erreurs persistantes sur un seul bit à plusieurs endroits (voir l'image).

Quel serait l'effet de l'exécution de Linux sur ce système avec une telle mémoire ? I.e. Quelle est la probabilité d'une instabilité, d'une erreur non détectée ou de faibles performances ? Y aura-t-il des pannes de système d'exploitation, des pannes de segmentation, des défaillances d'applications diverses, etc. Existe-t-il un moyen d'identifier ou de désactiver les mauvais morceaux de RAM ?

memtest86 picture

Notez que les 4 emplacements de mémoire sont étiquetés DDRII_1,2,3,4 ; 1&2 sont jaunes, 3&4 sont orange. L'image Memtest86 ci-dessus a été prise lorsque les emplacements ont été remplis dans l'ordre (nouveau, ancien, nouveau, ancien). Des erreurs se produisent également à des adresses similaires avec l'ordre de remplissage (old,old,new,new), avec le même taux d'accès à la mémoire (environ 2,9GB/s) que sur l'image. Rempli (old, old, -, -) ou (old, -, old, -) ou (new, -, new, -) aucune erreur ne s'est produite en quelques heures de test, mais (new, new, -, -) pour une raison quelconque n'est pas entré dans ou à travers le BIOS et le bouton de réinitialisation semble n'avoir aucun effet et il n'y a pas de signal vidéo. Avec 3 slots remplis, par exemple (nouveau1, ancien, nouveau0, -) une erreur s'est produite (située dans le premier Go de RAM) en 1,5 heure de test ; avec (old, old, new0, -), aucune erreur en 2 heures de test. Un problème de performance avec les configurations de 6 Go est le taux d'accès à la mémoire de seulement 1,7 Go/sec.

Résumé de la question : Quel serait l'effet de l'exécution de Linux sur ce système avec une mémoire sujette à des erreurs d'un seul bit ? Existe-t-il une solution autre que le remplacement de la RAM ?

9voto

Dennis Points 46916
  1. Le taux d'accès à la mémoire est plus faible avec seulement 3 puces puisque la mémoire à double canal doit toujours être installée par paires.

  2. Les erreurs d'un seul bit peuvent causer à peu près tout ce qui se passe. La probabilité que cela se produise dépend de l'état de votre mémoire, mais ce n'est pas une bonne idée de prendre ce risque. L'instabilité du système est ce que vous devez espérer. Vous pouvez également stocker un fichier critique pour le système (ou tout autre fichier important pour vous) dans cette partie de la mémoire, le modifier et écraser le fichier d'origine. Ainsi, une simple erreur de bit peut perturber l'ensemble de votre système d'exploitation.

  3. Il est probable qu'une seule des clés USB soit défectueuse (probablement la nouvelle1). La mémoire de PYG est garantie à vie, vous pouvez donc essayer d'en obtenir une qui fonctionne. J'ai entendu de très mauvaises choses sur la mémoire et le service client de PYG, mais je ne peux pas en être sûr.

5voto

Ana cleto Points 11

Comme nous l'avons dit, une erreur de mémoire d'un seul bit peut provoquer presque n'importe quel problème, ou vous pouvez ne pas la remarquer du tout.

J'avais une mauvaise clé USB auparavant et le mauvais point de la RAM signifiait effectivement que Windows pouvait parfois fonctionner, mais qu'il se corrompait assez régulièrement. Vous ne pouvez jamais prédire ce qui sera alloué à un endroit donné de la RAM d'un système (en raison de la manière dont les systèmes d'exploitation allouent la mémoire) et, même si vous avez de la chance et que la clé ne casse qu'un programme sans importance ou corrompt un graphique, il y a de fortes chances qu'elle fasse bien pire et que vous risquiez vos données en utilisant une mauvaise clé de RAM.

Linux prend en charge BadMem ce qui, si je me souviens bien, peut signifier que vous pouvez "mapper" le bloc de mémoire défectueux. Je n'ai pas pu déterminer s'il supporte le dernier noyau pour voir si cela peut vous être utile.

Mon conseil est le suivant : à court terme, préparez-vous à la perte de données et à l'instabilité générale du système, à long terme, vous devriez déterminer quelle clé est défectueuse et la remplacer.

3voto

Waxhead Points 1182

Pour être en mesure d'exécuter des programmes, un ordinateur va chercher dans la mémoire des instructions sur ce qu'il doit faire. (les programmes sont chargés en mémoire). Les instructions ne sont que des séquences de chiffres et constituent le langage de l'ordinateur.

Construisons un langage simple où 1 = copie, 3 = de, 4 = vers

1(copy),50,3(from),100,4(to),200;

Ainsi, la séquence de chiffres 1,50,3,100,4,200 peut signifier pour l'ordinateur la copie de 50 octets de données de l'emplacement mémoire 100 à l'emplacement mémoire 200. C'est comme si vous déplaciez 50 chaussettes d'un tiroir à l'autre.

Maintenant, si la mémoire fonctionne mal et qu'il y a une erreur d'un seul bit, un nombre peut par exemple passer de 1 à 129. En supposant que n'importe quel chiffre de la séquence ci-dessus puisse être modifié, on peut se retrouver avec un grand nombre d'erreurs intéressantes. Si 50 est changé en 35 ou 188 ou autre, il est assez facile de comprendre que la quantité de données à copier sera erronée et pourra éventuellement écraser d'autres données (qui pourraient être des instructions) dans la mémoire. Si 1 est changé en 5, l'ordinateur pourrait même ne pas comprendre qu'il est censé copier quoi que ce soit. Ainsi, comme nous l'avons démontré, une erreur d'un seul bit peut entraîner non seulement une erreur unique, mais aussi d'autres erreurs causées par la première erreur.

Linux (ou tout autre système d'exploitation) est fondamentalement le même que le reste des programmes qui tournent sur votre ordinateur : une séquence de chiffres qui indique à l'ordinateur ce qu'il doit faire. Si cette séquence est corrompue, vos programmes ne feront pas faire à l'ordinateur ce qu'il est censé faire et vous risquez donc de rencontrer toutes sortes de problèmes.

N'oubliez pas non plus que la musique, la vidéo ou les images ne sont qu'une suite de chiffres, et que le même principe s'applique. Il convient d'ajouter que, selon le fichier, une corruption peut ne pas être perceptible (par exemple un mauvais pixel dans une image), mais cela ne signifie pas que le fichier est correct. Il peut même y avoir une faute de frappe dans le texte que vous lisez sur une page web si ce caractère particulier est stocké dans un mauvais emplacement mémoire.

Il existe des puces bam qui sont conçues pour récupérer les erreurs d'un seul bit et qui peuvent détecter les erreurs de deux bits (bam ECC).

Nous espérons que cela explique pourquoi un système d'exploitation ne fonctionnera pas si la mémoire qui contient ses données et/ou ses instructions est corrompue. Le moyen le plus sûr de résoudre ce problème est de remplacer la mémoire vive défectueuse. Pendant ce temps, vous pourriez vouloir cartographier la zone de mémoire défectueuse en utilisant le paramètre du noyau memmap (ce qui suit est copié d'une réponse que j'ai obtenue à une autre question).

 memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000

2voto

user392465 Points 21

J'ai eu le même problème, mais j'ai trouvé que les réponses disponibles étaient confuses et incomplètes. J'ai donc élaboré un guide étape par étape, en me basant sur le moins de connaissances possible.

  1. Exécutez Memtest86+ en sortie "Badram" (de préférence à partir d'un support externe amorçable). Lorsque Memtest86+ démarre, tapez :
  2. "c" ("configuration"), puis
  3. "4" ("Error Report Mode"), puis
  4. "3" ("Bad RAM Patterns"), puis
  5. "0" ("Continuer").
  6. Copiez la sortie qui suit toute ligne commençant par "badram=".
  7. Ouvrez un terminal (ligne de commande).
  8. Passez dans le répertoire où se trouve le fichier "Grub". Par exemple, "cd /etc/default".
  9. Avec les privilèges "root", utilisez un éditeur de texte pour ouvrir le fichier "Grub" (Si vous n'êtes pas connecté en tant que "root", utilisez "sudo". Le mot de passe "root" vous sera demandé) : "sudo nano Grub" (Cet exemple change l'utilisateur en "root" et ouvre le fichier "Grub" avec l'éditeur de texte "nano").
  10. Trouvez la section décrivant le memtest.
  11. Décommentez la dernière ligne (supprimez le caractère spécial en début de ligne, tel que "#", ">" ou " !"). Cela la rend active (Par exemple, "#GRUB_BADRAM=" devient "GRUB_BADRAM=".).
  12. Remplacez les adresses d'exemple (après "GRUB_BADRAM=") par la sortie "badram=" que vous avez copiée de Memtest86+ (par exemple, "0x98f548a0,0xffffffc").
  13. Sauvegardez (ou "écrivez") vos modifications.
  14. Dans le terminal (ligne de commande) mettez à jour le fichier "Grub.cfg", en tapant "sudo update-Grub".
  15. Redémarrage.

0voto

vonbrand Points 2343

Les mémoires d'aujourd'hui (depuis au moins 10 ans) devraient toutes intégrer une fonction de correction des erreurs. Si cela échoue régulièrement, quelque chose est très et pourrait échouer de façon catastrophique à tout moment.

Voyez à remplacer la RAM défaillante dès que possible.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X