资讯
HOME
资讯
正文内容
nand ftl代码 闪存芯片NOR Flash,NAND Flash傻傻分不清楚 ICMAX帮你搞定
发布时间 : 2024-10-11
作者 : 小编
访问数量 : 23
扫码分享至微信

闪存芯片NOR Flash、NAND Flash傻傻分不清楚 ICMAX帮你搞定

通过前天的文章介绍,我们知道eMMC 是 Flash Memory 的一类,eMMC的内部组成是NAND flash+主控IC,那什么是Flash Memory、NOR Flash、NAND Flash,宏旺半导体就和大家好好捋一捋它们几者之间的关系。

Flash Memory 是一种非易失性的存储器。在嵌入式系统中通常用于存放系统、应用和数据等。在 PC 系统中,则主要用在固态硬盘以及主板 BIOS 中。另外,绝大部分的 U 盘、SDCard 等移动存储设备也都是使用 Flash Memory 作为存储介质。

1. Flash Memory 的主要特性

与传统的硬盘存储器相比,Flash Memory 具有质量轻、能耗低、体积小、抗震能力强等的优点,但也有不少局限性,主要如下:

需要先擦除再写入

Flash Memory 写入数据时有一定的限制,它只能将当前为 1 的比特改写为 0,而无法将已经为 0 的比特改写为 1,只有在擦除的操作中,才能把整块的比特改写为 1。

块擦除次数有限

Flash Memory 的每个数据块都有擦除次数的限制(十万到百万次不等),擦写超过一定次数后,该数据块将无法可靠存储数据,成为坏块。

为了最大化的延长 Flash Memory 的寿命,在软件上需要做擦写均衡(Wear Leveling),通过分散写入、动态映射等手段均衡使用各个数据块。同时,软件还需要进行坏块管理(Bad Block Management,BBM),标识坏块,不让坏块参与数据存储。(注:除了擦写导致的坏块外,Flash Memory 在生产过程也会产生坏块,即固有坏块。)

读写干扰

由于硬件实现上的物理特性,Flash Memory 在进行读写操作时,有可能会导致邻近的其他比特发生位翻转,导致数据异常,这种异常可以通过重新擦除来恢复,Flash Memory 应用中通常会使用 ECC 等算法进行错误检测和数据修正。

电荷泄漏

存储在 Flash Memory 存储单元的电荷,如果长期没有使用,会发生电荷泄漏,导致数据错误,不过这个时间比较长,一般十年左右,此种异常是非永久性的,重新擦除可以恢复。

2. NOR Flash 和 NAND Flash

根据硬件上存储原理的不同,Flash Memory 主要可以分为 NOR Flash 和 NAND Flash 两类。 主要的差异如下所示:

· NAND Flash 读取速度与 NOR Flash 相近,根据接口的不同有所差异;

· NAND Flash 的写入速度比 NOR Flash 快很多;

· NAND Flash 的擦除速度比 NOR Flash 快很多;

· NAND Flash 最大擦次数比 NOR Flash 多;

· NOR Flash 支持片上执行,可以在上面直接运行代码;

· NOR Flash 软件驱动比 NAND Flash 简单;

· NOR Flash 可以随机按字节读取数据,NAND Flash 需要按块进行读取。

· 大容量下 NAND Flash 比 NOR Flash 成本要低很多,体积也更小;

(注:NOR Flash 和 NAND Flash 的擦除都是按块块进行的,执行一个擦除或者写入操作时,NOR Flash 大约需要 5s,而 NAND Flash 通常不超过 4ms。)

2.1 NOR Flash

NOR Flash 根据与 CPU 端接口的不同,可以分为 Parallel NOR Flash 和 Serial NOR Flash 两类。

Parallel NOR Flash 可以接入到 Host 的 SRAM/DRAM Controller 上,所存储的内容可以直接映射到 CPU 地址空间,不需要拷贝到 RAM 中即可被 CPU 访问,因而支持片上执行。Serial NOR Flash 的成本比 Parallel NOR Flash 低,主要通过 SPI 接口与 Host 连接。

图片: Parallel NOR Flash 与 Serial NOR Flash

鉴于 NOR Flash 擦写速度慢,成本高等特性,NOR Flash 主要应用于小容量、内容更新少的场景,例如 PC 主板 BIOS、路由器系统存储等。

2.2 NAND Flash

NAND Flash 需要通过专门的 NFI(NAND Flash Interface)与 Host 端进行通信,如下图所示:

图片:NAND Flash Interface

NAND Flash 根据每个存储单元内存储比特个数的不同,可以分为 SLC(Single-Level Cell)、MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 三类。其中,在一个存储单元中,SLC 可以存储 1 个比特,MLC 可以存储 2 个比特,TLC 则可以存储 3 个比特。

NAND Flash 的一个存储单元内部,是通过不同的电压等级,来表示其所存储的信息的。在 SLC 中,存储单元的电压被分为两个等级,分别表示 0 和 1 两个状态,即 1 个比特。在 MLC 中,存储单元的电压则被分为 4 个等级,分别表示 00 01 10 11 四个状态,即 2 个比特位。同理,在 TLC 中,存储单元的电压被分为 8 个等级,存储 3 个比特信息。

图片: SLC、MLC 与 TLC

NAND Flash 的单个存储单元存储的比特位越多,读写性能会越差,寿命也越短,但是成本会更低。下图 中,给出了特定工艺和技术水平下的成本和寿命数据。

相比于 NOR Flash,NAND Flash 写入性能好,大容量下成本低。目前,绝大部分手机和平板等移动设备中所使用的 eMMC 内部的 Flash Memory 都属于 NAND Flash,PC 中的固态硬盘中也是使用 NAND Flash。

3. Raw Flash 和 Managed Flash

由于 Flash Memory 存在按块擦写、擦写次数的限制、读写干扰、电荷泄露等的局限,为了最大程度的发挥 Flash Memory 的价值,通常需要有一个特殊的软件层次,实现坏块管理、擦写均衡、ECC、垃圾回收等的功能,这一个软件层次称为 FTL(Flash Translation Layer)。

在具体实现中,根据 FTL 所在的位置的不同,可以把 Flash Memory 分为 Raw Flash 和 Managed Flash 两类。

图片: Raw Flash 和 Managed Flash

Raw Flash

在此类应用中,在 Host 端通常有专门的 FTL 或者 Flash 文件系统来实现坏块管理、擦写均衡等的功能。Host 端的软件复杂度较高,但是整体方案的成本较低,常用于价格敏感的嵌入式产品中。通常我们所说的 NOR Flash 和 NAND Flash 都属于这类型。

Managed Flash

Managed Flash 在其内部集成了 Flash Controller,用于完成擦写均衡、坏块管理、ECC校验等功能。相比于直接将 Flash 接入到 Host 端,Managed Flash 屏蔽了 Flash 的物理特性,对 Host 提供标准化的接口,可以减少 Host 端软件的复杂度,让 Host 端专注于上层业务,省去对 Flash 进行特殊的处理。eMMC、SD Card、UFS、U 盘等产品是属于 Managed Flash 这一类。

看完这篇文章,相信对Flash memory都会有一个全面的了解,无论是其原理,还是NOR Flash 和 NAND Flash、Raw Flash 和 Managed Flash 之间的异同,欢迎关注宏旺半导体,会持续带来存储领域更专业的文章。

SSD 编码 – 每个程序员都应该了解的关于固态硬盘的知识

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)

本文分享 SSD 上记录学到的东西,以及如何使代码在 SSD 上表现良好。

基本

1. 闪存单元类型

固态硬盘 (SSD) 是一种基于闪存的数据存储设备。位存储在单元中,分为三种类型:每单元 1 位(单级单元,SLC)、每单元 2 位(多级单元,MLC)、每单元 3 位(三级单元,TLC)。

2. 寿命有限

每个单元都有最大次数的 P/E 循环(编程/擦除),在此之后该单元被视为有缺陷。这意味着 NAND 闪存会磨损并且使用寿命有限。

3. 基准测试很难

测试人员是人,因此并非所有基准测试都不会出错。阅读制造商或第三方的基准时要小心,并在相信任何数字之前使用多个来源。在可能的情况下,使用您系统的特定工作负载以及您想要使用的特定 SSD 型号运行您自己的内部基准测试。最后,确保您查看对手头系统最重要的性能指标。

页和块

4. NAND 闪存页面和块

单元格被分组到一个网格中,称为块,块被分组到平面中。可以读取或写入块的最小单位是页。页不能单独擦除,只能擦除整个块。NAND 闪存页面大小可能会有所不同,大多数驱动器的页面大小为 2 KB、4 KB、8 KB 或 16 KB。大多数 SSD 具有 128 或 256 页的块,这意味着块的大小范围在 256 KB到 4 MB 范围内变化。例如,三星 SSD 840 EVO 的块大小为 2048 KB,每个块包含 256 个页面,每个页面为 8 KB。

5. 读取在页面大小上对齐

一次阅读不到一页是不可能的。一个人当然只能从操作系统请求一个字节,但是将在 SSD 中检索一整页,迫使读取比需要更多的数据。

6. 写入在页面大小上对齐

写入 SSD 时,写入是按页面大小的增量进行的。所以即使一次写操作只影响一个字节,无论如何都会写一整页。写入比所需更多的数据称为写入放大。写入页面也称为“编程”页面。

7.页面不能被覆盖

NAND 闪存页面只有在处于“空闲”状态时才能被写入。当数据改变时,页面的内容被复制到内部寄存器中,数据被更新,新版本存储在“空闲”页面中,这个操作称为“读-修改-写”。数据不会就地更新,因为“空闲”页面与最初包含数据的页面不同。一旦数据被持久化到驱动器,原始页面被标记为“过时”,并将保持原样直到被擦除。

8.擦除在块大小上对齐

页面不能被覆盖,一旦它们变得陈旧,让它们再次自由可用的唯一方法就是擦除它们。但是,无法擦除单个页面,只能一次擦除整个块。

SSD 控制器和内部结构

9. Flash 翻译层

闪存转换层 (FTL) 是 SSD 控制器的一个组件,它将逻辑块地址 (LBA) 从主机映射到驱动器上的物理块地址 (PBA)。最近的驱动器实现了一种称为“混合日志块映射”的方法或其派生方法,其工作方式类似于日志结构文件系统。这允许像顺序写入一样处理随机写入。

10. 内部并行性

在内部,多个并行级别允许一次将多个块写入不同的 NAND 闪存芯片,即所谓的“集群块”。

11. 磨损均衡

由于 NAND 闪存单元不可避免磨损,因此 FTL 的主要目标之一是在单元之间尽可能均匀地分配工作,以便块将达到其 P/E 周期限制并同时磨损。

12.垃圾收集

SSD 控制器中的垃圾收集过程确保“陈旧”页面被擦除并恢复到“空闲”状态,以便可以处理传入的写入命令。

13.后台操作会影响前台操作

垃圾收集等后台操作会对来自主机的前台操作产生负面影响,尤其是在小随机写入的持续工作负载的情况下。

访问模式

14.永远不要写不到一页

避免写入小于 NAND 闪存页面大小的数据块,以最大限度地减少写入放大并防止读取-修改-写入操作。当前页面的最大大小为 16 KB,因此默认情况下应使用该值。此大小取决于 SSD 型号,将来随着 SSD 的改进,您可能需要增加它。

15. 对齐写入

在页面大小上对齐写入,并写入页面大小的倍数的数据块。、

16.缓冲小数据量写

为了最大限度地提高吞吐量,尽可能将小数据量写入 RAM 中的缓冲区,当缓冲区已满时,执行单次大数据量写以批处理所有小写。

17.为了提高读取性能,将相关数据一起写入

读取性能是写入模式的结果。当一次写入大量数据时,它会分布在单独的 NAND 闪存芯片上。因此,您应该在同一页、块或集群块中写入相关数据,以便稍后通过利用内部并行性通过单个 I/O 请求更快地读取这些数据。

18. 分离读写请求

由小型交错读取和写入混合构成的工作负载将阻止内部缓存和预读机制正常工作,并导致吞吐量下降。最好避免同时读取和写入,并在大块中依次执行它们,最好是集群块的大小。例如,如果必须更新 1000 个文件,您可以迭代这些文件,对文件进行读写,然后移动到下一个文件,但这会很慢。最好一次读取所有 1000 个文件,然后一次写回这 1000 个文件。

19.批量失效数据

当某些数据不再需要或需要删除时,最好在单个操作中大批量等待并使其失效。这将允许垃圾收集器进程一次处理更大的区域,并有助于最大限度地减少内部碎片。

20. 随机写入并不总是比顺序写入慢

如果写入很小(即低于集群块的大小),则随机写入比顺序写入慢。如果写入既是集群块大小的倍数又与集群块大小对齐,则随机写入将使用所有可用的内部并行级别,并且将执行与顺序写入一样好。对于大多数驱动器,群集块的大小为 16 MB 或 32 MB,因此使用 32 MB 是安全的。

21.一个大的单线程读比很多小的并发读好

并发随机读取无法充分利用预读机制。此外,多个逻辑块地址可能会出现在同一个芯片上,而不是利用或利用内部并行性。大型读操作将访问顺序地址,因此将能够使用预读缓冲区(如果存在)并使用内部并行性。因此,如果例允许,最好发出大型读取请求。

22.一个大的单线程写比很多小的并发写好

大型单线程写入请求提供与许多小型并发写入相同的吞吐量,但在延迟方面,大型单线程写入比并发写入具有更好的响应时间。因此,只要有可能,最好执行单线程大写。

23.当写量较小且不能分组或缓冲时,多线程是有益的

许多并发的小的写请求将提供比单个小的写请求更好的吞吐量。所以如果I/O很小,不能批量处理,最好使用多线程。

24.冷热数据分离

热数据是变化频繁的数据,冷数据是变化不频繁的数据。如果一些热数据和一些冷数据存储在同一个页面中,那么每次在读-修改-写操作中更新热数据时,冷数据都会被一起复制,并且会在垃圾收集期间一起移动以进行磨损均衡。尽可能将冷热数据拆分成单独的页面将使垃圾收集器的工作更轻松。

25. 缓存热点数据

应尽可能多地缓冲极热数据和其他高变化的元数据,并尽可能不频繁地将其写入驱动器。

系统优化

26. PCI Express 和 SAS 比 SATA 快

制造商提供的两个主要主机接口是 SATA 3.0(550 MB/s)和 PCI Express 3.0(每通道 1 GB/s,使用多个通道)。串行连接 SCSI (SAS) 也可用于企业 SSD。在它们的最新版本中,PCI Express 和 SAS 比 SATA 更​快,但它们也更贵。

27. 过度配置对于磨损平衡和性能很有用

只需将驱动器格式化为小于最大物理容量的逻辑分区容量,即可过度配置驱动器。对用户不可见的剩余空间仍将可见并由 SSD 控制器使用。过度配置有助于磨损平衡机制应对 NAND 闪存单元固有的有限寿命。对于写入不那么重的工作负载,10% 到 15% 的过度空间配置就足够了。对于持续随机写入的工作负载,保持高达 25% 的过度空间配置将提高性能。超额配置将充当 NAND 闪存块的缓冲区,帮助垃圾收集过程吸收写入峰值。

28.启用TRIM命令

确保您的内核和文件系统支持 TRIM 命令。当一个块被删除时,TRIM 命令会通知 SSD 控制器。然后,垃圾收集过程可以在空闲时间在后台擦除块,使驱动器准备好应对大型写入工作负载。

29.对齐分区

为确保逻辑写入真正与物理内存对齐,您必须将分区与驱动器的 NAND 闪存页面大小对齐。

结论

如果您在阅读本文章后想更深入地了解 SSD。一个重要资源是 FAST 会议(文件和存储技术的 USENIX 会议)。每年都有许多优秀的研究在那里发表。强烈推荐FAST 2013的视频和出版物。https://www.usenix.org/conference/fast13

相关问答

学会数控机床要具备哪些基本知识 - 爱打拳的小黑妞 的回答 - ...

学会数控机床要具备的基本知识:1、数控基础知识,编程代码修改,工件坐标系,看加工图纸等。2、机床电气知识,数控系统操作,机床电路安装维修等。3、机...

 格列斯曼  长今之梦 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部