Hoe een correcte slechte RAM-sector op de zwarte lijst te zetten volgens de MemTest86 + -foutindicatie?

MemTest86 + (de versie meegeleverd met Ubuntu 13.04) zegt

Failing address: 002f796c48 - 759.5 MB 

Wat moet ik specificeer in de memmap kernelparameter om dit gebied te omzeilen?

Ik “heb geprobeerd memtester 770MB uit te voeren en het zegt alles is ok, dus het ziet er niet naar uit dat de indicaties van de MemTest vanaf het begin een fout in de 759,5 MB betekenen.

Hoe deze MemTest-indicatie moet worden geïnterpreteerd om memmap?

Ik heb geen geld om nu nieuwe RAM te kopen en de fout lijkt enkel te zijn, dus ik hoop dat ik deze gewoon kan negeren.

Opmerkingen

  • FWIW, de kernel zal bepaalde paginas markeren als ” gereserveerd ” als het een slecht segment detecteert maar kan herstellen. Geeft de uitvoer van ” free -m ” machten van twee weer voor de totalen? Ik noem dit als een manier om uit te leggen waarom memtester zie het slechte RAM-geheugen niet, maar memtest86 + wel.
  • Lijkt ‘ niet actueel op machten van twee: i.stack.imgur.com/l86L1.png
  • Tegen de tijd dat een fout wordt gedetecteerd (als je zelfs een ecc-ram hebt), is het over het algemeen te laat. Ook gratis -m rapporteert nooit een even vermogen van twee, aangezien de bios en de kernel allebei wat ram reserveren.
  • Ik droom ervan een ECC-laptop te kopen, maar kon nooit aanbiedingen vinden, het lijkt erop dat ze niet ‘ t bestaat.
  • Het lijkt erop dat de kernel ook printk ‘ s wanneer het een slechte pagina vindt (regel 264-265).

Answer

memmap

Er is deze tutorial getiteld: Bad Memory HowTo die het uitschakelen van geheugen via de kernel met behulp van de memmap argument voor de kernel. Volgens de howto heb je 2 opties als het gaat om memmap:

  • Zet alles uit na het slechte geheugen – (mem=###M option)
  • Schakel alleen het geheugen rond het slechte geheugen uit – (memmap=#M$###M option)

Met de eerste optie, als memtest meldt dat er slecht geheugen is op 600M, dan zou je het RAM vanaf dat punt tot het einde van het RAM kunnen uitschakelen met dit:

 mem=595M 

Als er ” s slechte RAM op 802M en 807M, kunt u een sectie van 10M RAM vanaf 800M als volgt uitschakelen:

memmap=10M$800M 

OPMERKING: Hiermee wordt de 10M na het 800M-basisadres op de zwarte lijst gezet. U moet memtest86+ achteraf uitvoeren om te bevestigen dat dit argument is correct.

BadRAM

Er is een patch beschikbaar voor Ubuntu genaamd BadRam. Het wordt hier goed behandeld in dit bericht met de titel: BadRAM op de Ubuntu-community site.

Na het toepassen van de patch op de kernel met behulp van de details van die pagina, breng je wijzigingen aan in je Grub2 setup:

fragment van die site voor Grub2

Het GRUB2-configuratiebestand in Natty heeft een regel voor het configureren van uitsluitingen voor slechte ram-kernels. Dus ik ga ervan uit dat dit de beste manier is om een gedeelte van het geheugen in kaart te brengen dat fouten vertoont. De regel die ik instelde was

GRUB_BADRAM = “0x7DDF0000,0xffffc000”

De voorgestelde manier op elke website die ik kon vinden, was om dit in te stellen door memtest86 uit te voeren en het je de BadRAM-instellingen. memtest86 gaf me een pagina met dingen die ik had moeten invoeren. Ik kon zien dat alle adressen in één 16K-blok zaten, dus ik wilde gewoon dat 16K-blok buiten werking stellen. Hier is hoe ik de juiste invoer heb gegenereerd.

De eerste parameter is eenvoudig. Dat is het basisadres van het slechte geheugen. In mijn geval kon ik zien dat alle slechte adressen groter waren dan 0x7DDDF0000 en kleiner dan 0x7DDF4000. Dus nam ik het begin van het 16K-blok als mijn startadres.

De tweede parameter is een masker. U plaatst 1s waar het adresbereik dat u wilt dezelfde waarden deelt en 0s waar het zal variëren. Dit betekent dat u uw adresbereik zo moet kiezen dat alleen de bits van lage orde variëren. Als ik naar mijn adres kijk, is het eerste deel van het masker gemakkelijk. U wilt beginnen met 0xffff. Voor de volgende knabbel zal ik het uitleggen met bitmaps. Ik wil variëren van 0000 tot 0011. Dus het masker voor badram zou 1100 zijn of een hex c. De laatste 3 hapjes moeten allemaal nullen in het masker zijn, omdat we het hele bereik in kaart willen brengen. We krijgen dus een totaal resultaat van 0xffffc000.

Nadat ik deze regel in / etc / default / grub had ingesteld, heb ik sudo update-grub uitgevoerd en opnieuw opgestart en mijn slechte geheugen werd niet langer gebruikt. Er zijn geen kernelpatches nodig om met deze methode slecht geheugen in kaart te brengen.

Follow-up # 1

Als je door de wikipedia-pagina naar memtest86 + kijkt, staat er als volgt:

fragment uit Memtest86 wikipedia-pagina

Vanaf Memtest86 2.3 en Memtest86 + 1.60, het programma kan een lijst met slechte RAM-regios uitvoeren in het formaat dat wordt verwacht door de BadRAM-patch voor de Linux-kernel; met behulp van deze informatie kan een Linux-systeem betrouwbaar een RAM-module gebruiken, zelfs als het een paar slechte bits heeft. Grub2 kan dezelfde informatie aan een niet-gepatchte kernel leveren, waardoor de BadRAM-patch niet meer nodig is.

Ook kwam ik dit Gentoo-pagina die de memmap=... specificeerde met een hexadecimaal adres, dus je zou het als volgt kunnen specificeren:

memmap=5M$0x2f796c48 

De 5M is slechts een gok, je zou het uiteraard lager of hoger kunnen instellen, afhankelijk van hoeveel RAM rond die regio je wilt / moet weglaten.

Ten slotte kunt u de grootte ook in hexadecimaal specificeren:

memmap=0x10000$0x2f796c48 

Zou 64KBs negeren vanaf adres 0x2f796c48.

Referenties

Reacties

  • ” 800M tot 804M ” zou ” 800M tot 810M moeten zijn ” I neem aan …
  • Het kan zijn, maar wat ik schreef is ook in orde, ook al is het ‘ s meer geheugen weggooien dan de 4M tussen 800M en 810M.
  • 1. Ik ken de memmap optie, maar de vraag gaat meer over hoe de memtest86 + output te interpreteren. Ik heb een specifiek voorbeeld gegeven van memtest86 + output en vraag voor hulp bij het configureren van memmap overeenkomstig in dit specifieke geval. 2. Je zou memtest86 + achteraf moeten draaien om te bevestigen dat dit argument correct is. ” – memtest86 + draait voor een OS-kernel, dus ik betwijfel ernstig de memmap Linux-kerneloptie kan hierop van invloed zijn.
  • @Ivan, 1. Ik dacht dat het duidelijk was gezien de voorbeelden die ik heb toegevoegd, maar jij ‘ zou iets moeten zeggen als: memmap=5M$759M voor jouw specifieke geval, aangezien memtest86 + niet slaagt bij 759,5 MB. 2. Ik bedoelde dat je de memmap=... optie ook aan memtest86 + zou moeten doorgeven. Dat was niet getest / niet bevestigd door mij, maar iets dat je misschien kunt doen met memtest86 +.
  • Ok, bedankt. Ik wist niet zeker wat ” 002f796c48 – 759,5 MB ” betekent (misschien kan het 759,5 meg zijn na het 002f796c48-adres of iets dergelijks ) en ik heb nooit vermoed dat ik Linux-kernelparameters aan MemTest86 + kan doorgeven (ik dacht dat het zelf niets met Linux te maken had).

Antwoord

Memtest86 + (ik gebruikte 4.20) kan rechtstreeks een badram-formaat uitvoeren.

  1. Druk op “c” om het configuratiedialoogvenster te openen memtest configuratiedialoog

  2. Dan “4” voor “Foutrapportmodus”

    memtest foutrapportmodus dialoog

  3. Dan “3” voor “BadRAM Patterns”

De uitvoer zal veranderen van een lijst van individuele testfouten naar een reeks badram = regels, die elk nog een nieuwe slechte sector bevatten. Omdat de lijnen aangrenzende segmenten toevoegen en samenvoegen, kunt u de test zonder kop s nachts uitvoeren en de laatste afgedrukte regel gebruiken (hoewel als u een erg slechte dimm heeft, zal het minder nauwkeurige “5 meg rond dit punt” -formaat waarschijnlijk een stuk korter zijn. ).

Eindresultaat:

Memtest86 + toont badram-uitvoer

Opmerkingen

  • Als ik ‘ niet met de hand hoef te kopiëren en het in plaats daarvan aan GRUB zou overhandigen zonder fouten over te typen, zou dat fantastisch zijn.
  • Wat ik deed is er een foto van maken (cameratelefoon), deze in GIMP laden, = > grayscale = > invert = > contrast / gamma en geef het vervolgens aan tesseract ${IMG} stdout .. en verifieer en corrigeer vervolgens de regel voordat deze in / etc / default wordt ingevoegd / grub … Het duurde waarschijnlijk net zo lang als het direct handmatig invoeren ^^
  • Zeker leuker dan het handmatig doen ugh

Antwoord

Zeer vuile en erg leuke work-around: voer een user space memtester uit, wacht tot het vindt een fout. Laat het bijvoorbeeld op 0xfce2ea31 staan.

Voer dan opnieuw memtester uit, maar op dat fysieke adres, dus:

memtester -p 0xfce20000 64k 128 

zeker, het is beter als je meer opoffert dan de pagina van het problematische adres.Hier hebben we 64kByte opgeofferd rond het defecte adres.

Als alles goed is gegaan, zal het de defecte geheugenlocatie veel sneller opnieuw vinden.

Onderbreek vervolgens het memtester-proces met een ctrl / z.

Gevolg: totdat het memtester-proces is opgeschort, zal het niet meer wegnemen bron, maar geen ander proces zal toegang kunnen krijgen tot het defecte geheugen . Omdat het zal worden toegewezen door de memtester.

Vooral handig op grote, externe servers. Het onderbroken proces kan blijf totdat het nieuwe RAM niet is verzonden. Of misschien tot de volgende kerst, wanneer een downtime niet zon groot probleem zal zijn.

Reacties

  • In plaats van deze truc kun je ook de tool chmem in util-linux gebruiken om de kernel te vertellen een bepaald geheugenbereik offline te halen (de gegevens ergens anders naartoe verplaatsen en de paginas dan nooit opnieuw gebruiken) .
  • @TooTea Ik heb deze tool op meerdere machines geprobeerd, maar het kon niet d eactiveer een enkel geheugenblok.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *