RAM memory (intern geheugen)
- Testen van het geheugen
- Windows 7 (en Vista) geheugentester
- Memtest86+
- MemTest86
- Flushen (opslaan) van (de inhoud van) het geheugen
- Technische informatie over geheugen
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:
- Met de hand terwijl Windows gewoon draait;
- Vanuit Startup Repair als Windows zelf ontdekt dat hij niet meer kan starten;
- Vanuit Startup Repair als je start vanaf de DVD.
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
:
- Je kan kiezen tussen een hele lichte test, de gemiddelde (standaard) of een zware;
- Verder kan je cache voor alle tests aan of voor alle tests uit zetten. Dat laatste heeft tot gevolg dat de PC veeeeel trager wordt, dus trek in dat geval een nachtje uit voor de tests;
- Je kan het aantal keren dat de hele cyclus doorlopen wordt veranderen (evt. in oneindig door er een 0 neer te zetten).
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. |
Reageer via E-mail (dalmolen@xs4all.nl)
Deze pagina is voor het laatst gewijzigd op: 03-02-23 17:13:14