闪存学习_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。
3、读操作
通过施加一个介于擦除状态和编程状态之间的电压值,观察晶体管是否导通,实现读操作。
如下图所示,闪存中包含寄存器作为输入和输出数据的缓冲区,当执行读操作时,实际是将指定闪存页中的数据读取到寄存器中,再从寄存器通过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 Access,DMA)和直接闪存访问(Direct Flash Access, DFA):这两个缓冲区通过允许在没有CPU干预的情况下从内存(RAM)和闪存传输数据来提高CPU效率。
- ECC(错误检验和校对):这是一个关键的组件,可以对闪存中出错的数据进行校验,提升数据可靠性。对于高密度SSD更是不可或缺的组件。
- 其他组件:数据加密(Data Encryption)、数据扰码器(Data Scrambler)、缓存(SRAM)
下面几张图是闪存控制器在SSD中的位置分布
一个闪存控制器连接到多个闪存通道(Channel),与闪存芯片进行交互。每个闪存通道都有自己的时钟频率,MT/s额定值(Million Transfer Per Second,每秒百万次数据传输,是以数据为单位)根据DDR进行配置。通道数量越多,SSD性能越好,但对于闪存控制器的要求就更高。
7、闪存转换层(Flash Translation Layer,FTL)
通过闪存转换层实现闪存的地址映射、垃圾回收和磨损均衡操作
- 地址映射:由于闪存不能就地更新,当需要对数据进行修改更新时只能执行异地更新操作,因此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
相关文章:

闪存学习_1:Flash-Aware Computing from Jihong Kim
闪存学习_1:Flash-Aware Computing from Jihong Kim 前言一、Storage Media:NAND Flash Memory1、概念2、编程和擦除操作3、读操作4、异地更新操作(Out-Place Update)5、数据可靠性6、闪存控制器(SSD主控)7…...

如何将本地项目上传至Gitee仓库(详细教程)
前提条件 1、本地电脑安装Git客户端 2、本地已有项目 3、Gitee注册好了账户 如果没有安装Gitee 可以区菜鸟查看一下安装教程 Git教程https://www.runoob.com/git/git-tutorial.html 操作示例 前提条件已经准备好的情况下登录gitee 码云 https://gitee.com 点解右侧加号 新…...

redis详细教程(3.hash和set类型)
hash Redis中的Hash是一种数据结构,用于存储键值对集合。在Redis中,Hash非常适合表示对象,其中对象的每个字段都对应一个键值对。以下是关于Redis中Hash的详细讲解: 特点: 1. 键值对集合:Hash是一个包含…...

性能测试详解
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…...
修改ruoyi的logo和标题
1、修改网页标签上的图标和标题 静态修改 标签页上的 图标 直接替换public/favicon.ico文件为你自己的图标文件 如果你的图标文件名不是favicon.ico,你还需要在public/index.html中相应地修改这一行,将/favicon.ico替换为你的图标文件路径。 静态修改…...
vue系列==vue3新语法
vue系列vue3新语法 1、setup组合式API入口函数 2、利用ref函数定义响应式数据 3、利用reactive函数定义响应式数据 1、setup组合式API入口函数 1、Vue3为组合式API提供了一个setup函数,所有组合式API函数都是在此函数中调用的,它是组合式API的使用入口…...

001-Kotlin界面开发之Jetpack Compose Desktop学习路径
Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建,因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括,Kotlin是一种现代的、静态类型的编程语言,它结合…...

qt QStackedLayout详解
QStackedLayout类提供了一种布局方式,使得在同一时间内只有一个子部件(或称为页面)是可见的。这些子部件被维护在一个堆栈中,用户可以通过切换来显示不同的子部件,适合用在需要动态显示不同界面的场景,如向…...

python实现钉钉群机器人消息通知(消息卡片)
直接上代码 python """ 飞书群机器人发送通知 """ import time import urllib3 import datetimeurllib3.disable_warnings()class DingTalkRobotAlert():def __init__(self):self.webhook webhook_urlself.headers {Content-Type: applicatio…...
防火墙技术应用
目录 防火墙安全功能指标防火墙性能指标防火墙部署防火墙应用案例-Linux防火墙防火墙应用案例-华为包过滤防火墙ACL(基本)防火墙应用案例-工控防火墙部署 防火墙安全功能指标 我们防火墙也会提供各种各样的互联接口,它这种接口有以太网、快速以太网、千兆以太网&am…...

docker engine stopped
1)环境:win 10 2)docker安装时已经已经安装了虚拟机 3)启用网络适配器 4)启用docker服务(依赖服务LanmanServer) 5)全都弄好了,docker还是打不开,没办法了&a…...
Redis- 内核的分配内存限制的警告“WARNING Memory overcommit must be enabled!”
文章目录 问题描述报错原因影响解决方案注意事项 问题描述 [rootredisxxx]# redis-sentinel ./sentinel.conf 19638:X 01 Nov 2024 16:57:27.180 # WARNING Memory overcommit must be enabled! Without it, background save or replication may fail under low memory condi…...
腾讯云在线扩容数据盘
文章目录 一、查询云硬盘使用的分区形式二、根据不同的云硬盘类型进行在线扩容分区2.1 安装 gdisk 工具。2.2 安装 growpart 工具使用 growpart 工具扩容分区 三、根据不同的云硬盘类型进行在线扩容文件系统3.1 扩容 EXT 文件系统3.2 扩容 XFS 文件系统 一、查询云硬盘使用的分…...
Time Travel Queries|在 RisingWave 中访问历史数据
对于许多组织来说,能够访问历史数据十分关键。以金融交易公司为例: 特定时间点的数据快照与合规审查、审计流程息息相关。企业的关键业务系统也依赖历史数据来恢复故障并重建系统。分析过去事件及其对当前状况的影响,还有助于准确预测并制定…...
Unity之UnityWebRequest
复习UnityWebRequest 介绍下载文件和上传文件下载进度和异常验证文件DownloadHandlerScript 介绍 unity中使用UnityWebRequest来代替所有HTTP请求提供了三种API,UnityWebRequest.Get,UnityWebRequest.Post,UnityWebRequest.Put分别处理GET,POST,PUT请求…...
使用 pkg 打包 Puppeteer 应用:跨平台自动化的轻量级选择
使用 pkg 打包 Puppeteer 应用 pkg 是一个非常强大的工具,它允许你将 Node.js 项目打包成独立的可执行文件,这意味着你可以在没有安装 Node.js 环境的设备上运行该应用。这对于希望分发不暴露源代码的应用程序、创建跨平台的快速演示版本或简化部署流程…...
【Flask】三、Flask 常见项目架构
目录 前言 简单项目结构 中型项目结构 复杂项目结构 前言 Flask是一个轻量级的Web应用框架,它被广泛用于快速开发简单的网站和复杂的大型应用。随着项目规模的增长,合理的项目架构变得尤为重要。这里探讨Flask项目中的三种常见架构&…...

AI机西使用体验:你不知道的强大功能揭秘!
AI机西有人用过吗?用户体验和功能详解 最近我听说了很多关于AI机西的讨论,很多人都在问:这款工具好用吗?有没有人用过?今天我就从我的使用体验出发,给大家分享一下AI机西的功能和我的感受。 1. 绘画功能&a…...

什么是护网(HVV)需要什么技术?(内附护网超全资料包)
文章目录 一、什么是护网行动?二、护网分类三、护网的时间四、护网的影响五、护网的规则六、什么是红队? 6.1、红队测试的意义 七、什么是蓝队 一、什么是护网行动? 护网行动是以公安部牵头的,用以评估企事业单位的网络安全的…...

opencv优秀文章集合
文章目录 一、 CV领域1.1 图像处理1.2 目标检测与识别1.3 图像分割、目标追踪1.4 姿态估计1.5 3D视觉1.6 图像生成1.7 机器视觉1.8 其它 二、 nlp三、语音四、推荐系统 《OpenCV优秀文章集合》《OpenCV系列课程一:图像处理入门(读写、拆分合并、变换、注…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...