[SSD固态硬盘技术 9] FTL详解

news2024/12/25 3:05:26

了解硬件特性有助于我们针对特性进行进一步的探索与优化。

为了使闪存成为存储数据的友好介质,我们需要一种机制:

  1. 将更新的信息写入新的空页,然后将 所有后续读取请求转移到其新地址

  1. 确保新编程的页面均匀分布在所有可用闪存中,以便均匀磨损

  1. 保留所有旧的无效 页面的列表,以便在以后的某个时候可以将它们全部 回收以备重用

这种机制称为 闪存转换层(FTL),如果您仔细观察,您会在所有闪存介质上找到它。

FTL 在设备端还是Host 端?

FTL所在的位置在哪?

SSD有Host Based FTL和Device Based FTL两种模式。

Device Based FTL 在设备端

绝大多数的FTL 都是在设备端。

具体来说是在主控芯片中,

再具体说是在主控芯片固件中,

再具体说是在主控芯片固件中端

Host Based FTL 在主机端

把FTL放在主机驱动程序中,Device Based则是把FTL放在SSD主控内部。【1】

Host Based SSD一般的模式是把闪存的读写接口直接开放给驱动程序,这样驱动程序就能自行管理闪存内部资源。控制器大都采用可编程逻辑器件FPGA,功能比较简单,主要实现ECC纠错和闪存时序控制。前几年提出的Open Channel SSD 便是这个思路。 但是这个阻碍是很大的, 一方面Host 要开发新的架构来管理FTL, 大厂才有这种实力,小厂是没有人力去做这个的,最后也只有阿里搞出了Open Channel SSD, 阿里云使用。另一方面设备厂商也不太愿意推动这个, 费力还不讨好, 设备商的活少了, 生意不也就少了嘛。

FTL 的职责

很多人知道FTL 负责映射表, 但其实远不止如此。FTL 有许多职责,现在让我们来看看它们。

Address Translation——映射管理

地址映射,也可以叫做mapping,负责逻辑地址和物理地址之间的映射,多技术模块都以该机制为核心进行。在闪存系统中,当页面被认为无效时,逻辑块地址可以重新映射到新编程的页面。这以一种对任何发出 I/O 请求的人来说既简单又透明的方式为我们上面列表中的第 1 位提供了解决方案。

why? 众所周知,Nand Flash具有写时擦除的特性,因此写入数据时不得不异地更新。需要维护一张逻辑地址到物理地址的映射表。

Garbage Collection——垃圾回收

垃圾回收,简称GC,回收异地更新产生的脏数据所占空间的回收工作。

Why? 因为闪存异地更新, 会存在很多block 里只有很少的有效数据, 无效数据不能释放出来, FTL需要做垃圾回收。

需要付出很多努力才能回收少量无效页面 - 就像磨损均衡一样,在GC后台移动数据的行为会对性能和耐久性产生影响。这又是一个找到正确平衡的问题

Trim

Trim是一种用来增加GC垃圾回收效率的算法。

没有Trim的话,会出现这样一种情况:在操作系统删除一个文件,实际上数据在物理层面上并没有被删除。

Wear Leveling——磨损平衡

缩短不同块之间的擦写次数差别,均衡闪存块的寿命;分为动态磨损平衡和静态磨损平衡;

如果系统中的所有块都定期更新,这就没有问题,因为当页面被标记为无效然后被回收时,磨损均衡几乎会自然发生。但这就是问题所在:如果我们有一些冷块,即数据永远不会改变的位置,那么我们必须采取措施手动重新定位该数据,否则这些块将永远不会磨损……这意味着我们实际上是在 增加写入工作量系统,这最终意味着增加磨损

因此,简而言之,我们对均匀磨损均衡的要求越高,我们造成的磨损就越多。但不够积极可能会导致热点和冷点,因为磨损变得更加不均匀。一如既往,这是一个找到正确平衡的问题。或者,如果您愿意,找到写入平衡。【3】

Power off Recovery —— 掉电恢复

掉电恢复,简称POR。正常掉电,SSD会把缓存中的数据刷新到闪存,重新加载保存的数据即可。如果是异常掉电,因为某些人为或自然外力的原因导致数据没有成功写入到Nand中,掉电恢复要恢复到掉电前的安全状态,比如恢复RAM中的数据和Address Translation中的映射表。

Error Handler——坏块管理

处理读写操作中遇到的Fatal Error或读操作过程中ECC Error状况,以及Bad Block或Weak Block的管理。略过坏块或者跳过坏块, 并记录哪些是坏块, 避免下次再用到;

SLC cache

SLC cache是把MLC或者TLC的一部分闪存块,配置为更优速度优势的SLC模式来作为Cache使用,让SSD具有更好的突发性能。不过一般主要用于消费级SSD或者移动存储中,主要原因是SLC Cache具有更好的突然性能。但是企业级SSD更追求稳定的速度, 一般不使用 SLC Cache;

RD & DR

RD指的是Read Disturb,DR指的是Data Retention。两者都能导致数据丢失,但原理和固件处理方式都不一样;

RD——对一个闪存块来说,每次读其中的一个闪存页,都需要在其他字线(Wordline)上加较高的电压以保证晶体管导通。这个操作有点类似于轻量的写操作;长期会导致比特翻转;因此需要在达到读阈值之前对这个闪存块上的数据进行刷新;

DR——电子从浮栅极跑出,导致比特翻转;由FTL定期扫描,翻转超出阈值进行数据刷新,避免数据丢失;

Over Privision——预留空间

NAND出厂考虑到后面预留可能坏块, 会多准备一些物理块, FTL需要利用这些物理块做GC和存储元数据(如映射表)

Latecncy 平滑管理

均衡控制前端主机写入速度和GC 速度, 避免速度波动。

WAF写入放大

您可能只会看到主机知道的前台 I/O 操作,看不到 后台正在发生的事情,如磨损均衡 和 GC 对闪存的写入。 闪存的性能和耐用性取决于前台和后台操作的总和

写放大越大,意味着额外写人闪存的数据越多,一方面磨损闪存,减少SSD寿命,另一方面,写人这些额外数据会占用底层闪存带宽,影响SSD性能。【2】

细心心的朋友会发现,这些功能和主控功能相似,和固件功能相似。没错。

固件的核心功能就是通过 中端FTL 来实现的。

固件前端负责和Host 交互, 遵循 NVME/ SATA/USB 协议。

固件后端负责和非易失性存储器(主要是 NAND Flash)交互, 遵循NVM 协议, 如 Toogle/ ONFI。

以后再展开介绍这些功能模块。

总结

在主控芯片固件中端, 很多人知道FTL 负责映射表, 但其实远不止如此。FTL 有许多职责。

参考

【1】https://blog.csdn.net/Gloria_y/article/details/120495807

【2】https://blog.csdn.net/weixin_44330425/article/details/107220948

【3】 https://flashdba.com/2014/09/17/understanding-flash-the-flash-translation-layer/

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

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

相关文章

【Python入门第五天】Python 变量

创建变量 变量是存放数据值的容器。 与其他编程语言不同,Python 没有声明变量的命令。 首次为其赋值时,才会创建变量。 实例 x 10 y "Bill" print(x) print(y)运行实例 变量不需要使用任何特定类型声明,甚至可以在设置后更改…

Jupyter 使用Anaconda 虚拟环境内核

Anaconda 虚拟环境中使用Jupyter Notebook 安装好Anaconda之后,进入Anaconda Prompt,创建虚拟环境,env_name是创建的环境的名字。 conda creat -n env_name python3.9等虚拟环境搭建好之后,激活环境。 conda activate env_name…

网络流与图(一)

线性规划问题是运筹学最基本的问题,我们已经学过不少的解决方法,今天继续学习针对线性规划问题的另一种高效算法——网络流问题(network flow problem)1网络流模型为了更好介绍该算法来龙去脉,与以往一样,从…

MongoDB 删除文档

MongoDB 删除文档 MongoDB remove() 、deleteMany()、deleteOne()函数是用来移除集合中的数据。 remove()删除文档 remove() 方法的基本语法格式如下所示&#xff1a; db.collection.remove(<query>,<justOne> ) 如果你的 MongoDB 是 2.6 版本以后的&#xff0c…

filter及backdrop-filter属性详解

filter属性详解 filter 属性定义了元素(通常是<img>)的可视效果(例如&#xff1a;模糊与饱和度)。 filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();下面运用…

聚观早报 |字节开展类ChatGPT研究;特斯拉前AI负责人将加入OpenAI

今日要闻&#xff1a;字节开展类ChatGPT研究&#xff1b;丰田汽车第三财季净利润同比下降8.1% 特斯拉前AI负责人将加入OpenAI&#xff1b;快手&#xff1a;正在开展大规模语言模型研究&#xff1b;劳斯莱斯CEO称客户希望更多电动汽车 字节开展类ChatGPT研究 北京时间 2 月 9 日…

零代码做分析报表的bi软件才是好软件

有些数据分析软件对IT的依赖比较重&#xff0c;在制作报表的过程中需要用到SQL&#xff0c;这就导致了IT人员懂技术不懂业务&#xff0c;业务人员懂业务不懂技术&#xff0c;数据分析做来做去总是差点什么的局面。要是遇到了IT部门相对较弱的情况&#xff0c;还会加重IT负担&am…

字符串函数能有什么坏心思?

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;夏目的C语言宝藏 &#x1f4ac;总结&#xff1a;希望你看完之…

又发现一个ChatGPT国内镜像站,无次数限制也无广告

ChatGPT 美国OpenAI研发的聊天机器人程序&#xff0c;于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;…

传统目标检测实战:Sift/ORB+Match

传统目标检测实战&#xff1a;Sift/ORBMatch 文章目录传统目标检测实战&#xff1a;Sift/ORBMatch1. 前言2. 先验知识3. 项目框架4. 工具函数&#xff08;utils.py&#xff09;5. 检测待测图像&#xff08;test_xxxx.py&#xff09;5.1 使用图像缩放金字塔&#xff08;test_PG.…

大数据技术架构(组件)31——Spark:Optimize--->JVM On Compute

2.1.9.4、Optimize--->JVM On Compute首要的一个问题就是GC,那么先来了解下其原理&#xff1a;1、内存管理其实就是对象的管理&#xff0c;包括对象的分配和释放&#xff0c;如果显式的释放对象&#xff0c;只要把该对象赋值为null&#xff0c;即该对象变为不可达.GC将负责回…

ISYSTEM调试实践9-winIDEA Analyzer功能2

上一篇文章介绍了如何启动Trace,并配置。本文简单介绍一下Analyzer的输出结果&#xff0c;具体每个窗口的内容。 1、程序溯源 Profiler Timeline介绍了函数在时间轴上的执行调用情况。鼠标左键可以设置具体时间点&#xff0c;CTRL 左键和CTRL 右键设置观测的时间窗口&#xf…

技术树基础——16排它平方数(Bigdecimal,int,string,数组的转换)

题目&#xff1a;03879 * 203879 41566646641这有什么神奇呢&#xff1f;仔细观察&#xff0c;203879 是个6位数&#xff0c;并且它的每个数位上的数字都是不同的&#xff0c;并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个&#xff0c;请你…

openFeign源码学习

openFeign这个框架要解决的问题是&#xff1a;通常在调用远程接口的时候&#xff0c;如果是http请求&#xff0c;需要我们通过restTemplate去拼接调用参数和连接&#xff0c;然后发起调用&#xff0c;openFeign帮我们把拼接参数的这个过程包装了起来&#xff0c;通过代理对象的…

[WUSTCTF2020]level1 题解

1.查壳 64bit elf 还有一个文本文件&#xff0c;打开 打开是一串数字 根据这个txt文件的名称Output&#xff0c;可以猜测&#xff0c;这个文件的内容可能是程序的输出 2.静态分析 找到main函数反汇编 v7 __readfsqword(0x28u); stream fopen("flag", "r…

二叉搜索树之AVL树

AVL树的概念二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决上…

PCCW-HKT Futurera NFT 作品集来袭!

欢迎来到 Futurera&#xff0c;未来的虚拟城市&#xff01; 凭借庞大的 web2 资源&#xff0c;在全球首创的虚拟 5G 移动网络技术的鼎力支持下&#xff0c;Futurera 正力争跨越元宇宙的边界。 NFT 系列介绍 为庆祝 The Sandbox 中 Futurera 体验的开放&#xff0c;我们发布了一…

LSTM已死,Transformer当立(LSTM is dead. Long Live Transformers! ):下

2017 年,Google 在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。而且实验也证明Transformer 在效果上已经完败传统的 RNN 网络。Transformer 的整体模型架构如下图所示。尽管它看起来还是很…

python网络爬虫—快速入门(理论+实战)(七)

系列文章目录 &#xff08;1&#xff09;python网络爬虫—快速入门&#xff08;理论实战&#xff09;&#xff08;一&#xff09; &#xff08;2&#xff09;python网络爬虫—快速入门&#xff08;理论实战&#xff09;&#xff08;二&#xff09; &#xff08;3&#xff09; p…

平价款的血糖血压监测工具,用它养成健康生活习惯,dido F50S Pro上手

之前看有数据显示国内的三高人群越来越年轻&#xff0c;很多人不到三十就有了高血压、高血糖的问题&#xff0c;埋下了不小的健康隐患&#xff0c;加上前阵子的疫情管控放松&#xff0c;人们了解到了新冠病毒对心脏负担的认知&#xff0c;预防慢病被大众提上了日程&#xff0c;…