滦平住房和城乡建设厅网站,网站建设维护公司资质,汽油最新价格,都匀网站开发闪存学习_1#xff1a;Flash-Aware Computing from Jihong Kim 前言一、Storage Media#xff1a;NAND Flash Memory1、概念2、编程和擦除操作3、读操作4、异地更新操作#xff08;Out-Place Update#xff09;5、数据可靠性6、闪存控制器#xff08;SSD主控#xff09;7… 闪存学习_1Flash-Aware Computing from Jihong Kim 前言一、Storage MediaNAND Flash Memory1、概念2、编程和擦除操作3、读操作4、异地更新操作Out-Place Update5、数据可靠性6、闪存控制器SSD主控7、闪存转换层Flash Translation LayerFTL8、Trim/unmap命令8、Scatter-Gather 二、总结reference 前言 今天主要根据Jihong Kim老师的闪存教程进行学习帮助我更好地扎实闪存的基础知识
一、Storage MediaNAND Flash Memory
1、概念 闪存是非易失性存储芯片具备电擦除和再编程的特性 图闪存页的架构由多个闪存单元组成 闪存块是一个阵列每一行为一个页page编程和读操作均是以页为单位擦除是以块为单位。
图闪存块图结构 2、编程和擦除操作 闪存采用的是浮栅晶体管架构通过在控制极Control Gate施加电压往浮栅Floating Gate注入电子实现编程操作表示数据0。通过在衬底施加电压将浮栅中存储的电子吸出实现擦除操作表示数据1。 图1浮栅晶体管结构 图2左图为擦除状态浮栅中没有电子右图为编程状态浮栅中存储电子 图3左图为编程过程控制极拉高电压右图为擦除过程衬底拉高电压 3、读操作 通过施加一个介于擦除状态和编程状态之间的电压值观察晶体管是否导通实现读操作。 图4读操作细节 如下图所示闪存中包含寄存器作为输入和输出数据的缓冲区当执行读操作时实际是将指定闪存页中的数据读取到寄存器中再从寄存器通过IO总线读取到闪存控制器中。编程操作同理执行编程操作时实际是先将缓存中的数据存储到闪存的寄存器中再从寄存器编程到指定闪存页。这个寄存器可以实现多个plane并行读写的功能提升闪存并行性。
图硬件架构上的读写擦操作细节 4、异地更新操作Out-Place Update 闪存具备写前擦除的特性因此当要对某页已经保存在NAND Flash中的数据进行修改更新时需要执行异地更新即将原先位置的数据置为无效再将新修改的数据编程到新的闪存页中。但是由于编程和擦除操作都需要对闪存单元施加较高的电压值容易导致闪存单元磨损出现漏电现象从而导致数据错误。虽然可以通过闪存控制器中的ECC进行数据纠错保证数据正确率但ECC的纠错能力有限当数据误码率超过ECC纠错范围时则数据永久丢失即该闪存单元完全损坏。因此NAND Flash具有一定的生命周期。
5、数据可靠性 数据可靠性不仅受上面提及的擦除和编程操作的影响主要包括以下几个因素
编程和擦除次数闪存所处的温度读次数闪存的制作工艺 而对于保证数据可靠性的解决方案就是通过闪存控制器将数据迁移到新的位置类似于刷新操作
6、闪存控制器SSD主控 emsps;SSD主要由三部分组成闪存控制器主控、固件和闪存。其中主控负责控制固件的运行固件则对前后端数据进行处理包括ECC、垃圾回收、磨损均衡、内存映射、坏块管理等闪存控制器的出现为不完美的闪存芯片提供了更强的鲁棒性robust和可靠性其与固件的结合形成了SSD控制器架构主要由以下几个部分组成
主机接口Host Interface这个接口通过相关协议实现主机端和SSD的交互从而实现主机进行闪存访问操作和闪存控制器直接内存访问DMA。常用的接口包括SAS、SATA和PCIe。闪存总线接口总线连接闪存控制器和闪存芯片这个总线往往包含多个channel通道每个channel通道连接多个闪存芯片提升闪存读写的并行性。直接内存访问Direct Memory AccessDMA和直接闪存访问Direct Flash Access, DFA这两个缓冲区通过允许在没有CPU干预的情况下从内存RAM和闪存传输数据来提高CPU效率。ECC错误检验和校对这是一个关键的组件可以对闪存中出错的数据进行校验提升数据可靠性。对于高密度SSD更是不可或缺的组件。其他组件数据加密Data Encryption、数据扰码器Data Scrambler、缓存SRAM 下面几张图是闪存控制器在SSD中的位置分布
图SSD架构图 图SSD控制器细节图 一个闪存控制器连接到多个闪存通道Channel与闪存芯片进行交互。每个闪存通道都有自己的时钟频率MT/s额定值Million Transfer Per Second每秒百万次数据传输是以数据为单位根据DDR进行配置。通道数量越多SSD性能越好但对于闪存控制器的要求就更高。
图一个channel连接4个闪存芯片4个channel共同连接一个闪存控制器 7、闪存转换层Flash Translation LayerFTL 通过闪存转换层实现闪存的地址映射、垃圾回收和磨损均衡操作
图闪存转换层处于主机与SSD主控之间为SSD系统软件 地址映射由于闪存不能就地更新当需要对数据进行修改更新时只能执行异地更新操作因此FTL需要进行地址映射将原先数据存储位置置为无效再将新的存储位置更新到映射表中使得后续可以通过映射表正确获取到数据的最新状态垃圾回收由于闪存具备写前擦除的特性并且擦除操作是以块为单位的因此当闪存空闲空间不足时会触发垃圾回收Gabage Collection则FTL就需要挑选一个受害块victim block执行擦除执行有效数据的迁移再执行受害块的擦除更新映射表磨损均衡上面提到了当闪存单元频繁执行编程和擦除操作时会导致闪存单元彻底损坏因此为了避免这个问题FTL通过磨损均衡算法监测每个闪存块执行的编程和擦除次数将热数据迁移到磨损较轻的闪存单元中将冷数据迁移到磨损较重的闪存单元中平衡热块和冷块的磨损程度。
8、Trim/unmap命令 Trim是内置于ATA命令中的SSD命令对应的SCSI命令是Unmap是磁盘与计算机交互方式的一部分。当我们在操作系统中删除一个文件时系统为了避免影响后续请求的执行性能没有立即向驱动器发送信号以直接在SSD擦除这些数据而是在内存中将这些数据占用的地址标记为空但SSD本身并不知道那些地址对应的数据已经无效。因此操作系统通过间歇发送TRIM命令到SSD使SSD知道对应哪些物理地址无效从而方便SSD执行垃圾回收时对受害块victim block的选择以及可以实现在后台对受害块进行预删除使其可以直接被写入。既提升SSD性能也能降低垃圾回收的开销延长SSD寿命。
8、Scatter-Gather 通过scatter-gather 可以提升数据的传输速率。传统的DMA一个命令只能传输物理上连续的一个块的数据完成传输后发起中断。而采用了scatter-gather之后通过用一个链表记录每个物理上不连续的数据块的首地址和长度从而允许一个DMA命令一次传输多个物理上不连续的块完成后发起一起中断从而极大程度降低了发起中断的次数提升了数据传输效率。
二、总结 这是今天对闪存的学习成果各种参考资料也都放在下面了。如果有什么不对的地方欢迎大家批评指正
reference
1.https://drive.google.com/file/d/1Umrlua-gX3deXkR9yZOAMq1A6nPIaxLF/view 2.https://semiengineering.com/four-steps-to-verifying-an-ssd-controller-with-emulation/ 3.https://www.delkin.com/blog/understanding-nand-flash-based-ssd-drives-and-the-flash-controller/ 4.https://blog.csdn.net/lanseliuxing/article/details/135359240 5.https://blog.csdn.net/wylfengyujiancheng/article/details/120435464 6.https://www.crucial.cn/articles/about-ssd/what-can-trim-do 7.https://blog.51cto.com/xmwang/1678350 8.https://blog.csdn.net/lichengtongxiazai/article/details/40398711