I need to replace the memory in my system and I'm not quite sure how to determine if the memory is ECC or Non-ECC. How do I determine this?
-
2Is there anyting in the handbook of your PC, Usually it is specified there. Otherwise download and install Speccy. This program tells you exactly which hardware you have in your PC, then you can check it.– Wernfried DomscheitCommented Mar 24, 2015 at 21:23
-
Look up the motherboard manual, or the system manual for your system, and see what is required for your hardware? Use the memory suggestion tools on the various RAM vendors web sites?– ZoredacheCommented Mar 24, 2015 at 21:24
-
1Related: How to tell whether RAM ECC is working? on Unix & Linux.– userCommented Mar 25, 2015 at 13:18
-
As a general answer to the question - if you're doing home computing (i.e. not building enterprise servers) you are (and should be) using non-ECC. Also helpful: forum.crucial.com/t5/Crucial-memory-for-PC-systems/…– WannabeCoderCommented Mar 25, 2015 at 13:22
-
1@MichaelKjörling Data integrity at that level is not critical in home-use applications. Parent applications (or the OS) can handle that easily, and ECC memory comes with a small performance overhead. Additionally, virtually all consumer CPUs do not support ECC memory (thus the "should").– WannabeCoderCommented Mar 25, 2015 at 15:36
6 Answers
For Windows 7 you can run the following command in command prompt:
wmic MemoryChip get DataWidth,TotalWidth
If the TotalWidth value is larger than the DataWidth value you have ECC memory.
Example output:
//ECC Memory
DataWidth TotalWidth
64 72
//Non-ECC Memory
DataWidth TotalWidth
64 64
A better way to determine is via the following command:
wmic MemPhysical get MemoryErrorCorrection
This will return a code based on the type of memory installed:
Value | Meaning |
---|---|
0 (0x0) | Reserved |
1 (0x1) | Other |
2 (0x2) | Unknown |
3 (0x3) | None |
4 (0x4) | Parity |
5 (0x5) | Single-bit ECC |
6 (0x6) | Multi-bit ECC |
7 (0x7) | CRC |
-
1@DanNeely My system (which I know has 8 strips of 4GB ECC) gives 2 values from that command: 6 and 3 on a second line of output. The other command shows 8 lines with 64 and 72 (as expected) and 1 extra line showing 2 and 2. I have never seen that before. Any idea what that means ? For the record: It is a HP XW8600 workstation (Intel 5400/6311 server motherboard.)– TonnyCommented Mar 25, 2015 at 19:47
-
-
What does code 3 (none) mean? I have no memory installed? Commented Mar 25, 2015 at 20:51
-
1@DavidGrinberg it means your memory doesn't have ECC. Outside of servers and some high end work stations very few computers use it. Commented Mar 25, 2015 at 21:15
-
@KronoS wmic memphysical get memoryerrorcorrection gives 6 and 3. (Windows 7 x64) then wmic memorychip get datawidth, totalwidth shows the 9 lines of output. 8x "64 72" and once "2 2".– TonnyCommented Mar 26, 2015 at 10:48
For FreeBSD (and probably most Unix like platforms):
dmidecode -t 17
Example output:
# dmidecode 2.12
SMBIOS 2.5 present.
Handle 0x1100, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 2048 MB
Form Factor: DIMM
Set: 1
Locator: DIMM1
Bank Locator: Not Specified
Type: DDR2
Type Detail: Synchronous
Speed: 667 MHz
Manufacturer: AD00000000000000
Serial Number: 00002062
Asset Tag: 010839
Part Number: HYMP125P72CP8-Y5
Rank: 2
The Total Width: 72 bits
is the part you are looking for.
More information in detecting this in Linux can be found on our sister site Unix & Linux Stack Exchange.
More information on how error correcting code works can be found in this simple post where I showed how you could use extra bits to detect and correct errors. This is why we have DIMMs which are 64 bits wide (8 bytes of data wide) or 72 bits wide (64 data plus extra bits to store redundant information).
19.07.2022 - Minor update now that ECC DDR5 is out. DDR5 is not 64 bit normal or 64+8 for ECC. It instead has two 32 bit channels, and more bits are needed for ECC. So expect 80 bits for ECC on DDR5.
-
4dmidecode is standard on Linux, too. I think error correction will happen by default with ECC RAM installed, but if your kernel is monitoring the memory controller to track the memory error rate, that would be another confirmation that you have ECC RAM. (check the kernel log.) Commented Mar 25, 2015 at 8:49
-
How do you check if the memory controller is tracking that? mcelog?– HennesCommented Mar 25, 2015 at 10:52
-
I don't have access to any ECC-equipped servers anymore, but I'd look for a kernel log message about it. Maybe there isn't one. There's a link to something about it on buttersideup.com (best domain name ever for a project, IMO). Commented Mar 25, 2015 at 11:14
-
1I think you should explain in your answer what to conclude about ECC if
Total Width
is72 bits
or64 bits
.– A.LCommented Mar 26, 2015 at 15:02 -
2"The Total Width: 72 bits is the part you are looking for." And what do I do after I've found it?– endolithCommented Oct 15, 2016 at 21:53
If you look at the physical memory module, ECC will usually have 9 (sometimes more) chips. Non-ECC will have only 8 (or rarely, 8x2=16).
(Image courtesy of Puget Systems)
-
7@Hennes: You can have 10, but 9 is far more common. The memory is typically split into chunks of 72-bits (8 bits read at once from each of 9 data-chips), with 64-bits of data + 8-bits of error-correction in each chunk. See here for more technical info. Commented Mar 25, 2015 at 21:38
-
2As a more general rule, if the number of memory chips are divisible by 3 then the module is ECC. Commented Mar 26, 2015 at 15:00
-
-
When you have 10 (as in my case), it is likely to mean that you have Registered DIMM with ECC. One chip for the buffering (registered) and one for the ECC is how I understand it.– AbelCommented Jan 15 at 16:45
inxi can do that:
# On this desktop PC non ECC-RAM modules are used, so it outputs `EC: None`:
$ sudo inxi -m -xxx
Memory: Array-1 capacity: 32 GB devices: 4 EC: None
Device-1: ChannelA-DIMM0 size: 4 GB speed: 1333 MHz type: DDR3 (Synchronous)
bus width: 64 bits manufacturer: Kingston part: KHX1600C9D3/4GX serial: B7ED5A53
# This server has 16 GB ECC RAM:
$ sudo inxi -m -xxx
Memory:
RAM: total: 15.49 GiB used: 592.6 MiB (3.7%)
Array-1: capacity: 32 GiB slots: 2 EC: Multi-bit ECC max-module-size: 16 GiB note: est.
Device-1: PROC 1 DIMM 1 type: no module installed
Device-2: PROC 1 DIMM 2 type: DDR4 detail: synchronous unbuffered (unregistered) size: 16 GiB
speed: spec: 2666 MT/s actual: 2667 MT/s volts: 1.2 width (bits): data: 64 total: 72
manufacturer: HPE part-no: 879527-091 serial: N/A
-
-
Just the
EC: None
. The4
is part of the previous field (devices: 4
).– user89623Commented Mar 25, 2015 at 21:25
On a Mac you can look in the System Information application to determine ECC status of the Computer and each RAM module.
/Applications/Utilities/System Information
Select Memory on the right pane, under the hardware section.
Then with the "Memory Slots" listing selected. The window below should show an ECC status.
See picture below:
Also as an FYI each RAM slot will have a Status field if there is a problem detected in a RAM module the status will be a value other than "OK"
You might also try a free app like Belarc. Gives a bunch more info about your system also...
I have used the software a few times. I have no affiliation with this software, but I do know that it is used by some universities.
I can not provided a screen shot of the results because it contains confidential data, but the web site should provide some examples. Its pretty straight forward (and fast), download the file, run it and the results are presented.
-
1Please give more detail as to how this work. For reference see this meta post Commented Mar 26, 2015 at 15:05