C'est en fait une mauvaise idée. La mémoire ne peut pas être testée de manière fiable dans un balayage rapide. C'est pourquoi un logiciel comme memtest86 utilise plusieurs passes avec différents modèles de bits pour tester la mémoire. Solution :
-
Testez la mémoire avec memtest86, de préférence un test long, laissez-le fonctionner pendant la nuit, cela prendra beaucoup de temps.
-
Si une mauvaise mémoire est détectée, utilisez
memmap
paramètre du noyau pour forcer le noyau à ne pas utiliser cette mémoire :
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
De plus, vous pouvez utiliser la mémoire ECC qui corrigera les erreurs 1 bit et détectera automatiquement les erreurs 2 bits dans votre mémoire (et vous recevrez des messages de journal du noyau sur les problèmes de mémoire non corrigibles s'ils se produisent)
Le message et la réponse comprennent mal le problème. Le nettoyage de la mémoire est destiné à empêcher les erreurs corrigibles sur un seul bit de se transformer en erreurs doubles non corrigibles. Le nettoyeur se contente de toute la mémoire physique (forçant les caches manquants à le faire) occasionnellement. S'il y a des erreurs sur un seul bit, elles seront corrigées (et la correction doit réécrire la valeur correcte à l'aide d'une comparaison et d'un échange), effaçant ainsi l'erreur.
Sinon, si une deuxième erreur se produit dans un mot qui en contient déjà une, le mot entier sera incorrigible et le système d'exploitation devra faire quelque chose de drastique.
Le nettoyage est important car sans lui, la mémoire qui est lue mais non écrite (comme les pages de code) peut accumuler des erreurs au fil du temps.
La réponse est oui, et cela se fait de manière transparente (à condition que vous ayez de la mémoire ECC pour détecter les erreurs, et que votre version du noyau soit au moins 2.6.30 pour continuer à fonctionner en toute sécurité).
Fondamentalement, votre mémoire est vérifiée à chaque lecture du processeur et nettoyée périodiquement*, pour vérifier la cohérence avec les codes de correction d'erreurs (ECC). Si une erreur se produit, vous obtenez une exception de vérification de la machine, qui est ensuite enregistrée et récupérée par mcelog (http://www.mcelog.org/).
Si votre erreur était corrigible, elle incrémente un compteur "leaky bucket", ce qui fait qu'un module DIMM physique qui échoue trop souvent est remplacé de manière transparente par un autre. Ainsi, votre page mémoire est copiée vers un nouvel emplacement, votre adresse de mémoire virtuelle est mise à jour pour pointer vers la nouvelle page, et l'ancienne page est marquée par le système d'exploitation comme ne devant plus être utilisée.
C'est ce qu'on appelle le "soft-offlining" sous Linux (et le retrait de la page mémoire sous Solaris, je ne sais pas pour les autres systèmes d'exploitation).
Si votre erreur n'a pas pu être corrigée, il se produit ce qu'on appelle un "hard-offlining", c'est-à-dire que votre page mémoire est supprimée de la gestion normale de la mémoire du système d'exploitation et que votre application est tuée (NB :par un signal SIGBUS captable qui vous indique où l'erreur s'est produite, mais il est assez rare de ne pas s'en soucier et d'essayer de l'attraper). Si votre page mémoire est mappée à partir d'un fichier et nettoyée, le système d'exploitation peut également la recharger de manière transparente à un autre emplacement physique au lieu de tuer le processus.
Vous pouvez en savoir plus sur mcelog, il existe de nombreuses options de configuration, vous pouvez obtenir d'autres comportements à déclencher, des options et d'autres pistes sur ce qu'il faut lire et comment vous assurer que mcelog est en cours d'exécution sur votre système.
* Scrubbing, ou "Patrol Scrubbing" consiste à lire la mémoire, à la comparer à l'ECC pour les erreurs et à l'écraser avec les mots mémoire corrigés lorsqu'une erreur est découverte. Le terme nettoyage de patrouille est utilisé par opposition à l'écrasement des données incorrectes sur les erreurs de lecture de la mémoire, qui est parfois appelé « nettoyage à la demande ». Le nettoyage est une procédure matérielle qui peut être activée, généralement via le BIOS.