依公开知识及经验整理,如有误请留言。
个人辛苦整理,付费内容,禁止转载。
一. 本博客及动态出现的信息,均仅供参考。本人将尽力以求所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性。本人对有关资料所引致的错误、不确或遗漏,概不负任何法律责任(包括侵权责任、合同责任和其它责任)。
二. 任何透过本博客及动态的网页或链接及得到的资讯、产品及服务,本人概不负责,亦不负任何法律责任。
三. 本博客及动态使用的信息,网页或链接(图片)可能由于本人疏忽未标明作者和出处,如有侵权,请立即与本人取得联系。
四. 本博客及动态支持保护知识产权,任何单位或个人认为本博客及动态中的网页或链接内容可能涉嫌侵犯其知识产权,应该及时向本人提出,并提供侵权情况证明。本人会依法尽快删除相关内容或断开相关链接。
五. 本博客内容仅供学习交流,禁止商用。
六. 阅读并使用本博客及动态包括其提供的网页链接及资源时,即代表您已阅读并同意本免责声明的全部内容。如有异议,请立刻关闭本网页并屏蔽本人动态并停止使用。
[NAND 驱动 8.1] NAND FLASH特性串烧 | 不了解闪存特性,你能用好闪存产品吗?
内容摘要
一.闪存的特性
二. 闪存的劣势及其解决机制
前言
为了利用好闪存, 发挥闪存的优势, 以达到更好的性能和使用寿命, 那自然要求了解闪存特性。 闪存作为一种相对较新的存储介质, 有很多特别的特性。
一.闪存的特性
凡是采用Flash Memory的存储设备,可以统称为闪存存储。我们经常谈的固态硬盘(SSD),可以由volatile/non-volatile memory构成,其实固态硬盘的范畴是大于闪存的,只是当前的固态硬盘大多数采用闪存介质,所以很多时候我们默认固态硬盘就是闪存盘。
除了闪存以外,还有其它多种快速存储技术,如DRAM ,NVRAM, MRAM and Spin-Torque(自旋力矩磁阻式随机存取内存), Carbon Nanotube( 碳纳米管 ), Phase Change Memory(相变内存),Memristor ( 忆阻器 )等等。
-
如果一个 Block 写过数据了, 这个Block需要先整片擦除,里面的page才能再次写入,不能覆盖写。该特性决定相同逻辑块(LBA)的数据需要更新时,不能覆盖写入老的物理地址,需要写入新的物理地址,同时需要更新L2P表,建立新的映射关系,老的物理地址失效,等待GC回收。
-
Block都是有一定寿命的。Block的每次擦除动作都会对其造成一定磨损,擦除次数达到一定的阈值(PE)后,Block就会死亡,所以我们希望SSD整体磨损达到均衡状态,而不是集中擦写某些Block而导致死亡,这就是FTL中 WL(Wear Leveling,磨损均衡)需要做的工作。 SLC/MLC/TLC/QLC的寿命大不相同, 甚至不在一个数量级。
-
每个Block的读次数是有限的,存在读干扰(RD,Read Disturd)问题,当某个Block的读次数达到一定阈值时,可能存在一定的Error Bit, 需要ECC 纠错模块把 Error bit 纠正, 由FTL需要对其进行更新,将其读出写入另外的Block。这样写入新的block 的数据error bit 变为 0 了。这可以防止 error bit 累加, 因为如果累加到超过主控纠错能力,就会出现数据错误。数据错误是恼人的, 你可不想一觉醒来, 你的银行账户存款少了一个 0 吧?
-
闪存存在数据保存(DR,Data Retention)问题,闪存上的数据由于存在电荷流失,过一段时间后会造成数据丢失,所以FW就需要定时对闪存上的数据进行更新。
-
闪存的坏块问题,闪存坏块存在两种,出厂坏块和使用坏块,出厂坏块是闪存出厂时就存在的坏块,FW需要通过扫描获知出厂坏块,使用坏块是SSD在使用过程中数据擦写导致的坏块,FW通常需要根据数据的ECC校验进行判定,坏块管理是FW的一大任务。
-
MLC、TLC和QLC存在Lower Page corruption,FW在写入Upper Page数据时异常掉电会导致Lower Page的数据丢失,从而导致已经写入SSD的数据丢失,FW需要对SSD的异常掉电进行处理。所以一般要求MLC 要 low page 和 Upper page 2个page 一起program, TLC 的 lower page / middle page / upper page 共3 page一起program page, QLC 要 4 个 page 一起 program. 为什么是这么多数据, 这个数量对应一个存储元Cell 中存储几个 bit. 这几个 page 一起 program 称为 One Pass Program. 有的TLC NAND 是要第一次先 program Low Page 和 Middle Page, 第二次 program Upper Page, 这种称为 Two Pass Program.
-
SLC的数据处理速度快于MLC、TLC和QLC,但是MLC、TLC、QLC可以配置成SLC来使用,相关处理会导致SSD在空余空间大时读写速度快,当快要写满时,读写速度下降很大。这就是SLC 缓存的做法。如果当初SLC 使用, 这些SLC 的block 的寿命相等于 SLC block 的寿命, 但可惜的是,用户使用到一定的容量来存资料后, 闪存中 SLC 缓存块就用完了, 所以一般这些block 是 SLC 模式和 TLC 模式混用的, 这样混用的话寿命就不能按 SLC 寿命算了。这导致SSD有一个很大的问题是性能衰减。使用1,2年后,性能可能只有原来的一半或者更低,性能波动也会频繁出现。这一般是因为硬盘越来越满, 没有空间来做SLC 缓存, 导致看到真实的TLC or QLC 速度, 即换缓外速度。
-
闪存存取比较快速,无噪音,散热小。这主要是以为闪存是半导体材料,靠电子存储信息, 靠电流读取数据。 这样没有机械臂机械运动。
-
和其他的存储介质相比,Flash最小操作单位,有些特殊。一般设备,比如硬盘/内存,读取和写入都是以bit位为单位,读取一个bit的值,将某个值写入对应的地址的位,都是可以按位操作的。但是Flash由于物理特性,使得内部存储的数据,只能从1变成0,这点,可以从前面的内部实现机制了解到,只是方便统一充电,不方便单独的存储单元去放电,所以才说,只能从1变成0,也就是释放电荷。
总结一下Flash的特殊性如下:[1]
|
| 普通设备(硬盘/内存等) | Flash |
| 读取/写入的叫法 | 读取/写入 | 读取/编程(Program)① |
| 读取/写入的最小单位 | Bit/位 | Page/页 |
| 擦除(Erase)操作的最小单位 | Bit/位 | Block/块② |
| 擦除操作的含义 | 将数据删除/全部写入0 | 将整个块都擦除成全是1,也就是里面的数据都是0xFF③ |
| 对于写操作 | 直接写即可 | 在写数据之前,要先擦除,然后再写 |
表. Flash和普通设备相比所具有的特殊性
注:
①之所以将写操作叫做编程,是因为,flash和之前的EPROM,EEPROM继承发展而来,而之前的EEPROM(Electrically Erasable Programmable Read-Only Memory),往里面写入数据,就叫做编程Program,之所以这么称呼,是因为其对数据的写入,是需要用电去擦除/写入的,就叫做编程。
②对于目前常见的页大小是16K的Nand Flash,其块的大小有18MB/36MB等。而对于Nor Flash,常见的块大小有64K/32K等。
③在写数据之前,要先擦除,内部就都变成0xFF了,然后才能写入数据,也就是将对应位由1变成0。
-
NAND 读写是要严格遵循特定的时序的, 需要先下 命令CMD, 地址 Addr, 数据 DATA。每家NAND厂商的读写命令还不同,甚至同一个NAND 厂家的不同 NAND 代数, 命令和地址也不同, SLC、MLC、TLC、QLC 的读写时序也分别不同。只有按照NAND Spec 实现的时序,才能保证不出问题。这方面就不鼓励大家创新了, NAND 说明书上有规定的就按规定来操作, NAND 没有允许的操作就不要做。为什么做闪存主控这么难, 难就难在任何 NAND 的改动, 都要主控来适配支持。 一般而言, 一款主控要要支持所有主流的 NAND, 这便要求主控设计时比较有兼容性,模块容易扩展。
-
闪存颗粒SLC、MLC、TLC、QLC在可靠性、性能、寿命、使用温度范围、价格、错误率等等方面, 因为他们的特性, 适合的使用场景也是不同的, 如SLC 适合使用在工控方面, TLC 适合消费和企业级别主流使用, QLC 适合廉价存储, 适合多读少写的应用场景[4]
-
NAND闪存被用来作为包括SSD,USB驱动器和SD卡等许多类型的存储产品的主要部分。 为了满足客户在价格,性能和可靠性方面的期望,上述每个特性之间都要进行权衡。
该选择还可以取决于存储单元正在与之通信的应用程序或主机。 例如,应用程序的存取模式各不相同:有些可能会进行大量随机读写,有些可能会更多地依赖大型顺序写入,例如 视频录制。
在设计使用NAND闪存的系统时, 闪存控制器还必须足够灵活,以进行适当的权衡。 选择正确的闪存控制器对于确保闪存满足产品要求至关重要。
二. 闪存的劣势及其解决机制
正是因为上面展示的闪存介质的这些特性和有点, 闪存产品才能在综合实力上优于他人。
当然凡是都友好有坏, 我们和磁盘比较下优缺点。
当前我们碰到的很多问题是,相比于IOPS,闪存比磁盘性能高上几十甚至上百倍,但是我们将数据放置到闪存上,性能提升并没有这么高,甚至没有提高。
原因是闪存主要解决的是IO性能问题,并且主要随机写的性能,而顺序读写性能并不如多块磁盘汇聚之后的性能。[3]
总结:
本文介绍了闪存的特性,看起来对我们使用闪存产品提供了很多启发。我列出的特性都是很典型的, 但不一定全, 大家可以在评论区留言补充~
参考
[1] 360doc, Kinetis, nandflash简单了解
[2] 详解SSD之闪存关键特性_laa与lba_TomeXin的博客-优快云博客
[3] 李炫辉,闪存存储特性以及数据库相关优化思路, 闪存存储特性以及数据库相关优化思路-在数据库中存储的是
[4] 解析NAND闪存系统的特性平衡, 解析NAND闪存系统的特性平衡-电子发烧友网

本文介绍了闪存的特性,包括SSD的运作原理,如Flash Memory的工作方式、读写限制、寿命问题以及磨损均衡机制。此外,讨论了SLC、MLC、TLC和QLC之间的差异,强调了闪存的性能优势和挑战,并提出了针对闪存劣势的解决方案。
1214

被折叠的 条评论
为什么被折叠?



