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 vanmemmap
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 dememmap
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 dememmap=...
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.
-
Druk op “c” om het configuratiedialoogvenster te openen
-
Dan “4” voor “Foutrapportmodus”
-
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:
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.