闪存学习_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…

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

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

【elkb】索引生命周期管理

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

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

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

.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…

【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;…

NLP算法工程师精进之路:顶会论文研读精华

1.学术能力培养 全部论文资料下载&#xff1a; 将论文和 GitHub 资源库匹配 papers with code https://paperswithcode.com/OpenGitHub 新项目快报Github pwc&#xff1a;https://github.com/zziz/pwc GitXiv&#xff1a;http://www.gitxiv.com/ 文章撰写 Overleaf [Autho…

【C++动态规划 01背包】2787. 将一个数字表示成幂的和的方案数

本文涉及知识点 C动态规划 C背包问题 LeetCode2787. 将一个数字表示成幂的和的方案数 给你两个 正 整数 n 和 x 。 请你返回将 n 表示成一些 互不相同 正整数的 x 次幂之和的方案数。换句话说&#xff0c;你需要返回互不相同整数 [n1, n2, …, nk] 的集合数目&#xff0c;满…

vue下载安装

目录 vue工具前置要求&#xff1a;安装node.js并配置好国内镜像源下载安装 vue 工具 系统&#xff1a;Windows 11 前置要求&#xff1a;安装node.js并配置好国内镜像源 参考&#xff1a;本人写的《node.js下载、安装、设置国内镜像源&#xff08;永久&#xff09;&#xff…

Spring整合Mybatis过程

配置文件 springConfig --> [jdbcConfig mybatisConfig] jdbc配置文件进行基本的数据库连接池配置 mybatis配置文件进行SqlSessionFactory Bean 和 MapperScannerConfigurer Bean的创建 在Spring容器启动时&#xff0c;系统会根据配置创建并初始化所有MyBatis所需的Bean…

Kafka 客户端工具使用分享【offsetexplorer】

前言&#xff1a; 前面我们使用 Spring Boot 继承 Kafka 完成了消息发送&#xff0c;有朋友会问 Kafka 有没有好用的客户端工具&#xff0c;RabbitMQ、RocketMQ 都有自己的管理端&#xff0c;那 Kafka 如何去查看发送出去的消息呢&#xff1f; 本篇我们就来分享一个好用的工具…

ctfshow(151->154)--文件上传漏洞--.user.ini

Web151 进入界面&#xff1a; 审计&#xff1a; 提示是前台校验。 存在图片上传。 思路&#xff1a; 先编写一个一句话木马文件&#xff1a; //shell.php <?php eval($_POST[1]); ?>既然是前端校验&#xff0c;我们查看页面源代码找到相关的校验内容&#xff1a…

Ubuntu使用Tesla P4配置Anaconda+CUDA+PyTorch

我们之前测试了在Windows系统如何安装Tesla M4&#xff08;成了&#xff01;Tesla M4Windows 10AnacondaCUDA 11.8cuDNNPython 3.11&#xff09;&#xff0c;前面安装好了Ubuntu 22.04.4的操作系统&#xff08;Ubuntu 22.04.4安装Docker引擎&#xff09;。今天&#xff0c;简单…

少儿编程参培意愿地图:一二线城市热情高涨,低线城市市场待挖掘

随着少儿编程的普及&#xff0c;编程教育逐渐走进越来越多家庭。然而&#xff0c;少儿编程的地域分布显示出明显的差异&#xff1a;在一二线城市中&#xff0c;家长对少儿编程的接受度和参与度显著高于低线城市。本文将通过对地域分布和家长态度的分析&#xff0c;探讨少儿编程…

基于SSM演出道具租赁系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;道具类型管理&#xff0c;道具出租管理&#xff0c;租赁订单管理&#xff0c;道具归还管理&#xff0c;系统管理 商家账号功能包括&#xff1a;系统首页&…

【Spring】Spring 核心和设计思想

Spring 核心和设计思想 1.什么是 Spring1.1 传统程序开发1.2 控制反转程序开发 2.理解 Spring IoC 1.什么是 Spring 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃而庞大的社区&#x…