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?
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.
//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
For FreeBSD (and probably most unix like platforms):
dmidecode -t 17
# 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
Total Width: 72 bits is the part you are looking for.
More information in detecting this in Linux can be found here on our sister site unix.stackexchange.com.
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.
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)
inxi can do that:
$ 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 ...
Here non ECC-RAM modules are used
On a Mac you can look in the System Information application to determine ECC status of the Computer and each RAM module.
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.