ECC和普通内存有什么不同 ecc内存和普通内存区别

在内存的使用过程中,可能因受到硬错误或软错误的影响而导致数据出错,对于普通消费者来说这可能问题不大,但对于企业和数据中心的服务器来说,数据出错将对服务器性能产生很大影响 。而为了防止这种错误,一般服务器用的都是 ECC 内存 。那么,问题来了,什么是 ECC 内存,它和普通内存又有什么不同呢?

ECC和普通内存有什么不同 ecc内存和普通内存区别

文章插图
内存错误
ECC 内存,即 Error-Correcting Code Memory,其中 ECC 是一种检测并纠正单位内存错误的方法 。这里,我们又注意到一个问题,内存怎么会犯错呢?
内存错误是存储在内存中的值发生更改的问题 。我们知道,内存中的数据以二进制形式存储,值为 1 或 0 。如果 1 的值切换成 0,或 0 切换成 1,我们就说内存发生了「位翻转」,而存储在内存中的数据将会发生变化 。
举个简单的例子,数字 135 表示为二进制字符串 010000111,如果其中一个值发生翻转,则会呈现以下情况:
010000111=135
110000111=391
011000111=199
010100111=167
000000111=7
根据计算机对这些数据的处理方式,内存的位翻转可能与性能上的小问题一样无害 。但另一方面,它们可能是灾难性的,甚至导致整个计算机系统崩溃或执行错误操作 。一根 8GB 内存条平均每小时使用会出现 5 个此类错误,对于普通计算机用户来说,影响是难以察觉的,但对于任务密集型服务器来说,这些错误的出现将导致严重后果 。
位翻转有许多潜在的原因,最常见的是背景辐射,主要是由宇宙射线产生的中子引起的 。宇宙射线是一种高能粒子,通常是质子,以接近光速传播 。当宇宙射线撞击原子时,会产生大量中子和其他亚原子粒子,然后这些中子会继续发生二次相互作用,而这些次级中子相互作用被认为是内存位翻转错误的主要原因 。
纠错原理
那么,ECC 内存是如何防止这样的错误呢?ECC 内存检测错误的方法是奇偶校验,主要是通过在字节末尾加 0 或 1 来检测一个字节是偶数还是奇数 。例如,如果奇偶校验将字节添加到奇数位 7,则奇偶校验为 1,偶数将为 8 。如果奇偶校验字节为 0,结果为奇数,则该字节处于损坏状态 。
ECC和普通内存有什么不同 ecc内存和普通内存区别

文章插图
当然,ECC 存储器的奇偶校验位并不总是 8 位字节,也可以通过二进制循环纠错码生成 7 位代码/64 位字节 。这里的意思是,系统每次读取 64 位数据时,都会生成一个 7 位代码 。检测的目的是判断代码是否匹配 。如果不匹配意味着它有错误,ECC 内存将立即纠正错误 。
ECC 内存与普通内存的区别
ECC 内存在外观上与普通内存最大的区别是会在 PCB 板上额外再添加一个芯片来专门负责检查错误并纠正错误 。
【ECC和普通内存有什么不同 ecc内存和普通内存区别】
ECC和普通内存有什么不同 ecc内存和普通内存区别

文章插图
不过,ECC 内存带来的不仅是优点,也有一些缺点 。与普通内存相比,ECC 内存由于额外的内存芯片及其复杂性而更昂贵 。更重要的是,在读取速度方面,ECC 内存比普通内存要慢 2%左右,因为检查内存数据错误需要额外的时间 。
当将 ECC 内存应用到服务器时,它会监控内存数据并及时纠正错误 。首先,这在一定程度上减少了崩溃的次数,尤其是在无法承受内存数据损坏的设备中,例如科学和金融行业的计算应用程序或服务器 。其次,它的数据纠错可以保持数据的完整性,增强系统的稳定性 。在数据中心,ECC 内存比普通内存更可靠 。
另外,需要知道的是,大多数消费级 PC 硬件并不支持 ECC 内存,比如英特尔和 AMD 的消费级和发烧级 CPU 均不支持 ECC,只有服务器 CPU 支持 。
ECC 内存和非 ECC 内存之间没有绝对的判断标准来说哪个更好,需要具体到使用场景中 。如果是金融或医疗行业或其他关键数据相关行业,则必须考虑在数据中心服务器中配置 ECC 内存 。而如果只是普通的 PC 用户,或者不打算将设备用于重大项目,则可以选择普通内存 。