这意味着区块可以同时处理不同的命令,整个系统可以处理并行多指令。
上图表现出一个多个读命令连续执行的例子,管道中的命令处理采用SATA NCQ技术,连续并行的处理命令。
一级ECC采用的是东芝独创的QSBC(Quadruple Swing-By Code),翻译过来四联摆动ECC,其本质可以理解成多层ECC。多层ECC的好处就是保护机制健全,纠错能力强,破了一层还有一层,缺点就是延迟随着层数的提升而不断增大。
二级ECC采用的Hamming ecc,
ECC就是“Error Correcting Code”的简写,数据检测与误差修正编码,因为闪存中会有出错的可能,如果没有使用ECC模块,读出的数据和写入的数据会有不匹配的可能,也许一个文件中只有一两个bit不匹配,这也是不能容忍的。相对来说SLC中出错概率比较低,所以使用一个纠错能力不强的Hanming码就可以了,在MLC中Hanming码就显得力不从心了,需要纠错能力更强的BCH码了。
NAND闪存的ECC比较多见的:Hamming汉明码,BCH码,LDPC(低密度奇偶校验)等。
1、Hamming汉明码是经常使用在早代SLC闪存。汉明码的计算通过软件实现简单,占用资源比BCH小,但是效果也比BCH弱。
2、BCH码具有嵌段长度和误差的灵活性校正能力。和功率消耗小相对于纠错能力。BCH擅长处理随机错误,由于NAND Flash自身的特点,出现随机错误的概率更大一些,所以在MLC中目前应用最多的还是BCH方式。
3、LDPC码的纠错能力是非常高的。但对于功耗和处理问题所需的时间要求很高。
▲
为了解决这个权衡,东芝开发自己的错误检测和校正技术QSBC™(Quadruple Swing-By Code)。这种所谓的专利技术,我觉得有夸大的成分在里面,号称达到LDPC码的8倍,加上是个保护专利,东芝还是宣传效果的多,具体代码谈的少。
大家知道即使是校验错误,如奇偶校验或者CRC校验都需要在原始信息数据的基础上增加一些额外的数据。能够纠正错误的ECC需要额外的数据空间保存纠错码生成的校验数据。所以在NAND Flash中Page的1K数据并不是1024Byte,大多数是1024+32Byte, 有的是更多的额外空间;额外空间越多意味着可以使用纠错能力越强的ECC,因为对于同一ECC算法纠错能力越强需要的额外空间越大。
为了提高数据存储在闪存中的可靠性,TC358790XBG主控提供1级和2级的ECC纠错功能,当检测到错误时,数据首先通过闪存控制器提供的一级ECC(QSBC)。如果错误无法被一级ECC校正,数据会下传到闪存控制器外部二级ECC(Hamming ECC)。
DRAM的环节我们放在后面会详细讲到。
除了字节的区块代码保护之外,CRC奇偶校验位用于识别错误,通过使用这种方法,可以提高可靠性的实现,由于ECC的存在可以使得在DRAM的使用率大大降低,所以东芝干脆把DRAM拿掉,同时二级ECC也被以字节为单位加入到主控的SRAM中,所以错误的发生能被发现和纠正。
前面我们讲到了:一级ECC采用的是东芝独创的QSBC(Quadruple Swing-By Code),其本质可以理解成多层ECC。多层ECC的好处就是保护机制健全,纠错能力强,破了一层还有一层,缺点就是延迟随着层数的提升而不断增大。
这里说到颗粒的纠错,不得不说一下颗粒厂如何定义颗粒的PE问题。
▲东芝对该A19NM颗粒最低的硬性要求是40bit/1KB BCH ECC,因为只有在保证这个级别ECC或者更高级别ECC的情况下,东芝才敢去定义颗粒的PE。
▲我们前面说过了,ECC需要额外的数据空间保存ECC生成的校验数据,
TH58TEG8DDKBA8C其实属于TH58TEG8DDK系列颗粒,page=17664Bytes=16K+1280Byte 东芝对这个颗粒的标称使用page size是16KB,我们减去后得到1.25KB=1280Bytes的spare size冗余空间。
block=(4M+320K)Bytes=4416KB
page=17664Bytes=17.25KB
block/page=256
每个block包含256 page。
▲另外呢,每个panel会额外提供42个block出来另为他用。
其实我们也可以简单计算出来:
panel=4820434944Bytes=4707456KB
blcok=(4M+320K)Bytes=4416KB
panel/block=1066
1066-1024=42
实际计算的结果确实如此。
命题1:我们假设东芝不用QSBC这种高级的多层ECC,只采用40bit/1KB的BCH ECC,颗粒能不能冗余掉这么大的ECC代码呢?
设最大纠错能力为t
如果选用512B就是4096bit的原始数据长度,则模式为BCH(8191,8191-13×t,t,13)校验数据长度就是13×t
如果选用1KB就是8192bit的原始数据长度,则模式为BCH(16383,16383-14×t,t,14)校验数据长度就是14×t
24Bit/1024Byte ECC, 此时需要14x24bit=336bit=42Byte
40Bit/1024Byte ECC, 此时需要14x40bit=560bit=70Byte
16K+1280Byte 的A19 MLC TH58TEG8DDKBA8C颗粒使用40Bit/1024Byte ECC,需要70Byte x 16= 1120Byte,差不多快塞满page里冗余的1280Byte的SPARE SIZE了。
以假设TH58TEG8DDKBA8C颗粒使用40bit/1KByte BCH方式的ECC为例,控制器写数据到NAND Flash时,每1024Byte数据经过BCH模块就会生成70Byte的校验数据(当然剩下的80-70=10Byte也可以作为某种用途的数据,可以任意使用0-10Byte而不会改变ECC的使用),这些数据一起写入到NAND Flash中。控制器从NAND Flash中读取数据的时候需要将原始数据和校验数据一起读出经过BCH模块,BCH模块计算伴随矩阵首先可以判断出是否出现了错误,如果出现了错误需要计算错误位置多项式,然后解多项式,得到错误位置(目前主要使用Chien-search方法),因为是位错误,找到错误的位置以后取反以后就是正确的数据。只要是错误个数小于等于40,BCH都能够找到错误的位置,但是如果错误个数超过了40,对于BCH来说已经没有办法纠正错误了,只能报告出现了不可以纠正的情况。
但是有些主控不支持40Bit/1024Byte ECC,只有24bits/1024Byte,所以东芝就给出来两种ECC情况下的寿命数据:
24bits/1KB ECC 纠错时可以有1000 PE次数,40bits/1KB ECC纠错时可以有3000 PE次数,在PE次数到时数据保存期为1年以上。
根据上面两点,我们可以这样理解:1、24bits ECC纠错时,PE 次数到1000次时,数据存放1年后,1KB数据出错的比特数小于24
2、40bits ECC纠错时,PE 次数到3000次时,数据存放1年后,1KB数据出错的比特数小于40
3、24bits ECC纠错时,PE 次数大于1000次时,没法 保证数据存放1年后,1KB数据出错的比特数小于24
4、40bits ECC纠错时,PE 次数大于3000次时,没法 保证数据存放1年后,1KB数据出错的比特数小于40
当然全世界可能只有颗粒厂如此解释颗粒的PE寿命了,这其实是将部分责任转嫁给主控方了。
命题1结论:该颗粒仅仅page的spare size就可以完全容纳40bit/1KB BCH ECC了,这就是颗粒厂商宣传的3000PE基本盘了,何况我们还有42个额外提供的Block,可以放下更高级的多层ECC-QSBC,所以理论应该高于3000PE的,关于PE个人观点完全是没有问题的。
综上所述,闪存端的ECC依靠一级ECC(QSBC)保护提升了纠错机制并且大大提升了颗粒的理论PE值,那么闪存控制器到SATA接口这一段的数据怎么保证呢,这就要说到二级ECC( Hamming ECC)。
举个例子:我们用的ECC内存,就是采用Hamming ECC,那么在这块SSD内,主控有自己的SRAM,并且使用Hamming ECC对其进行保护。SRAM出错率低,而且出错也最多1bit,所以汉明码简单快速。暴力有效。
那么还有数据的传输途径呢:,端到端的错误检测CRC16(E3D)码的加入,导致在数据传输点发生的错误能被检测到,所以错误的数据是不会被输出到外部的。这里我们要明白这个端到端是SATA接口到闪存控制器之间,如果主机到SATA接口之间发生错误怎么办,除非你有ECC内存,否则凉拌。
E3D是什么?E3D就是CRC16的校验代码被加到读写数据途径中,最终和数据一起被存储,一起被读取,这样的好处有效保证数据的完整性,如果不完整就会报错。报错了怎么办,这里提供Hamming ECC 纠错,Hamming ECC 是被设定在SATA接口和闪存之间的这段数据途径里,无缝连接的,E3D报错,Hamming ECC 就上去纠错,但是其实Hamming ECC 纠错能力一般不强,但是可以软件实现,占用资源小。
这里的CRC32是和SATA协议结合的,SATA传输自带,一般只是标记,如果把数据存进去校验就等于能发现错误了。
东芝这里提出一个概念E3C,E3C是什么?三句话
第一句:纠错覆盖在闪存和数据途径全过程(一级ECC保护闪存,二级ECC保护SRAM,E3D保护数据传输途径)
第二句:Hamming ECC 覆盖 闪存和数据途径之间的部分(二级ECC Hamming )
第三句:闪存的ECC校验是无缝连接的。(一级ECC QSBC)
看到这里,大家应该都知道了ECC和PE的之间的关系了。
只是知道还不够,应该还要用已经知道的去解释一些现象。
▲如上图 所示,假设一颗3000PE的NAND从使用寿命开始到结束期间,未修复的底层位错误率频率会随着 NAND 闪存的编程和写入而呈指数级的增长,而当NAND的 PE 周期耐久性终止之后,最终将进入无法使用的状态。
数据上出现位错误时,那么第一条防御线便是ECC防御战线
耗尽ECC之后,尤其是在 NAND 闪存使用寿命结束时,无法修复的错误几率将增加,可能很快就会出现数据损坏。
在这种情况下,第二条防御线是固态硬盘的紧急只读模式,当PE数值达到一定的数值的时候,主动启动紧急只读模式,只能读取不能写入,这时候能做的事情,赶快备份数据,在保修期内的话申请换盘吧。
其实在东芝设置的这个一定数值可能过于保守,在SSD预设PE的1/200的时候启动,其实来说,一个3000PE的盘,用到4000 5000PE是非常正常的,但是这个做法和东芝一贯的企业级数据安全第一的产品定位有非常大的关系,高姿态有时候也是个相当蛋疼的事情,感觉无法降格与我们沟通。
为了降低功耗提升性能,东芝也开发了一些技术:
1、为了降低漏电,每个功能区块都有独立的时钟门管理,在非操作状态可以尽可能关闭降低到最低功耗。
2、由于去掉了DRAM,所以东芝主控将用户数据通过内部缓冲区直接传递到NAND存储器,无需通过DRAM,减去了了DRAM的功率消耗。同时,也为寸土寸金的M2以及MSATA产品的PCB设计留出了宝贵的空间。
SSD的DRAM大缓存主要是放FTL映射表的,每次IO读写时SSD都会从FTL里面查询或更新闪存的真实地址,但是东芝拿掉了DRAM,没办法使用响应速度快但体积庞大的FTL表,只能使用了与SF主控相类似的二级映射表来对FLT进行访问,而且只能部分放在主控的SRAM上,还有部分放在NAND的颗粒缓冲区中,来回调用,这样就会造成2次读取,读取放大了,延迟也高了,所以4K随机效能就会下降。
DRAM不只是存储一些页大小的数据,还有合并优化中的用户数据、映射表,否则没必要用那么大的缓存,对于企业版SSD而言,外置DRAM其实很不错,对性能,寿命都有很大帮助,得到好处的同时代价和风险也很大,进行优化写入技术对掉电要求很高,风险很大,而电容,电池都有老化问题,安全冗余必须很大才行。
这个盘其实浴室也说了,就是OEM版本拿来直接换包装作为民用零售版出售,其根基还是源于企业版的要求的。所以设计定位的还是企业OEM客户需求而不是游戏玩家,东芝可能觉得为了DRAM的安全还要采用高成本的电容方案,所以权衡之后采取比较平衡的方案,拿掉了DRAM牺牲了4K随机效能,但是同时满足了企业级安全定位,又节省了成本,优化了PCB设计。
结论就是东芝和浦科特对产品的定位不同,浦科特为玩家设计,东芝为企业设计,宁愿拿掉DRAM这种做法就是东芝和浦科特在处理产品时最大的区别。
其实现在有更高级的DDR3 STT-MRAM是非易失性的,就像NAND闪存那样即使断电也能保留缓存的数据,并且不需要硬盘向闪存刷新缓存内容,这种作为DRAM是最合适不过了,但是成本过高,何况每当一种新产物出现解决老问题的同时又将会出现一个新问题,且当顺口一说吧。