闪存学习_1:Flash-Aware Computing from Jihong Kim

闪存学习_1:Flash-Aware Computing from Jihong Kim

  • 前言
  • 一、Storage Media:NAND Flash Memory
    • 1、概念
    • 2、编程和擦除操作
    • 3、读操作
    • 4、异地更新操作(Out-Place Update)
    • 5、数据可靠性
    • 6、闪存控制器(SSD主控)
    • 7、闪存转换层(Flash Translation Layer,FTL)
    • 8、Trim/unmap命令
    • 8、Scatter-Gather
  • 二、总结
  • reference

前言

  今天主要根据Jihong Kim老师的闪存教程进行学习,帮助我更好地扎实闪存的基础知识

一、Storage Media:NAND 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、数据可靠性

  数据可靠性不仅受上面提及的擦除和编程操作的影响,主要包括以下几个因素:

  1. 编程和擦除次数
  2. 闪存所处的温度
  3. 读次数
  4. 闪存的制作工艺

  而对于保证数据可靠性的解决方案就是通过闪存控制器将数据迁移到新的位置,类似于刷新操作

6、闪存控制器(SSD主控)

 &emsps;SSD主要由三部分组成,闪存控制器(主控)、固件和闪存。其中主控负责控制固件的运行,固件则对前后端数据进行处理,包括ECC、垃圾回收、磨损均衡、内存映射、坏块管理等,闪存控制器的出现为不完美的闪存芯片提供了更强的鲁棒性(robust)和可靠性,其与固件的结合形成了SSD控制器架构,主要由以下几个部分组成:

  1. 主机接口(Host Interface):这个接口通过相关协议实现主机端和SSD的交互,从而实现主机进行闪存访问操作和闪存控制器直接内存访问(DMA)。常用的接口包括SAS、SATA和PCIe。
  2. 闪存总线接口:总线连接闪存控制器和闪存芯片,这个总线往往包含多个channel通道,每个channel通道连接多个闪存芯片,提升闪存读写的并行性。
  3. 直接内存访问(Direct Memory Access,DMA)和直接闪存访问(Direct Flash Access, DFA):这两个缓冲区通过允许在没有CPU干预的情况下从内存(RAM)和闪存传输数据来提高CPU效率。
  4. ECC(错误检验和校对):这是一个关键的组件,可以对闪存中出错的数据进行校验,提升数据可靠性。对于高密度SSD更是不可或缺的组件。
  5. 其他组件:数据加密(Data Encryption)、数据扰码器(Data Scrambler)、缓存(SRAM)

  下面几张图是闪存控制器在SSD中的位置分布
SSD架构

图:SSD架构图

闪存控制器细节图

图:SSD控制器细节图

在这里插入图片描述

  一个闪存控制器连接到多个闪存通道(Channel),与闪存芯片进行交互。每个闪存通道都有自己的时钟频率,MT/s额定值(Million Transfer Per Second,每秒百万次数据传输,是以数据为单位)根据DDR进行配置。通道数量越多,SSD性能越好,但对于闪存控制器的要求就更高。
闪存控制器

图:一个channel连接4个闪存芯片,4个channel共同连接一个闪存控制器

7、闪存转换层(Flash Translation Layer,FTL)

  通过闪存转换层实现闪存的地址映射、垃圾回收和磨损均衡操作
闪存转换层

图:闪存转换层处于主机与SSD主控之间,为SSD系统软件
  1. 地址映射:由于闪存不能就地更新,当需要对数据进行修改更新时只能执行异地更新操作,因此FTL需要进行地址映射,将原先数据存储位置置为无效,再将新的存储位置更新到映射表中,使得后续可以通过映射表正确获取到数据的最新状态
  2. 垃圾回收:由于闪存具备写前擦除的特性,并且擦除操作是以块为单位的,因此,当闪存空闲空间不足时,会触发垃圾回收(Gabage Collection),则FTL就需要挑选一个受害块(victim block)执行擦除,执行有效数据的迁移,再执行受害块的擦除,更新映射表
  3. 磨损均衡:上面提到了当闪存单元频繁执行编程和擦除操作时会导致闪存单元彻底损坏,因此为了避免这个问题,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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式web开发:boa、lighttpd

嵌入式web开发:boa、lighttpd https://blog.csdn.net/m0_37105371/category_10937068.html BOA服务器的移植-CSDN博客 【第1部分:boa服务器部署到ubuntu里】 http://www.boa.org/boa-0.94.13.tar.gz tar xvzf boa-0.94.13.tar.gz cd boa-0.94.13/src/ a…

使用模板工厂模式实现动态创建C++对象

一、前言 在现代C开发中,工厂模式是常见的设计模式之一,能够有效地解耦对象创建与使用代码。本文介绍一个模板类 ComponentsFactory,它运用了模板编程和工厂模式,实现了一种动态的对象创建方式。通过该工厂,我们可以基…

Linux_04 Linux常用命令——tar

一、命令格式 tar [选项] [归档文件] [要处理的文件或目录]1、选项 c创建归档文件x解压缩归档文件z使用gzipj使用bzip2v处理过程显示信息f指定归档文件名称 2、归档文件-可指定目录及文件名 /home/wang.tar.gz 3、要处理的文件或目录 /home/study1/wang 二、常见命令 t…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第一天

24.10.31 开发前准备 IDE下载与配置GitHub仓库创建 IDE下载与配置 下载最新版本IDEA,卸载之前的旧版本 后面一路跟着安装的默认选项走即可 安装完以后这个最新的可以把我再jetbrains的其他软件设置导入,很方便 接下来创建新的项目并进行安卓应用开发…

【elkb】索引生命周期管理

索引生命周期管理 Index lifecycle management(索引生命周期管理)是elasticsearch提供的一种用于自动管理索引的生命周期的功能。允许使用者定义索引的各个阶段,从创建至删除。并允许使用者在每个阶段定义索引需要执行的特定动作。这些动作包含索引创建&#xff0c…

HttpServer模块 --- 封装TcpServer支持Http协议

目录 模块设计思想 模块代码实现 模块设计思想 本模块就是设计一个HttpServer模块,提供便携的搭建http协议的服务器的方法。 那么这个模块需要如何设计呢? 这还需要从Http请求说起。 首先http请求是分为静态资源请求和功能性请求的。 静态资源请求…

外接数据库给streamlit等web APP带来的变化

之前我采用sreamlit制作了一个调查问卷的APP, 又使用MongoDB作为外部数据存储,隐约觉得外部数据库对于web APP具有多方面的意义,代表了web APP发展的趋势之一,似乎是作为对这种趋势的响应,streamlit官方近期开发了st.c…

sql题库中常见问答

一.解答题 (15*2) 1 Drop, delete,truncates 三者的区别? ①、drop和truncate属于数据库的定义语言(DDL) ②、delete属于数据库的操作语言(DML) ③、drop可以删除全表结果,且删除的同时会删除表数据 ④、delete 和truncate只能删除表数据,truncate会删除表数据一起…

黄山谷捷IPO拟募资5亿元,增强核心竞争力

根据深交所发行上市审核进度,10月28日,黄山谷捷股份有限公司首发申请审核状态变更为“提交注册”。据悉,黄山谷捷本次拟公开发行不超过2,000万股,占本次发行后总股本的比例不低于25.00%。 招股书(注册稿)披…

无人机拦截捕获/直接摧毁算法详解!

一、无人机拦截捕获算法 网捕技术 原理:抛撒特殊设计的网具,捕获并固定无人机。 特点: 适用于小型无人机。 对无人机的损害较小,基本不影响其后续使用。 捕获成功率较高,且成本相对较低。 应用实例:…

.NET Core WebApi第4讲:控制器、路由

一、控制器是什么? 1、创建一个空的API控制器:TestController.cs 2、里面有一个类叫TestController,把它叫做控制器 因为它继承了ControllerBase类,ControllerBase类里提供了一系列的方法,使得TestController这个类具…

WAF+AI结合,雷池社区版的强大防守能力

网上攻击无处不不在,为了保护我自己的网站,搜索安装了一个开源免费的WAF 刚安装完成就收到了海外的攻击,看到是海外的自动化攻击工具做的 雷池刚好也有AI分析,于是就尝试使用这个功能,看看这个ai能力到底怎么样 以下…

Python批量查找包含多个关键词的PDF文件

在信息爆炸的时代,数据管理变得愈发重要。U盘作为一种便携式存储设备,常常承载着我们大量的个人和工作数据。然而,随着文件数量的增加,在U盘中快速找到特定文件常常成为一个令人头疼的难题。我们通常可以采用everything来快速查找…

Chromium HTML5 新的 Input 类型tel对应c++

一、Input 类型: tel <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php">电话号码: <input type"tel" name…

cisco网络安全技术第4章测试及考试

测试 以下 ACE 将放置在何处&#xff1f; permit icmp any any nd-na 试题 1选择一项&#xff1a; 在连接到另一个路由器并已启用 IPv6 的路由器接口上 使用下一代防火墙而不是状态防火墙的一个好处是什么&#xff1f; 试题 2选择一项&#xff1a; 主动而不是被动防护互…

【SQL】SQL函数

&#x1f4e2; 前言 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。 字符串函数数值函数日期函数流程函数 &#x1f384; 字符串函数 ⭐ 常用函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接&#xff0c;将S1&#xff0c;S2&#xff0…

Springboot 整合 Java DL4J 构建自然语言处理之机器翻译系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

第三份代码:VoxelNet的pytorch实现

VoxelNet是点云体素化处理的最开始的网络结构设计&#xff0c;通过完全弄明白整个VoxelNet的pytorch实现是非常有必要的。 参考的代码是这一份&#xff1a;GitHub - RPFey/voxelnet_pytorch: modification of voxelnet 参考文章&#xff1a;VoxelNet论文解读和代码解析_voxel…

vue3-element-admin 去掉登录

1.src/router/index 去掉登录路由 // {// path: "/login",// component: () > import("/views/login/index.vue"),// meta: { hidden: true },// },2./src/plugins/permission修改 未登录 import type {NavigationGuardNext,RouteLocationNormal…

CentOS 9 Stream 上安装 Redis

CentOS 9 Stream 上安装 Redis CentOS 9 Stream 上安装 RedisCentOS 9 Stream 上卸载 Redis CentOS 9 Stream 上安装 Redis 在 CentOS 9 Stream 上安装 Redis&#xff0c;可以按照以下步骤进行&#xff1a; 更新系统包&#xff1a; sudo dnf update -y安装 Redis&#xff1a; …