KB » Computer » RAM memory (intern geheugen)

RAM memory (intern geheugen)

    Tweeten

Testen van het geheugen

Ik zou iedereen met een nieuwe PC aanraden om naast de disk(en) ook z.s.m. het geheugen te testen. Het is niet ingewikkeld, en het hoeft niet lang te duren. Toen mijn memory tester nog maar 8 minuten gelopen had, had ik al 30000 errors o.i.d. (overigens was dat pas 4 a 5 maanden nadat ik de PC gekocht had).

De reden waarom ik mijn geheugen (ik bedoel natuurlijk het geheugen van mijn PC. Van *mijn* geheugen weet ik al wel dat het slecht is) ging testen was dat ik in 1 week tijd zo'n 5 crashes (blue screens) van de PC had, en dat vond ik zelfs voor Windows wel wat veel. Bij het enigszins kijken naar die dumps zag ik ook allerlei meldingen die wezen op geheugenproblemen.

Windows 7 heeft een ingebouwde tester, maar toen ik een keer defect memory had werd dat door dit programma niet ontdekt.

Memtest86 is veeeeeel beter.


Windows 7 geheugentester

In Windows 7 zit standaard een memory tester ingebouwd. Zoals gebruikelijk is echter ook dit Microsoft produkt weer van een belabberde kwaliteit. Maar mocht je het desondanks willen gebruiken, dan zijn er 3 methodes om hem starten:

Als de memory tester gestart is kan je nog een aantal zaken configureren. Standaard voert de memory tester nl. een serie tests van gemiddelde zwaarte uit, doorloopt hij de hele serie 2 keer en staat cache bij sommige tests wel aan en bij andere niet.

Met de hand starten vanuit een draaiende Windows

Klik op Start - Uitvoeren (Run), en tik dan in: mdsched, gevolgd door Enter.

Je krijgt dan het Windows Geheugencontrole (Windows Memory Diagnostic) dialoogvenster op je scherm. Je kan kiezen of je de PC *nu* wilt herstarten en controleren op geheugenproblemen, of dat je de controle pas (automatisch) wilt laten uitvoeren als je de PC de volgende keer start. Na de herstart (nu of later) gaat het verder als volgt.

Windows ontdekt zelf dat hij niet meer kan starten

Als Windows ontdekt dat hij niet meer kan starten, kom je vroeger of later in een menu van Startup Repair met 5 opties, waaronder die van het testen van het geheugen. Als je daarvoor kiest gaat het als volgt.

Via Startup Repair vanaf de DVD

In het menu van Startup Repair heb je 5 opties, waaronder die van het testen van het geheugen. Als je daarvoor kiest wordt de PC herstart, en moet je *niet* weer booten vanaf de DVD!!! Verder gaat het als volgt.

Werking en configuratie van de memory tester

Als je eenmaal voor het testen van memory hebt gekozen, wordt de PC herstart en begint de tester automatisch. Op het scherm verschijnt de volgende tekst (zolang er nog geen problemen ontdekt zijn):

Status: Er zijn nog geen problemen gevonden. Hoewel het erop kan lijken dat de test niet meer actief is, wordt deze nog steeds uitgevoerd. Wacht totdat de tests zijn voltooid... De computer wordt automatisch opnieuw opgestart. De testresultaten worden weergegeven als u zich aanmeldt.

En in het Engels:

Status: No problems have been detected yet. Although the test may appear inactive at times, it is still running. Please wait until testing is complete... Windows will restart the computer automatically. Test results will be displayed again after you log on.

Door op F1 te drukken kan je de tester configureren, hoewel dit niet meer lijkt te werken als de test al bezig is.

Hetzelfde geldt voor de Esc-toets, om de test te onderbreken. Bij mij ging de test stug door. De (standaard)test duurt op mijn nieuwe (2016) Windows 10 laptop ongeveer een half uur.

Je hebt de volgende opties, als de PC tenminste reageert op F1:

Resultaten

Na afloop van de automatische herstart kan het een paar minuten duren voor er rechtsonder een melding verschijnt, die hopelijk luidt:

Windows geheugencontrole Er zijn geen geheugenfouten gevonden

Maar als je de melding mist kan je ook kijken in Logboeken (Event Log).

Klik in de linkerkolom op het pijltje voor Windows-logboeken (zodat je de subcategorieën ziet), en dan op Systeem.

Je zou dan in de lijst in het witte vak in het midden vrij bovenaan onder de kolom Bron (Source) 2 regels moeten zien met de waarde MemoryDiagnostic-Results. In de kolom erna, Gebeurtenis-id (Event-id), staan bij mij de waarden 1101 en 1201.

Maar het draait om wat er in het grijze vak eronder verschijnt als je op de regels klikt. Bij mij is dat (gelukkig): The Windows Memory Diagnostic tested the computer's memory and detected no errors.

Vergelijking met memtest86

Volgens memtest86 deugt het memory op mijn PC voor geen meter, maar met de standaard test vond Windows 7 geen problemen.

Vervolgens heb ik ongeveer alle andere combinaties geprobeerd, en die leverden ook niets op, behalve 1. Toen ik koos voor de zwaarste test met cache op standaard waardes, bleef de test hangen op ongeveer 10%. En ik neem aan dat ze met de melding Although the test may appear inactive at times, it is still running. Please wait until testing is complete... niet bedoelen dat je een paar dagen moet wachten :-).


Memtest86+

Introductie

Memtest86+ is een afsplitsing van Memtest86.

Downloaden

Dit programma is in ISO-formaat te downloaden. Klik op de regel Download - Pre-Compiled Bootable ISO (.zip).

In dit ZIP-bestand zit een file die je rechtstreeks op een DVD kan branden. (Overigens zijn er ook versies die je vanaf een USB stick kan starten.)

Overigens staat dit programma (en een heleboel andere memtest86-varianten) ook op de Ultimate Boot CD, een CD waarvan je de PC kunt starten en die je gratis kan downloaden.

Starten

Start vervolgens de computer vanaf de DVD, en het programma gaat vanzelf draaien. Het blijft draaien totdat je de PC herstart. Het is verstandig om het programma geruime tijd te laten lopen, omdat bij dezelfde test een error de ene keer wel en de andere keer niet op kan treden.

Je kan on-the-fly instellingen veranderen (door op c, van configuration, te drukken), maar de standaardinstellingen zullen doorgaans OK zijn.

Hoe lang moet het programma blijven draaien?

Rechtsboven in beeld staan 3 waardes, het Pass nummer, Test nummer en nog een keer het Test nummer.

Het 2e testnummer is het soort test dat uitgevoerd wordt. Wil je zeker weten dat de complete geheugentest klaar is dan moet je denk ik in elk geval wachten tot deze waarde maximaal (8?) is.

Ik denk dat elk soort test een aantal keren (100 x?) herhaald wordt, en daar slaat het 1e testnummer op.

Het getal achter Pass is het percentage van de volledige test dat doorlopen is. Op een ca. 6 jaar oude XP PC met 5 GB geheugen duurde 1 volledige pass 1 uur en 10 minuten.

Op de 4e rij staat het stuk in het geheugen dat op dat moment getest wordt.

Resultaten, of: hoe weet je of er fouten zijn?

Zolang de onderste helft van het scherm leeg blijft zit je goed. Je ziet dan ook iets boven het midden in de op 1 na laatste kolom onder Errors de waarde 0 staan.

In tegenstelling tot de Windows 7 tester vond dit programma wel 8 bitjes die niet OK waren. Een deel van de informatie die ik op het scherm zag was de volgende (maar dan horizontaal naast elkaar i.p.v. verticaal):

WallTime: 10:09:04 Cached: 16G RsvdMem: 140K MemMap: e820 Cache: on ECC: off Test: Std Pass: 4 Errors: 7661056 ECC Errs: 0c Error confidence value: 118 Lowest error address : 00189bc4044 - 6299.7 MB Highest error address : 00189bc7ffc - 6299.7 MB Bits in error mask : 000000ff Bits in error - total : 8 Min: 1 Max: 8 Avg: 0 Max contiguous errors : 1 ECC correctable errors: Errors per memory slot: 0: 1 .... 15: 0 Test Errors 0 0 1 15078 2 13227 3 1602 4 6191 5 6 32767 7 8 9 0

De test heeft ruim 10 uur gelopen. De onderste tabel geeft aan hoeveel fouten elke van de 10 soorten testen heeft opgeleverd.

De 'error confidence value' geeft aan hoe betrouwbaar de uitslagen zijn. Een waarde boven de 100 betekent dat het bijna onmogelijk is dat memtest86+ er naast zit.

Ik heb 1 a 2 weken later nog een test gedaan:

WallTime: 15:13:42 Errors: 11711232 Error confidence value: 118 Lowest error address : 00188da53f4 - 6285.6 MB Highest error address : 003f65249d8 - 16229.1 MB Bits in error mask : 000000ff Bits in error - total : 8 Min: 1 Max: 8 Avg: 2 Max Contiguous Errors : 1 ECC Correctable Errors: Errors per memory slot: 1 error in slots 0-3, 0 errors in slot 4-15

De test heeft ruim 15 uur gelopen, en opnieuw zijn er 8 bits gevonden met problemen. Alleen liggen ze deze keer in 2 totaal verschillende adresgebieden, wat er op zou duiden dat er 2 chips kapot zijn.


MemTest86

Versie 6.3.0 is hier te downloaden.

Steeds meer laptops hebben geen CD/DVD-drive meer, en daarom is het handig om ook een bootable USB-stick met dit programma te hebben. Die kan je downloaden via de link Image for creating bootable USB Drive.

Het ZIP-bestand dat je gekregen hebt moet je uitpakken, dan het bestand imageUSB.exe uitvoeren (dat blijkt ook weer een archiefbestand te zijn), en in de map die je dan krijgt moet je nog een keer imageUSB.exe uitvoeren.

PAS NU HEEL GOED OP!!!
In het bovenste vak moet je aangeven welke USB-sticks/-disks je wilt gebruiken, maar besef dat de inhoud volledig wordt overschreven. Maak dus de USB-stick die je wilt gebruiken van tevoren leeg, controleer zeer grondig de schijfletter van die stick, en zet alleen een vinkje voor die letter.

Waarschijnlijk staat de rest al goed, en kan je nu klikken op Write to UFD bij stap 4.

Werking van MemTest86

Deze pagina heeft een goede beschrijving van de werking.

Tijdens de test staat aan de rechterkant van het scherm onder elkaar Pass, Test en nog een keer Test

Pass geeft aan hoever de test als geheel is.
Test geeft aan hoever de huidige test is (er zijn in totaal 13 tests die uitgevoerd worden).
Test (2e keer) geeft aan met welk van de 13 tests het programma bezig is.

Bij test 10 zag ik op een bepaald moment een melding staan in de trant van "Sleeping for 200 seconds". Dit is een normale melding voor deze test, omdat hij een patroon in het geheugen schrijft, en dan een tijd later checkt of de enen en nullen niet omgevallen zijn.



Flushen (opslaan) van (de inhoud van) het geheugen

Wat in de geheugen-chips (RAM) zit is weg zodra ze niet meer voorzien worden van stroom.

Desondanks schrijft het I/O-system gegevens die in het geheugen zitten, en naar de disk of USB-stick toe moeten, niet per definitie onmiddellijk daar naartoe. De reden is dat de computer veel sneller kan werken dan harde schijven (om het maar helemaal niet over USB-sticks of -disks te hebben) kunnen schrijven. Als de computer daarop zou moeten wachten zou hij veel langzamer werken.

De oplossing is dat de gegevens naar die langzame apparaten pas weggeschreven worden zodra de PC even niet met iets anders bezig is. Alle gegevens die nog niet weggeschreven zijn worden bijgehouden in de zgn. 'transaction log'. Het wegschrijven zelf heet 'flushing'. Bij het afsluiten van de computer wordt alles wat nog weggeschreven moet worden ge-flushed.

De consequentie van dit ontwerp is wel dat bv. een stroomstoring tot gevolg zou kunnen hebben dat gegevens in het geheugen verloren raken, en bestanden corrupt.

En het is ook de reden waarom een USB-stick (afhankelijk van je instellingen) veilig verwijderd moet worden, via het icoontje rechtsonder in het systeemvak (system tray). Als je dat niet doet loop je een goede kans dat je in de Logboeken (Event Logs) deze error terugvindt.


Technische informatie over geheugen

Virtueel geheugenbeheer (Virtual Memory Management)

In Windows wordt geheugen toegewezen op basis van verzoeken (demand = eisen) van processen, en in blokken van de grootte van een page (4 KB, maar 8 KB op Itanium). Daarom heet deze vorm van geheugengebruik demand-paged.

Het geheugen dat toegewezen wordt is virtueel geheugen, en wordt pas fysiek geheugen op het moment dat het programma een adres in dat gebied benadert.

Een toegewezen hoeveelheid geheugen begint altijd op een 64 KB-grens. Dat betekent dus dat als je maar 4 KB (1 page) nodig hebt, er 60 KB niet meer bruikbaar is voor andere doeleinden.

I.t.t. bv. in Unix is er geen swapping. Als een proces een tijdje niets doet wordt niet al zijn geheugen naar schijf geschreven, om later evt. weer teruggeladen te worden.

Er kunnen in bepaalde omstandigheden ook large pages gebruikt worden om de adressering te versnellen. Als je een 2 MB buffer nodig hebt (voor bv. kernel en boot drivers) en die op moet bouwen uit 4 KB pages, dan heb je een heleboel entries nodig in de tabel die de relatie tussen de 2 (virtuele en fysieke adressen) bijhoudt (de Translation look-aside buffer).

Large pages zijn 4 MB op x86-processoren, en 2 MB op x64-processoren en x86 met PAE (en 16 MB op Itanium).

Er is vrijwel geen relatie tussen virtueel en fysiek geheugenbeheer, op 1 ding na: de paging file.

Een 32-bits processor kan 4 GB adresseren. Het onderste deel is voor de gebruiker (standaard de 1e 2 GB), het bovenste voor het systeem.

Als een systeem meerdere processoren heeft, heeft elke processor zijn eigen adresruimte, en op de ene processor zou bv. Excel kunnen draaien, terwijl op de andere Wordpad actief is.

Er is ook een configuratie mogelijk (heet 3GT = 3 GB Tuning) waarbij de 1e 3 GB voor de user zijn, en de bovenste 1 GB voor het systeem. De reden waarom je dat zou willen doen is dat sommige programma's (zoals SQL Server) zeer veel virtueel geheugen nodig hebben. De applicatie moet wel geschikt zijn om adressen groter dan 2 GB aan te kunnen (large address space aware).

64-bits processoren hebben tegenwoordig een limiet van 48-bits adressering, waardoor de hoeveelheid virtueel geheugen beperkt blijft tot 256 TB.

64-bits Windows ondersteunt maar 44-bits, d.w.z. 16 TB, waarvan standaard 8 TB voor de user is en 8 TB voor het systeem.

Een 32-bits proces in 64-bits Windows krijgt 4 GB, en het systeem 8 TB.

Je hebt 2 soorten geheugen wat betreft gebruik, nl. committed en reserved.

Committed memory is op 1 of andere manier in gebruik. Reserved memory is gereserveerd voor toekomstig gebruik, en kan dus niet aan andere zaken toegewezen worden. Reserved memory kan veranderen in committed memory.

Je kan het geheugen onderverdelen in private memory, shareable memory en free memory.

Private memory is min of meer eigendom van het programma. Het is reserved of committed, en kan bv. de heap bevatten. Als een programma een datastructuur of een variabele nodig heeft pakt het de ruimte van de heap.

Shareable virtual memory kan bv. shared memory zijn. 2 processen kunnen op die manier van hetzelfde adresbereik gebruik maken, en zo met elkaar communiceren. Dit soort geheugen is ook reserved of committed.

.EXE- en .DLL-bestanden kunnen ook in dit soort geheugen zitten. 2 processen zouden allebei gebruik kunnen maken van bv. Kladblok, dus waarom 2 keer geheugenruimte gebruiken voor hetzelfde programma?

De 3e soort geheugen, free, is ongedefiniëerd.

Reserved memory

Als je een datastructuur hebt die in het begin nog niet groot is, maar waarvan je weet dat ie in de loop van de tijd gaat groeien, is reserved memory ideaal.

De begingrootte is committed (al in gebruik), daarna komt een guard page, de eerstvolgende vrije page, en daarna een reserved gebied. Zodra het gebied moet worden uitgebreid wordt de guard page gebruikt. Dit hele mechanisme heet lazily committing.

Iedereen die wel eens geprogrammeerd heeft kent een mechanisme waarvoor dit perfect werkt: de stack. De stack begint standaard 1 MB groot.

Tools

Taakbeheer (Task manager)

Dit programma laat je alleen private bytes zien, maar het noemt het anders. Voor Vista heette het VM Size, sindsdien Commit Size

Process Explorer

Wat dit programma Virtual Size noemt is het totaal van reserved en committed memory, oftewel alle geheugen dat door het proces in gebruik is.

Reserved memory is niet inbegrepen in private bytes. Je kan dat mooi zien door het programma testlimit te te downloaden.

Maak dan 2 commandoregelvensters, en voer in de ene
testlimit -r 1024 -c 1 uit, en in de andere
testlimit -m 1024 -c 1

Beide alloceren ze ongeveer 1 GB virtueel geheugen, en in de kolom Virtual Size zie je in beide gevallen dezelfde waarde. Maar in de versie met de r-optie (alleen reserved memory) zie je onder Private Bytes maar een heel laag getal staan.

De meest voorkomende oorzaak van geheugenproblemen is programma's die private bytes lekken. Ze alloceren datastructuren, en geven ze niet weer vrij.

Private Bytes laat echter niet alles zien. Wat bv. niet inbegrepen is, is shareable memory dat niet geshared wordt, dus bv. een geladen DLL-bestand dat alleen door dit proces gebruikt wordt.

Fragmentatie kan ook in virtueel geheugen een rol spelen. Als je geheugenruimte een gatenkaas is, kan je alleen nog ruimte toewijzen die niet groter is dan de grootste open ruimte. Terwijl het totaal van de gaten wel veel meer kan zijn.

System committed memory

Als je Kladblok hebt geladen in RAM (dus fysiek geheugen), en er is ruimte nodig, dan kan het systeem het programma er gewoon uit gooien. Er is immers een kopie op schijf, dus als het programma weer nodig is weet het waar het het kan vinden.

Het ligt anders met als je een bestand in Kladblok hebt geladen, en dat is in RAM beland.

Als er nu ruimte nodig is is er maar 1 plek waar het bestand heen kan gaan: de page file. Dit telt mee voor de system commit limit, omdat deze gegevens niet zomaar weggegooid kunnen worden.

Als de system commit limit bereikt wordt kan er geen nieuw geheugen meer toegewezen worden, omdat het systeem niet kan garanderen dat het veilig is.

Hoe groot is de system commit limit? De grootte van RAM plus de grootte van de page file.

De commit charge is de totale hoeveelheid committed memory. Helaas heeft deze waarde in Taakbeheer verschillende namen in verschillende versies van Windows: in XP was het PF Usage, in Vista was het Page File en in Windows 7 is het Commit geworden.

Je kan die waarden zien op het tabblad (Performance), in het frame (System)

De waarde voor de slash is de commit charge, die erachter is de commit limit. In Process Explorer kan je deze zelfde waarden opvragen met Ctrl+I (voor informatie), en dan op het tabblad Memory in het frame Commit Charge

Terminologie

Term Task Manager
XP
Task Manager
Vista
Task Manager
na Vista
Process
Explorer
Opmerkingen
Private committed memory VM Size Commit Size Commit Size Private Bytes Geheugen dat alleen door 1 proces gebruikt wordt. Het kan reserved of committed zijn.
Private memory Virtual Size Geheugen dat alleen door 1 proces gebruikt wordt. Het totaal van reserved en committed memory.
Committed memory PF Usage Page File Commit Commit Charge Totale hoeveelheid committed memory.

    Tweeten

© Henk Dalmolen
Reageer via E-mail (dalmolen@xs4all.nl)

Deze pagina is voor het laatst gewijzigd op: 2-5-2016 23:19:34