web-dev-qa-db-fra.com

Memtest86 + teste-t-il la mémoire utilisée pour s'exécuter?

L'un des scénarios de défaillance de serveur courants est une DRAM incorrecte, parfois même lorsque la mémoire ECC est utilisée.

memtest86+ est l'un des outils les plus utiles pour diagnostiquer les problèmes de DRAM. Comme il se charge au début de la mémoire, je me demandais si memtest86+ vérifie la partie de la mémoire qui memtest86+est chargé dans.

La mémoire est-elle allouée à memtest86+ si petit que cela n'a pas d'importance, ou est-il possible que memtest86+ pourrait manquer un défaut dans la DRAM car elle ne peut pas tester les emplacements de mémoire dans lesquels elle réside?

65
Robin

De toute évidence, memtest86 + ne peut pas tester la région mémoire qui contient actuellement le code exécutable memtest86 + (mais s'il y a des erreurs de mémoire dans cette région, il est très probable que le test lui-même se bloque). Cependant, memtest86 + est capable de déplacer son propre code vers une adresse différente au moment de l'exécution, et en utilisant cette astuce, il est capable de tester toute la mémoire qu'il est autorisé à utiliser par le firmware (BIOS) - mais pas tout à la fois.

Cette relocalisation de code est décrite dans README.background à l'intérieur de l'archive de code source memtest86 + (le fichier est légèrement obsolète - par exemple, il indique que les adresses utilisées pour le code memtest86 + sont 0x2000 et 0x200000, mais la faible adresse définie dans la source est en fait 0x10000, et l'adresse haute est soit 0x2000000 soit 0x300000 selon la quantité de mémoire dans la machine).

Mais même avec cette astuce de relocalisation, memtest86 + n'est pas en mesure de tester toute la mémoire pour les raisons suivantes:

  • Habituellement, le micrologiciel (BIOS) réserve certaines régions RAM pour son propre usage (par exemple, les tables ACPI). Bien que ces régions RAM soient accessibles par le processeur, écrivant quoi que ce soit en eux peut entraîner un comportement imprévisible.

  • Une partie de RAM est utilisée pour le System Management Mode et n'est même pas accessible depuis le CPU en dehors du code SMM privilégié.

  • La plage d'adresses RAM comprise entre 640K et 1M est inaccessible en raison des particularités de la disposition de la mémoire du PC hérité (une partie de ceci RAM peut être utilisée comme une ombre pour le BIOS) ROM et pour SMM, d'autres parties peuvent être complètement inaccessibles).

78
Sergey Vlasov

Non, memtest ne peut pas tester sa propre mémoire. Cependant, il est si petit (seulement quelques Ko) qu'il importe peu. EDIT: cette affirmation est erronée car, comme indiqué dans la réponse sélectionnée, memtest peut se déplacer dynamiquement pour tester tous adressables par l'utilisateur Mémoire.

-

En théorie, un processeur moderne peut, au démarrage, configurer une partie de son cache en tant que mémoire programmable, à partir de très petits programmes (comme memtest) peuvent être exécutés sans toucher la DRAM du tout.

Cependant, c'est une fonctionnalité spécifique au modèle (qui nécessite le support du BIOS) et je ne pense pas que memtest l'utilise.

5
shodanshok