ECC的全称是 Error Checking and Correction or Error correction Coding,是一种用于差错检测和修正的算法。NAND闪存在生产和使用中都会产生坏块,BBM就是坏块的管理机制,而要有效管理坏块的首要前提就是有可靠的坏块检测手段。如果操作时序和电路稳定性不存在问题,NAND闪存出错的时候一般不会造成整个Block或Page不能读取甚至全部出错,而是整个Page中只有一个或几个bit出错,这时候 ECC就能发挥作用了。不同颗粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理论上来说ECC能力也是够用就行。

当前SSD内最普遍使用的ECC码是BCH码。当数据写入的时候,内部的ECC模块计算数据并生成ECC签名,一般来说这个步骤非常快,因此并不会影响整个SSD太多的性能表现。ECC的签名一般来说都保存在NAND页后部的SA区域,当数据从NAND读取的时候ECC模块回去读取 ECC签名,并对照相同与否来发现出现的错误。

相比发现错误,修复接收到的数据错误更复杂。第一步是检测收到的数据是否出错,这个和上面生成ECC签名的操作一样非常快。如果检测到接收到的数据包含错误比特,就需要去生成独特的ECC算法(比如BCH),这部分会造成性能损失,但是只有在检测到错误时候才做。用生成的ECC算法来修复之前检测到的错误。

必须强调的是,ECC解码过程是可能出现失败的,所以ECC系统架构必须合理的设计才能保证ECC不出错,而ECC能够修复的错误比特数取决于ECC算法设计。

如果ECC纠不过来, 一般会报ECC Fail, 用户表现为Read Fail,有时候ECC甚至诊测不到出错, 就会导致数据错误。

NAND的稳定性需要有多方面保障,ECC只能用来保证部分比特出错时的修复,如果整个页甚至块出现大面积错误,那么只有RAID这类的保护才能修复了。

在企业级产品中对ECC甚至还有更苛刻的要求,那就是数据完整性检查,SSD内部所有的总线, 先进先出数据器部分都要查,可以数据在进入NAND之前的错误。

       上图是个4KB页的NAND闪存。(SA区128字节)
       1、每当一个page写入NAND闪存,数据会通过ECC引擎,创造独特的ECC签名。
       2、数据和对应的ECC签名存都存放在NAND闪存里,数据放在数据区,ECC签名放在SA区。
       3、当需要读取数据时,数据和ECC签名一起被送往主控制器,此时新的ECC签名被生成。
       4、此时主控把2个签名对照,如果签名相同,说明数据没有错误,数据就会被送往。如果签名不同,数据就会先放在主控里,而不是直接送往主机。

某些主控会把改正后的数据再次写回闪存,另一些则不会,因为谁也不知道下次读取会不会再出错。

ECC的能力也影响到NAND的寿命和数据保存期。当NAND闪存的标称P/E数到了之后,错误数会越来越多,ECC弱的直接就报坏块并标记退休,如果ECC能力足够强,能挖掘出Flash更多潜力,只是效果比较有限。

最新文章

  1. [.NET] 利用 async & await 进行异步 IO 操作
  2. [转]iOS代码块Block
  3. spring mybatis memcached
  4. python 之readability与BeautifulSoup
  5. 关于WebDAV带来的网站潜在安全问题的疑问
  6. Asp.Net MVC如何返回401响应码
  7. ios图片拉伸两种方法
  8. extjs 简单入门
  9. HDU 1995
  10. Android MVP框架模式
  11. Delphi获取系统服务描述信息
  12. [Windows Phone] 在 Windows Phone 8 控制闪光灯
  13. API接口签名验证2
  14. .net core 中间件管道底层剖析
  15. jquery中Get方法请求接口
  16. UIWebView使用app内自定义字体
  17. Ubuntu16.04 安装 MySQL
  18. CentOS6.8环境下搭建yum网络仓库
  19. Spring Cloud Zuul 快速入门
  20. PHP-从零开始使用Solr搜索引擎服务(下)

热门文章

  1. 【LOJ】#2115. 「HNOI2015」落忆枫音
  2. Codeforces 145E Lucky Queries 线段树
  3. Git公钥/私钥生成方式
  4. InnoDB的锁机制浅析(一)—基本概念/兼容矩阵
  5. 微信小程序之下拉刷新,上拉加载更多
  6. Git的一些常用命令
  7. BZOJ.1576.[Usaco2009 Jan]安全路经Travel(树形DP 并查集)
  8. BZOJ.4516.[SDOI2016]生成魔咒(后缀数组 RMQ)
  9. MikroTik RouterOS虚拟机/实体机安装方法
  10. VS2015 打包winform 安装程序