42

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?

  • 2
    Is 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 Domscheit Mar 24 '15 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? – Zoredache Mar 24 '15 at 21:24
  • Related: How to tell whether RAM ECC is working? on Unix & Linux. – a CVn Mar 25 '15 at 13:18
  • 2
    @WannabeCoder "you should be using non-ECC"[citation needed][insufficient explanation] – a CVn Mar 25 '15 at 14:08
  • 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"). – WannabeCoder Mar 25 '15 at 15:36
56

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
  • I get memoryphysical - Alias not found. on windows 7 Enterprise SP 1 – user114447 Mar 25 '15 at 2:35
  • 3
    @kristianp The 2nd command had two typos in it, should've been: wmic memphysical get memoryerrorcorrection (worked for me in 8.1) – Dan Neely Mar 25 '15 at 5:33
  • @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.) – Tonny Mar 25 '15 at 19:47
  • @Tonny which command are you using? – James Mertz Mar 25 '15 at 20:04
  • What does code 3 (none) mean? I have no memory installed? – David Grinberg Mar 25 '15 at 20:51
39

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 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).

  • 3
    dmidecode 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.) – Peter Cordes Mar 25 '15 at 8:49
  • How do you check if the memory controller is tracking that? mcelog? – Hennes Mar 25 '15 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). – Peter Cordes Mar 25 '15 at 11:14
  • 1
    I think you should explain in your answer what to conclude about ECC if Total Width is 72 bits or 64 bits. – A.L Mar 26 '15 at 15:02
  • 1
    "The Total Width: 72 bits is the part you are looking for." And what do I do after I've found it? – endolith Oct 15 '16 at 21:53
17

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).

ECC vs non-ECC (Image courtesy of Puget Systems)

  • 9 chips for the 10 bits per byte on the ECC module? – Hennes Mar 25 '15 at 20:50
  • 5
    @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. – BlueRaja - Danny Pflughoeft Mar 25 '15 at 21:38
  • 1
    As a more general rule, if the number of memory chips are divisible by 3 then the module is ECC. – James Mertz Mar 26 '15 at 15:00
  • When copying any content (including images) you must provide attribution. – Mokubai Apr 2 '15 at 6:51
  • 1
    @endolith since the sites inception, and as per the help centre: How to reference material written by others. – Mokubai Oct 15 '16 at 22:02
8

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:

System Information App window

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"

  • Does "Disabled" mean the ram is non ECC ? it's not quite clear from your answer – mounaim Nov 14 '16 at 16:27
  • That's correct a status of "Enabled" would means that he RAM is ECC. – MrDaniel Nov 24 '16 at 19:28
6

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 EC: None

  • Is the 4 EC: None the value I should be looking for? – James Mertz Mar 25 '15 at 19:29
  • Just the EC: None. The 4 is part of the previous field (devices: 4). – duskwuff Mar 25 '15 at 21:25
0

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.

protected by James Mertz Mar 26 '15 at 15:01

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.