普通内存、ECC内存和REG ECC内存有什么不同
都知道,在INTEL平台,北桥负责与CPU的联系,并控制内存、AGP、PCI数据在北桥内部传输。基本上只要主板芯片组确定,那么其支持的内存类型也就确定了。
INTEL芯片组划分的很清楚,865PE属于工作站级别芯片组,不支持ECC内存,只能使用普通内存,875P芯片组属于低端服务器/工作站级别,支持ECC内存和普通非ECC内存,而E7525属于高端服务器,为了保证其稳定性,必须采用ECC REG内存,使用其他内存无法点亮。
在AMD方面,K8 CPU集成了内存控制器,CPU与内存直接交换数据,不通过北桥。939针的ALTHON 64系列不支持ECC,所以只能用普通内存,939针的OPTERON支持ECC内存和普通非ECC内存,940针的OPTERON系列只能使用ECC REG内存,插入普通内存无法点亮。
普通内存 ECC内存 REG ECC内存有什么不同?
普通内存大家经常接触,DDR400的内存现在遍地都是,很多高档内存甚至可以运行DDR600/DDR2 800,而有些内存也可以达到2-2-2-5这样低的延迟,因为大家接触的比较多,这里就暂不作介绍了。 反观ECC和REG ECC内存不追求高频率和低延迟,INTLE平台内存运行频率一般在DDR333或者是DDR2 400,,AMD平台内存运行频率在DDR400,延时也多在4-4-4-8左右,从性能上看丝毫不占优势,但是稳定才是其立足的根本。
图为DDR2 ECC内存。这里我们常说的ECC内存就是单指的 Unbuffer ECC,其价格和普通内存相比只贵10%-20%,从外观来说,Unbuffer ECC内存因为要满足效验纠错的需要,加入了一颗ECC效验颗粒,由于采用的是TOSP封装,使得内存看上去每面有9颗内存颗粒。
而REG ECC的价格就贵了许多,内存上面的芯片一般比普通主板多出2-3个,主要是PLL (Phase Locked Loop)和Register IC,它们的具体用处如下PLL(Phase Locked Loop) 琐相环集成电路芯片,内存条底部较小IC,比Register IC小,一般只有一个,起到调整时钟信号,保证内存条之间的信号同步的作用。
Register IC内存条底部较小的集成电路芯片(2-3片),起提高驱动能力的作用。服务器产品需要支持大容量的内存,单靠主板无法驱动如此大容量的内存,而使用带Register的内存条,通过Register IC提高驱动能力,使服务器可支持高达32GB的内存。
1 SPD芯片
2 PLL芯片
3 Register IC芯片
4 内存颗粒
因为有了PLL和 Register芯片的支持,服务器内存可以做的很大,更好的满足日益庞大的软件对内存无止境的要求。
图为日本上市的单条4GB REG ECC内存
ECC 原理以及Registers功能
服务器一般要求24小时×365天不间断运行,而且不允许中途故障频出或者频繁重启,对可靠性和稳定性两项指标要求极为苛刻。相比较而言,PC机对可靠性和稳定性的要求就相对简单了许多——系统崩溃重启即可,每天开机时间多数不超过10小时。截然不同的应用决定了二者对内存功能要求的差异性。
为什么拥有ECC技术的服务器可以做到7X24或者365X24不死机重起呢,我们要先从最原始的奇偶校验说起。
在计算机内,所有的信息都是以简单的“0”与“1”表示;不过当数据在电子元件间进行传递时,是有可能发生数据“误传”的情形,也就是说原来该是0的比特数据,却被误植为1的比特数据,而产生错误。其可能发生的原因相当多,包括电子噪声、元件硬件上的问题,或是传输接口不稳等,都可能数据错误,随之而来的时服务器重起,数据丢失,WINDOWS崩溃等一系列严重的后果,正如混沌学中的蝴蝶效益,极小的起因引发巨大的后果。也正因为如此,在存储器中便发展出ECC(Error-Correcting Code)与Parity Check等的检错方式,希望能降低数据传输的错误,使服务器能够长时间稳定工作。
比特(bit)是内存中的最小单位,也称“位”、它只有两个状态分别以1和0表示。我们将8个连续的比特叫做一个字节(byte)。非奇偶校验内存的每个字节只有8位,若它的某一位存储了错误的值,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而奇偶校验内存在每一字节(8位)外又额外增加了一位作为错误检测之用。
比如一个字节中存储了某一数值(1、0、0、1、1、1、1、0),把这每一位相加起来(1+0+0+1+1+1+1+0=5)。若其结果是奇数,校验位就定义为1,反之则为0。当CPU返回读取储存的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就作出一定的反应。但Parity有个缺点,当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,只能让数据源重新发送一次信号,再次校验。所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并能纠正部分简单的错误。
通过上面的分析我们知道Parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加Parity用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了,正是基于这样一种情况,一种新的内存技术应允而生了,这就是ECC(错误检查和纠正).
ECC(Error Checking and Correcting)内存,它也是在原来的数据位上外加位来实现的。不同的是两者增加的方法不一样,这也就导致了两者的主要功能不太一样。它与Parity不同的是如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正,数据位每增加一倍,ECC只增加一位检验位,也就是说当数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推,数据位每增加一倍,ECC位只增加一位。
总之,在内存中ECC能够容许错误,并可以将错误更正,使系统得以持续正常的操作,不致因错误而中断,且ECC具有自动更正的能力,可以将Parity无法检查出来的错误位查出并将错误修正。当然在纠错时系统的性能有着明显降低,不过这种纠错对服务器等应用而言是十分重要的。
Registers通常与ECC概念被一并提起,不少人认为二者都是纯粹的错误校验,甚至将这两个概念混淆起来。其实,Registers的概念与ECC大不相同,它指的是信号的重新驱动(re-driving)过程。
在很多时候,内存中保留的数据经过多次刷新之后仍然可能出现代表二进制数据的电平信号发生偏差的情况。Registers所起到的其实是一个事前预防的作用。拥有Registers功能的内存模组,可以通过重新驱动控制信号来改善内存的运作,提高电平信号的准确性,从而有助于保持系统长时间稳定运作。不过,由于Registers的信号重驱动需花费一个时钟周期,延迟时间有所增加,因此具有该功能内存的读写性能会稍低于普通内存,相当于以性能换取稳定性。
综合以上两点,就解释了为什么服务器所用的内存一般频率较低,延迟较高。
主板芯片组对应的内存列表
市售内存推荐
PCB幅面干净整洁,毫无凌乱之感。表面采用大量贴片电容和8PIN电阻排,颗粒装贴整齐,焊点均匀饱满,顶端“VERF”去耦电容和旁路校验电容也无省检。更重要的是,对于服务器来说,内存当然是越大越好了,UCCC 1G单条7xx元的价格,很适合在中低端服务器中使用。
英飞凌 DDR400 REG ECC
英飞凌的前身就是西门子半导体公司,德国人的严谨在其产品中也表现得淋漓尽致,此款内存英飞凌采用的是自己的内存颗粒,6层PCB基板,大量的高品质阻容元件是内存能够在高频下稳定运行的重要保障。
除此以外,采用的化学沉金工艺制作的金手指的厚度也严格按照规范制造。较厚的金层可以经受玩家的多次插拔而不易磨损,并且可以提高触点的抗氧化能力,使用寿命更长。由于渠道的原因,国内英飞凌内存并不是很普及,但是在国外很多品牌服务器中,英飞凌内存则被广泛使用,例如HP IBM等国际知名公司。
金士顿DDR2 REG ECC
DDR 2的工作频率最低是400 MHz(PC2 3200),目前市面上的大多为DDR2 533(PC2 4300),DDR 2的工作电压为1.8-1.9V,功耗比使用2.6V的DDR1降低了不少,其它优点还包括:ODT(On Die Termination)内建的终结电阻器--主要是增强内存抗干扰性,提高电气性能;OCD(Off Chip Driver):离线(Off Chip)驱动校准--提高内存驱动性能;Posted CAS--降低数据冲突,提高资源利用率,获取更大带宽。目前最新的INTEL高端芯片组只能使用此种类型的内存。金士顿在服务器内存领域也算是老品牌了,品质无需置疑,终身质保的售后让人没有后顾之忧。
普通内存、ECC内存和REG ECC内存有什么不同的更多相关文章
- 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )
[嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 ) 一. 内存 ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- JVM内存模型、指令重排、内存屏障概念解析
在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器.运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要.否则,你很难搞清楚哪 ...
- asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法
来源:http://ajxfxb.blog.163.com/blog/static/56675086201411634336878/ 作者是:没完没了的工作 asp.net报错“尝试读取或写入受保护的 ...
- c++中的内存空间不足和自定义处理内存不足
new操作符动态分配内存时,首先它会调用对象的operator new()函数分配相应大的内存(如果对象类没有重载operator new()函数,则默认调用<new>头文件里的opera ...
- apache不断占内存过大,导致虚拟机内存不足,处理方法。
我用512M的vps,访问量不大,但内存占用很大,甚至宕机. 我用top,然后shitf+m发现,httpd占用内存极大.经过网上找资料设置后,用过一段时间终于没再出现内存问题了. 首先查找配置文件的 ...
- Java当中的内存分配以及值传递问题内存解析
首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把 ...
随机推荐
- C++网络爬虫抓取图片
1.首先取一个初始网页,例如百度图片里面的网页(假设url为 http://image.baidu.com/channel/fashion ): 2.向image.baidu.com发送一个请求(GE ...
- Euclid gcd规则的证明
Euclid 规则:如果x和y都是正整数,而且x>=y,那么gcd(x,y)=gcd(x mod y, y) 假设x和y的gcd为a,那么必然有 x=a*n1 y=a*n2(gcd(n1,n2) ...
- JavaWeb核心编程之(三.5)HTTP请求和接受表单数据
HTTP简介WEB浏览器与WEB拂去其之间的一问一答的交互过程, 必须遵循一定的规则,这个规则就是HTTP协议HTTP是hypertext transfer protocol(超文本传输协议)的简写, ...
- ecshop开发日志之虚拟商品发送邮件通知
购买虚拟商品,系统会在支付后自动发送邮件到用户填写的邮件地址中,追踪过程如下首先在订单列表中可以获得到处理订单的php文件为flow.php,之后在最后一步url地址显示为http://localho ...
- Extjs Store 的用法详解
Ext.data.Store的基本用法 在使用之前,首先要创建一个Ext.data.Store的实例,如下面的代码所示. 每个store最少需要两个组件的支持,分别是proxy和reade ...
- style-11bak
<resources> <style name="FullscreenTheme" parent="android:Theme.Holo"&g ...
- MySQL----cluster安装
第一步.下载MySQL cluster: http://cdn.mysql.com/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.7-linux- ...
- 【虚拟化实战】容灾设计之四VPLEX
作者:范军 (Frank Fan) 新浪微博:@frankfan7 VPLEX等存储设备的出现,可以实现双活数据中心,最大程度的有效利用运算和存储资源. 在“容灾设计之三Stretched Clust ...
- 面向对象程序设计-C++_课时18内联函数
使用inline说明的函数称内联函数. 在C++中,除具有循环语句.switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数. #include <iostream> us ...
- bootstrap 响应式布局 居中问题
大家能够通过table来设置居中: display: table; width: auto; margin-left: auto; margin-right: auto;