ECC内存对系统稳定性有一定帮助,在服务器上是必要的
先说下ecc内存有没有用,绝对有用,我之前个人的工作电脑,因为没有ecc,不到一周就会因为内存故障导致死机蓝屏,当然我用的内存比较多(开机待机就40g以上),大部分人用不到那么多
一、说明
1.ECC内存作用
提升系统稳定性,特别是大内存。
比如有时候的蓝屏死机就是因为内存出错,重启后就没问题了。
服务器这种特别依赖大内存的应用场景,非常依赖ECC。即使1个月死机一次也是不能忍受的。
99.9%可靠度和99.99%可靠度差的不是0.09%,而是10倍,一个一个月出一次问题,一个10个月出一次问题。
2.作用机理
通过增加一个额外的 ECC 位,称为奇偶校验位,如果一个位出错,可以纠正。
3.稳定性
带寄存器ECC>纯ECC(不带寄存器)>DDR5片上ECC
4.ECC内存条件
cpu支持、主板支持(芯片组)、系统支持(主流操作系统都支持)。
(不是所有主板都支持ecc)
二、支持情况
下面的情况只能说大概,并不绝对,具体还要看具体CPU和主板芯片组
因为不同时代,厂家对不同系列的定位不同,还有些定制的cpu,所以不绝对
支持带寄存器的ECC通常不会支持纯ECC,反之也是
1.服务器板U通常为支持带寄存器ECC
2025年这个时间点,推荐amd霄龙,大部分场景都是超越至强的。当然10年前是反过来的。
比如至强和霄龙系列及更早的企业级系列都是支持ecc的。
另外服务器板基本全部支持最高级的ecc(带寄存器),目前还没有见到不带ecc的,主要考虑的是容量、通道数、频率,还有个别型号cpu导致的内存通道分配问题。(服务器的内存一般没人讨论时序问题,除非测试板子,应该也不会提供这种功能)
2.AMD锐龙系列(民用平台)通常支持纯ECC
锐龙系列AM4(DDR4)时代,不带核显的都支持ecc,带核显的能买到盒装的apu大部分不支持ecc,品牌机的pro版apu支持ecc。
但是绝大多数主板上纯ECC内存只能以非ECC模式运行(目前已知华擎全系列、华硕部分中高端系列、微星部分高端支持纯ECC)。
AM5(DDR5)时代,amd全线cpu支持纯ecc,但是还是华擎全系列和华硕高端主板支持,其它主板商基本都不支持,可能其它主板厂商有个别高端型号支持。
3.intel酷睿系列(民用平台)
从1代到11代酷睿都不支持,如果不是ddr5内存自带片上ecc,我觉得到20代都不支持。
12代之后,需要内存自带片上ECC,才支持。
另外12代之后上w480等工作站主板也是支持纯ecc的,但是这种主板价格极高。
4.AMD线程撕裂者和“超频”至强系列(发烧级平台)
通常至少支持纯ECC
超频至强常见的如单路e3这些,支持纯ecc的。不过性价比超低,也需要专门的主板才行,普通主板不行。
现在已经很少见到这个系列了,因为和锐龙一比完全没有任何优势。
总结一下:
服务器端都支持。
普通民用端要支持基本就是amd锐龙+华擎主板最划算,或者高端华硕板+锐龙。
高端点的就线程撕裂者。(可以超频,核心多,支持ecc,pcie通道又多,算是不差钱的优选)
ddr5的单比特片上ecc,比没有强点,但是我个人感觉用处有,但是不大,我工作的电脑,以前没有ecc,5天肯定要重启,有了片上ecc接近10天需要重启,如果换成纯ecc,会好不少。
三、linux下验证
安装软件
apt-get install dmidecode
运行以下命令
dmidecode -t memory
找到 Error Correction Type
1.普通内存显示如下:
Error Correction Type: None
2.纯ECC和带寄存器的ECC显示如下:
Error Correction Type: Multi-bit ECC
3.片上ECC显示为单bit ecc(DDR5普通内存)
Error Correction Type: Single-bit ECC
ddr5普通内存有片上ecc,只能纠错1bit的,但是比没有强。
四、windows下验证
打开Powershell
输入以下(多行带入)
Get-WmiObject Win32_PhysicalMemory |
Select-Object -Property PSComputerName, DeviceLocator, Manufacturer, PartNumber, @{label = "Size/GB" ; Expression = {$_.capacity / 1GB}}, Speed, datawidth, totalwidth, @{label = "ECC" ; Expression = {
if ( $_.totalwidth > $_.datawidth ) {
"$($_.DeviceLocator) is ECC memory type"
}
else {
"$($_.DeviceLocator) is non-ECC Memory Type"
}
}
} | Out-GridView
会弹出结果,比如我这个就是非ECC的普通内存,如果是ECC内存会显示is ECC memory type
(看上面的命令就知道了,这个命令是我看别人的,大概是调用windows的系统函数,用内存的位宽来判断,因为ECC有冗余)
五、如何识别内存条
看内存单面颗粒数
ddr4及之前主要看内存单面的布局,普通内存的单面颗粒数是双数,比如单面4颗粒,单面8颗粒,双面各8颗粒(共16颗)
纯ecc单面的颗粒为单数,比普通内存多1颗,比如单面是4+5(9颗)
带寄存器的ecc,在纯ecc基础上又多了一颗寄存器,这个寄存器和普通的颗粒不一样,这种就是带寄存器ecc。
当然这种方法不绝对,因为每种内存设计可能不一样,如果是ddr5的纯ecc,和普通内存看颗粒数是无法直接区分的,最稳妥的方法还是上机实测。另外目前ddr5纯ecc价格很高,完全可以买服务器板子搭配带寄存器ecc内存了。