固态硬盘专业知识:名词篇(二)

前言——
在前段时间小编曾经发布了:固态硬盘知识进阶:专业名词篇。文内介绍了各类固态硬盘中可能会出现的比较晦涩和深入的名词,而很多朋友可能没听说过这些名词。如ftl、lba、gc等。。。今天我们将剩下的一些名词再来说一下,给大家解读一下。
下面就来为大家解读这些名词。
目录:
一、预留空间(over-provisioning,op)
二、trim
三、写入放大(write amplification,wa)
四、坏块管理(bad block management,bbm)
五、ecc - 校验和纠错
六、interleaving - nand 交叉存取技术
正文开场:
一、 预留空间(over-provisioning,op)
预留空间一般是指用户不可操作的容量,为实际物理闪存容量减去用户可用容量。这块区域一般被用来做优化,包括磨损均衡,gc和坏块映射。
第一层为固定的7.37%,这个数字是如何得出的哪?我们知道机械硬盘和ssd的厂商容量是这样算的,1gb是1,000,000,000字节(10的9 次方),但是闪存的实际容量是每gb=1,073,741,824,(2的30次方) ,2者相差7.37%。所以说假设1块128gb的ssd,用户得到的容量是128,000,000,000字节,多出来的那个7.37%就被主控固件用做op了。
第二层来自制造商的设置,通常为0%,7%和28%等,打个比方,对于128g颗粒的sandforce主控ssd,市场上会有120g和100g两种型号卖,这个取决于厂商的固件设置,这个容量不包括之前的第一层7.37%。
第三层是用户在日常使用中可以分配的预留空间,像fusion-io公司还给用户工具自己调节大小来满足不同的耐用度和性能,而用户也可以自己在分区的时候,不分到完全的ssd容量来达到同样的目的。
预留空间虽然让ssd的可用容量小了,但是带来了减少写入放大,提高耐久,提高性能的效果。
二、 trim
trim是一个ata指令,由操作系统发送给ssd主控制器,告诉它哪些数据占的地址是”无效“的。
要明白什么是trim和为什么它很重要,需要先知道一点文件系统的知识。
当你在电脑里删除一个文件的时候,操作系统并不会真正的去删除它。操作系统只是把这个文件地址标记为“空”,可以被再次使用,这意味着这个文件占的地址已经是“无效”的了。这就会带来一个问题,硬盘并不知道操作系统把这个地址标记为”空“了,机械盘的话无所谓,因为可以直接在这个地址上重新覆盖写入,但是到了ssd上问题就来了。
nand需要先擦除才能再次写入数据,要得到空闲的nand空间,ssd必须复制所有的有效页到新的空闲块里,并擦除旧块(垃圾回收)。如果没有trim,意味着ssd主控制器不知道这个页是”无效“的,除非再次被操作系统要求覆盖上去。
这里要强调下,trim只是条指令,让操作系统告诉ssd主控制器这个页已经“无效”就算完了,并没有任何其它多余的操作,对trim后的优化其实是垃圾回收在干活。trim能够减少写入放大,因为主控制器不需要复制已经被操作系统定义为“无效”的页(没trim的话,主控就因为不知道,而认为这个页“有效”)到“空白块”里,这同时代表复制的“有效”页变少了,垃圾回收的效率提高了,ssd性能下降的问题也减弱了。
所以说trim的奥秘在于它能大量减少“有效”页的数量,大大提升垃圾回收的效率。
相对于企业级市场,在消费级的ssd里,trim显得更为重要,企业级的ssd大部分都带有相当大的op(备用空间)空间,能够提升一部分的垃圾回收效率。而消费级ssd一般op都比较小,所以需要trim来保证垃圾回收的效率。
trim指令只有在操作系统进行删除、格式化等操作时候才会发送。trim指令目前还不支持发送给raid阵列中的ssd。(操作系统下进行的软件raid可以支持)。
trim的支持需要3个要素:
1.ssd主控制器和当前搭配的固件需要支持trim命令接收。
2.当前操作系统需要支持trim指令发送。(win7/2008r2及后续版本)
3.当前使用的磁盘驱动程序必须支持trim命令传输。
只有同时满足以上3个条件,才能做到系统trim命令发送,驱动传输trim命令,ssd固件接收到传输来的trim命令。
trim目前不支持以下几种情况:(可能还有更多)
1. trim目前不支持raid阵列中的ssd。(操作系统下进行软件raid除外)
2. trim目前不支持磁盘镜像文件内操作。(vm等虚拟机软件使用的虚拟磁盘文件)
3. trim目前不支持加密的文件系统。(以防止暴露加密文件系统信息)
三、 写入放大(write amplification,wa)
因为闪存必须先擦除才能写入(我们也叫“编程“),在执行这些操作的时候,移动(或覆盖)用户数据和元数据(metadata)不止一次。这些多次的操作,不但增加了写入数据量,减少了ssd的使用寿命,而且还吃光了闪存的带宽(间接地影响了随机写入性能)。
早在2008年,intel公司和silicon systems公司(2009 年被西部数字收购)第一次提出了写入放大并在公开稿件里用到这个术语。他们当时的说法是,写入算法不可能低于1,但是这种说法在2009年被 sandforce打破,sandforce说他们的写入放大是0.55。
最简单的例子,比如我要写入一个4kb的数据,最坏的情况就是,一个块里已经没有干净空间了,但是有无效数据可以擦除,所以主控就把所有的数据读到缓存,擦除块,缓存里更新整个块的数据,再把新数据写回去,这个操作带来的写入放大就是: 我实际写4k的数据,造成了整个块(1024kb)的写入操作,那就是256倍放大。同时带来了原本只需要简单的写4kb的操作变成闪存读取 (1024kb),缓存改(4kb),闪存擦(1024kb),闪存写(1024kb),造成了延迟大大增加,速度慢是自然了。所以说写入放大是影响 ssd随机写入性能和寿命的关键因素。
用100%随机4kb来写入ssd,目前的大多数ssd主控,在最坏的情况下写入放大可以达到20以上。如果是100%持续的从低lba写到高lba的话,写入放大可以做到1,实际使用中写入放大会介于2者之间。用户还可以设置一定的预留空间来减少写入放大,假设你有个128g的ssd,你只分了64g 的区使用,那么最坏情况下的写入放大就能减少约3倍。
影响写入放大的因素
许多因素影响ssd的写入放大。下面我列出了主要因素,以及它们如何影响写放大。
1. 垃圾回收(gc) garbage collection ---
虽然增加了写入放大(被动垃圾回收不影响,闲置垃圾回收影响),但是速度有提升。这个比较特殊的算法用来整理,移动,合并,擦除闪存块来提升效率。
2. 预留空间(op) over-provisioning ---
减少写入放大,好。(预留空间越大,写入放大越低)在ssd的闪存上划出一部分空间留给主控做优化,用户不能操作的空间。
3. trim ---
开启后可以减少写入放大,好。一个ata指令,由操作系统发送给ssd主控,告诉主控哪些数据是无效的并且可以不用做垃圾回收操作。
4. 可用容量 ---
减少写入放大,好。(可用空间越大,写入放大越低)用户使用中没有用到的空间,需要有trim支持,不然不会影响写入放大。 (某些主控制器算法只支持对op区垃圾回收,这样就不会影响)
5. 安全擦除secure erase ---
减少写入放大,好。清除所有用户数据和相关元数据,让ssd重置到初始性能。
6. 持续写入sequential write ---
减少写入放大,好。理论上来说,持续写入的写入放大为1,但是某些因素还是会影响这个数值。
7. 随机写入random writes ---
提高写入放大,不好。随机写入会写入很多非连续的lba,将会大大提升写入放大。
8. 磨损平衡(wl) wear leveling ---
直接提高写入放大,不好。确保闪存的每个块被写入的次数相等的一种机制。
四、 坏块管理(bad block management,bbm)
不管磨损平衡算法如何聪明,在运作中都会碰到一个头痛的问题,那就是坏块,所以一个ssd必须要有坏块管理机制。何谓坏块?
一个nand块里包含有不稳定的地址,不能保证读/写/擦的时候数据的准确性。坏块分出厂坏块和使用过程中出现的坏块,和机械盘的坏块表一样(p表和g表),ssd也有坏块表。
出厂坏块的话,在坏块上会有标记,所以很容易就能被识别,后期使用中出现的坏块就要靠主控制器的能力了,一般来说,越到nand生命的后期(p/e数开始接近理论最大值),坏块就会开始大量出现了。
一般来说nand出厂都包含坏块,不过厂商有个最小有效块值(nvb-minimum number of valid blocks),拿intel的34nm mlc l63b来说,1个die上4,096个块里至少要有3,936个块是好的,从这上面可以知道,虽然出厂的nand可能有坏块,但是厂商保证在正常生命周期里,好块数不会低于3936个块。而且每个die的第一个块地址(00h)在出厂时是必须保证好的(ecc后,这个块必须有效)。
nand出厂前都会被执行擦除操作,厂商会在出货前会把坏块标记出来(厂商会在坏块的第一个页的sa区上打上标记。) 这样坏块管理软件就能靠监测sa区标记来制作坏块表。
sa区(页中4096~4319的区域,用户不可访问,主要用来存放ecc算法,坏块信息,文件系统资料等。)由于在使用中会产生坏块,所以ssd的每次编程/擦除/复制等操作后都要检查块的状态。对颗粒的ecc要求也要达到厂商的标准以上(主控强不强,看ecc能力也是一个参考)。坏块管理和平衡磨损算法是必须的。
五、 ecc - 校验和纠错
ecc的全称是error checking and correction,是一种用于nand的差错检测和修正算法。由于nand flash的工艺不能保证nand在其生命周期中保持性能的可靠,因此,在nand的生产中及使用过程中会产生坏块。
为了检测数据的可靠性,在应用 nand flash的系统中一般都会采用一定的坏区管理机制,而管理坏区的前提是能比较可靠的进行坏区检测。
如果操作时序和电路稳定性不存在问题的话,nand flash出错的时候一般不会造成整个block或是page不能读取或是全部出错,而是整个page中只有一个或几个bit出错,这时候ecc就能发挥作用了。
不同颗粒有不同的基本ecc要求,不同主控制器支持的ecc能力也不同,理论上说主控越强ecc能力越强。
六、 interleaving - nand 交叉存取技术
nand flash的访问操作过程包括三项:
访问操作 = 命令输入操作+i/o操作+array传输操作
第一项的操作时间所占比例很小,在性能估算中可以忽略。
所以,通常认为:访问时间 = i/o时间+ array传输时间
在上一代nandflash中,第一项占的比例最大,是第二项的4-5倍。
每一个plane对应一个page大小的缓冲(dataregister)和一个page大小的缓存(cacheregister)。数据写入的顺序是:i/o-> cache register -> data register ->plane(数据读出的顺序刚好相反)。
缓冲(dataregister)与缓存(cacheregister)之间的数据传输速度很快,dataregister可以把i/o操作和array操作分隔开,形成i/o操作和array操作的“两级流水线”。
4个plane对应4组缓冲与缓存,每一组可以分别操作。2个plane交替操作,可以实现“乒乓操作”,达到2倍的array访问带宽。4个plane交替操作,可以实现“乒乒乓乓操作”,达到4倍的array访问带宽。
交错操作可以成倍提升nand的传输率,因为nand颗粒封装时候可能有多die,多plane(每个plane都有4kb寄存器),plane操作时候可以交叉操作(第一个plane接到指令后,在操作的同时第二个指令已经发送给了第二个plane,以此类推),达到接近双倍甚至4倍的传输能力。
结语:
这里小编介绍了一部分的专有名词解释,后面小编还会为大家介绍更多的专业名词,敬请期待哦~!
对于本文你有什么看法或建议呢?欢迎留言哦~!

可靠性基础知识第二期
为什么用电脑USB充电,手机掉电特别快?
IC产业2019年IPO第一股,博通集成正式过会!
8月国家发布多项政策鼓励新能源汽车产业发展
高光谱、多光谱、超光谱成像技术的区别
固态硬盘专业知识:名词篇(二)
行深无人物流车采用高效电源模块助推物流行业发展
CMOS图像传感器在ALEXA数码摄影机设计中的应用
小米6最新消息:小米6出现各种问题,官方坦诚回应,华为无奈中枪!
【笔记】自己用的16种代码规范
谐振密度传感器的应用利用谐振进行密度测量的原理
OLED大规模取代液晶是板上钉钉的事?
RTOS相比裸机有什么优点?RTOS相比裸机更方便吗?
对象存储和块存储区别介绍
魅族电视盒子涨价100元至399,官方:BOM成本增加
如何利用双花证明保护商家交易的风险
索尼大法带来的一把火:奥林巴斯正开发全画幅无反相机!
200个SOLIDWORKS使用技巧
数控铣床有哪些加工特点
什么是电力电子?为什么碳化硅对电力电子很重要?