ECC校验有什么作用

  • 先看看另外几种校验算法
    • 奇偶校验(Parity Check)
    • CRC校验(Cyclic Redundancy Check)
    • MD5校验(Message-Digest Algorithm 5)
  • ECC校验(Error Correcting Code)
    • 关于ECC位宽的说明

熟悉计算机系统的同学可能都看过带ECC校验的DDR报DDR单bit error或者多bit error,有时候只是报了个单bit error的错,但是对系统整体运行没有影响,有时候报的多了,或者报了多bit error系统就可能直接挂了。那么这其中ECC到底起到了什么样的作用。

先看看另外几种校验算法

奇偶校验(Parity Check)

奇偶校验最初是为了检测内存软错误(内存里面的数据是需要定时充电刷新的,因为内存里面的存储单元会持续放电,导致bit电位产生变化,对于数据来说就是出错了,这个后面可以单独整一篇具体学习下,软错误概率参考如下,十几年前的数据了,现在应该更小),在每个字节(byte)之外额外加了一bit校验位。

对于数据来说,只有0或者1两种状态,假定1个byte数据为1 1 1 1 1 1 0 0,将每一个bit相加(1+1+1+1+1+1+0+0=6),为偶数。如果说采用的是奇校验,则该校验位定为1;如果采用的是偶校验,则该校验位定为0。

总体来说,对于奇校验(保证序列(包括校验位)1的个数为奇数),若数据中有奇数个“1”,则校验结果为0,若数据中有偶数个“1”,则校验结果为1; 对于偶校验(保证序列(包括校验位)1的个数为偶数),若数据中有偶数个“1”,则校验结果为0,若数据中有奇数个“1”,则校验结果为1。

奇偶校验只能够检测错误,无法纠正错误,并且由于其原理特性,无法检测双位错误。

CRC校验(Cyclic Redundancy Check)

循环冗余校验(CRC)具备检错和纠错的能力(其由信息码n位和校验码k位构成),其校验可以理解为一种二进制模2算法,它是一定能被生成多项式整除的,如果除不尽,那就说明传输出现了错误。CRC校验会占用较多CPU,效率不是很高,估计是运算起来比较复杂。

直接上公式说明:
(1)先假定一个多项式,用于计算校验码,设多项式为G(x)=x^2+x+1(G(x)是一个k+1位的二进制数),其二进制表示为111,共3位,其中k=2;
(2)假设要发送数据序列的二进制为10111(即f(x)),共5位;
(3)多项式的位数为3,则在要发送的数据后面加上3-1个位的0(生成f(x)*(x^k)),二进制表示为1011100,共7位;
(4)用生成多项式的二进制表示111去除乘积1011100,按模2算法求得余数序列为01(1.注意余数一定是k位的,如果位数不够,需要在高位补0;2.模2算法是不向上借位的,相当于异或);
(5)将余数添加到要发送的数据后面,得到真正要发送的数据的比特流:1011101,其中前5位为原始数据,后2位为CRC校验码;
(6)接收端在接收到带CRC校验码的数据后,如果数据在传输过程中没有出错,将一定能够被相同的生成多项式G(x)除尽,如果数据在传输中出现错误,生成多项式G(x)去除后得到的结果肯定不为0。

MD5校验(Message-Digest Algorithm 5)

MD5的实际应用是对一段 Message(字节串)产生 fingerprint(指纹),可以防止被“篡改”,一般用于文件加密或者解密,每个文件的MD5都是唯一的(还是会有小概率不唯一的情况,毕竟对一些文件稍微修改checksum不变的情况还是有的),MD5长度为32位的16进制数,换算成二进制就是32*4=128bit。

ECC校验(Error Correcting Code)

ECC 校验感觉与奇偶校验有点类似,本身也是在奇偶校验的基础上发展起来的。与奇偶校验位不同的是,奇偶校验是通过增加1位来检测1byte数据的正确性,也就是每1个byte都需要增加1位来进行检测,当数据位宽比较大的时候,需要的奇偶校验位的位数也会成倍增加;而ECC校验不一样,随着数据位宽的成倍增加,ECC校验位增加的却不是很多(其实我感觉这只是一种说法,ECC本质上也算是奇偶校验,只是校验的方式不一样而已,对于普通奇偶校验来说,我也可以2个byte来增加1位进行检测呀,毕竟程序是我自己写的嘛,不过从协议的角度上讲,那就是一种经过多方综合考虑后约定的关系了)。

ECC 校验能纠正单比特错误和检测双比特错误,但是对 1bit 以上的错误无法纠正,2bit 以上的错误不能检测。从这个角度来看,当系统报多bit错误的时候系统可能会挂掉就不奇怪了,因为纠不回来嘛,但是实际上这也是软件设置的问题,毕竟只是几个数据的错误一般也不会造成系统瘫痪,更多的是一种自我保护机制,万一是硬失效,那不就GG了。

目前服务器上使用的ECC内存指的就是这个,内存条上会有很多DDR颗粒,ECC一般是使用额外的颗粒用于存储校验位。所以ECC内存并不会比普通的内存条更快,人家只是有个检错和纠错机制,可以更稳定而已,加上算法本身的开销,其实速率并没有优势。

关于ECC位宽的说明

目前在网上找了一圈大概有两个版本:
1、当数据位宽只有1个byte的时候,需要5个bit来进行ECC校验,而后数据位宽每增加一倍,ECC只需要增加1bit的校验位,16bit需要6bit ECC,32bit需要7bit ECC,64bit需要8bit ECC。

2、将ECC校验算法分为行校验和列校验,对于512byte数据,1列(8bit)需要6bit的校验位,512行需要18bit行校验位,如下所示:

按上面换算,1byte位宽数据需要6+1=7bit的校验位(大概,如果单行不需要校验的话,那应该是6bit),2byte需要6+2=8bit校验位,4byte需要6+4=10bit校验位,8byte需要6+6=12bit校验位。

3、而实际应用上我也见过32bit数据+8bit ECC校验或者64bit数据+8bit ECC校验。

或许ECC校验只是一个大的类,不同的算法还是存在差异,各种变种啥的,就没做深入了解了,希望有大佬能够直接丢几篇文献给我学习下。

ECC校验有什么作用相关推荐

  1. NAND FLASH ECC校验原理与实现

    NAND FLASH ECC校验原理与实现 2008-01-25 14:57:27 转自:http://blog.csdn.net/nhczp/archive/2007/07/20/1700031.a ...

  2. 模拟NAND FLASH 读写BCH ECC校验

    一.模拟NAND FLASH 读写BCH ECC校验 将内核源码里的bch校验程序分离出来,从而可以手动修改原始数据和bch校验码,达到模拟出错纠正过程. 源码 bch.c.bch.h.types.h ...

  3. 晶豪(ESMT)nand flash对内存页的读取、ECC校验 F59L2G81A

    nand flash(F59L2G81A) 包含2048block,     1 block = 64 pages;    1 page = 2 KB + 64Bytes.               ...

  4. linux ecc校验原理,Nand ECC校验和纠错原理及ECC代码分析

    校验码生成算法的C语言实现 在Linux内核中ECC校验算法所在的文件为drivers/mtd/nand/nand_ecc.c,其实现有新.旧两种,在2.6.27及更早的内核中使用的程序,从2.6.2 ...

  5. NandFlash ECC校验原理与实现

    关注+星标公众号,不错过精彩内容 来源 | nhczp 编排 | strongerHuang 大家应该都在用U盘,而U盘中的存储芯片就是NandFlash,你买的64G的U盘,实际并没有64G,其中一 ...

  6. 内存 ECC 校验错误

    目的 dmesg 中发现内存 ECC 校验错误 检测出有问题的内存位置 dmesg 信息 [ 4.745351] EDAC sbridge MC0: HANDLING MCE MEMORY ERROR ...

  7. ECC校验——汉明码(Hamming Code)

    本文参考板块与链接: https://en.wikipedia.org/wiki/Hamming_code #wiki英文版 https://zh.wikipedia.org/wiki/%E6%B1% ...

  8. Struts2中指定的校验文件不起作用的原因

    转载请注意出处:http://blog.csdn.net/bettarwang/article/details/39801733 我们知道,假设要为某个Action指定校验文件.那么就要将" ...

  9. 转载:ECC内存校验算法

    ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法.如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个 ...

最新文章

  1. java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)...
  2. 【Http协议】深入理解HTTP协议
  3. ORA-03114乌龙处理
  4. java生成四则运算表达式_生成四则运算(java实现)
  5. RabbitMQ从入门到精通
  6. python 简历_用Python翻译我的简历
  7. 华为手表表盘的数字什么意思_知识 手表防水是什么意思?
  8. python可以调用windows资源吗_在Windows中使用Python设置文件夹权限
  9. Linux系统中输入输出管理
  10. 智能家居系统c语言源代码,智能家居软件设计(附源程序).doc
  11. db2查询字段备注_SQL基础7:SQLSERVER、ORACLE、DB2中SQL语句查询表字段名、注释、字段类型...
  12. 互联的情怀 凝成一股绳共同成长
  13. mysql数据库证件脱敏_mysql对身份证号码进行脱敏处理
  14. Excel一键给操作内容添加批注作者
  15. 服务器带宽打开网页很慢,网速快但是打开网页慢是怎么回事 浏览器打开网页慢的解决办法汇总...
  16. GEE基本概念(二)——3. filtermapreducer
  17. 学校计算机怎么连接自己的热点,笔记本电脑怎么连接手机热点(手机热点开启及连接方法)...
  18. Win11的两个实用技巧系列之没有声音如何解决、bat代码怎么写
  19. android电子书大全 下载
  20. 计算机操作系统执行可执行程序时,内存分配详解

热门文章

  1. 前端大屏适配几种方案
  2. 《微服务系列:SpringCloudConfig配置中心》
  3. 专访凌云光技术3D视觉业务部经理李淼:做好技术和产品,为VR行业服务
  4. Presto的学习笔记
  5. 广告位Banner设计(推广产品、游戏)
  6. Microsoft sql server 获取系统当前日期(时间)
  7. 「前端」webp图片适配流量优化
  8. ctfshow node.js专题
  9. js分享到微信朋友圈、QQ空间、QQ好友、新浪微博、腾讯微博、豆瓣、人人......
  10. [模块]EC11旋转编码器