FTL没有映射,跟发工资没有钱有什么区别

news2024/11/29 0:34:13

大家好,我是五月。

前言

FTL(Flash Translation Layer),即闪存转换层,是各种存储设备的核心算法,作用是将Host传下来的逻辑地址转换成物理地址,也就是映射。

地址映射是FTL最原始最基本的功能。

那么FTL究竟是怎么样完成映射工作的?

映射种类

首先要知道,映射种类有仨:

1. 块映射
2. 页映射
3. 混合映射(块映射+页映射)

块映射

以Block为映射单位,一个逻辑块可以映射到任何的物理块上,所以块内每一页的偏移不变。

还需要映射表来记录逻辑块和物理块之间的映射关系。

优点:因为映射表只需要块的映射,所以映射表所占空间小。

缺点:性能差。如果用户要操作一个逻辑页的话,就需要把整个块的数据读取出来,再修改逻辑页,再写入flash当中,所以小尺寸数据写性能极差。

页映射

以page为映射粒度,一个逻辑页可以映射到任何的物理页上,所以块内每一页的偏移变化多端。

需要映射表来记录每一逻辑页与物理页之间的映射关系。

优点:用户可随时操作某一逻辑页,直接将数据写进对应物理页,方便快捷,性能极好。

缺点:由于每一逻辑页与物理页都有一张映射表,并且页的数量远远要比块的数量多得多,所以映射表所占空间极大。

混合映射

混合映射是块映射和页映射的混合产物。

一个逻辑块可以映射到任何的物理块上,块内采用页映射方式,块内逻辑页可以映射到对应物理块内任何物理页上。

所以在性能和所占空间都介于块映射和页映射之间。

以下是不同映射之间的比较:

映射原理

Host是通过发送逻辑地址 LBA 来访问Flash的,每一个LBA大小为 1Sec。

每一个Sec大小各有不同,有512B、4KB、8KB,大部分情况下都是512B,业内常称为一包数据。

写过程

Flash是以page为单位进行写的,所以Host发送的 LAB+数据并不会立马就写进入,而是会先在Dbuf缓存起来,直到凑成了1page的数据量,才会写进Flash中。

用户每写入1page数据,FTL会先去找映射,看看LBA有没有对应的映射关系,如果没有找到,就会找一个物理页吧用户数据写入,同时新建一条映射。

那么,用户逻辑地址和物理地址的一条映射就生成了。

每写入一个逻辑页,就会有一条映射表产生或者更新。

读过程

用户读取某一个区域,发送LBA进行访问时,FTL就会先在映射表池里找呀找,找到与LBA对应的映射表,FTL就知道要在Flash的哪个物理页把数据读出来了。

如果读过程没有找到映射表,那么读取过程失败。

映射表位置

DRAM

大多数存储设备都有板载DRAM,映射表就能存储在DRAM上

作用:可以快速访问映射表,快速读写

缺点:随着映射表越来越多,所占DRAM就会越来越大,提高了成本和功耗。

Flash

后来的主流是映射表大部分被存在于Flash中,当下要用的小部分映射表存于DRAM中。

作用:降低成本和功耗,还可以避免掉电带来的映射信息损失,另外Flash空间很大,映射表想放多少放多少。

Host发送LBA的时候,FTL会先在DRAM中寻找,如果没有找到对应的映射表,就会去Flash中读取映射表,再根据映射关系操作对应的物理页。

缺点:需要读取两次Flash,一次映射表,一次用户数据,底层带宽减小了,对于随机操作来说,就显得效率低了一点。

映射表更新

随着映射表的增加、删除、覆盖,到了某个时刻就要把映射表写进Flash保存起来,避免掉电时发生大量映射表丢失。

时不时将映射表写进Flash,就算发生了突然的异常掉电,丢失的也只是小部分映关系,后面还能通过重建映射表恢复回来。

映射表的写入时刻

1. 新生的映射表数量积累到一定的阈值
2. 用户写入的数据量积累到一定的阈值
3. 空闲闪存块的剩余数量达到一定的阈值

写入策略

1. 全部更新

将所有的映射表,无论是新产生的还是原先就有的,全部一股脑写入Flash中。

优点:固件实现简单,不用去考虑哪些映射表是新的,哪些是原本就有的。

缺点:写入数据量多,影响性能和延时,还会增加写入放大。
  
2. 增量更新

只把新产生的映射表写入Flash中。

优点:新增写入的数据量少,性能好,时效高。

缺点:固件实现复杂,还得区分那么那么些是新增的映射表,哪些是被覆盖的。

选择哪种写入决策,应根据硬件架构,结合实际情况考虑。

好了,这次先写到这儿,祝各位生活愉快。

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

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

相关文章

Pytest教程__简介与安装(1)

一、Pytest简介 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但更灵活。 官方网站优点简介: 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考能够支持简单的单元测试…

【Qt】Ubuntu安装GCC9.3.0版本的Qt5.15.5

目录 一、安装GCC9.3.0 1.下载GCC9.3.0源码 2.获取依赖项的包 3.生成Makefile文件 4.编译并安装 5.生成软链接 6. 查看GCC版本 二、安装Qt 1.下载Qt安装包 2.创建Qt项目并运行 一、安装GCC9.3.0 1.下载GCC9.3.0源码 https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3…

药物靶点信息数据库有哪些?都有哪些特点?

药物靶点信息数据库的应用不仅能够高效地扩大靶点信息获取,而且能深化科研人员对于靶点的认识,从而服务于新靶点发现、药物筛选、药物设计、疾病治疗及药理学机制的研究等领域。 药物靶点可以分为受体、酶、离子通道、DNA、激素与生长因子等几种类型。随…

linux服务器上,docker安装nginx

如果出现 Using default tag: latest Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImagenginx&taglatest": dial unix /va…

不衔接的两个视频能拼在一起吗?怎么把视频拼接起来?

怎么把视频拼接起来?相信大家在平时刷小视频的时候,都看到过视频合集,例如搞笑视频合集、综艺片段合集、变装合集等等。其实这些视频合集都是通过视频拼接来完成的,只需短短几分钟就能通过这些视频获得愉悦体验,非常适…

一学就会-----删除链表中的重复节点

文章目录 题目描述思路一代码示例思路二代码示例 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 图片示例: 思路一 解决该问题较简单,且在…

光纤跳线性能测试科普

光纤跳线是一种用于连接光纤设备或光纤网络的光学传输线路,它由两个光纤连接器和一段光纤组成。光纤跳线的质量直接影响着光信号的传输效率和稳定性,因此需要进行一些测试来保证其性能。 一、测试类型 光纤跳线性能测试主要有以下四种: 极性…

【基于容器的部署、扩展和管理】3.10 云原生容器运行时环境和配置管理

往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【3.1 容器编排系统和Kubernetes集群的构建】 第三章:【3.2 基于容器的应用程序部署和升级】 第三章:【3.3 自动…

运维圣经:Webshell应急响应指南

目录 Webshell简介 Webshell检测手段 Webshell应急响应指南 一. Webshell排查 二. 确定入侵时间 三. Web日志分析 四. 漏洞分析 五. 漏洞复现 六. 清除Webshell并修复漏洞 七. Webshell防御方法 Webshell简介 Webshell通常指以JSP、ASP、 PHP等网页脚本文件形式存在…

kubesphere jenkins 构建java项目报错Could not parse metadata

kubesphere jenkins 构建java项目报错Could not parse metadata 问题描述: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project common-plugin-starter: Failed to install metadata com.n…

struct | 详解C语言结构体

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。 结构体和其他类型基础数据类型一样,例如 int 类型,char类型;只不过结构体可以做成你想要的数据类型,以方便日后的使用。 在实际项目…

STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

vivado:引脚已约束但是报错

一、问题引入 报错信息如下: [DRC UCIO-1] Unconstrained Logical Port: 3 out of 3 logical ports have no user assigned specific location constraint (LOC). This may cause I/O contention or incompatibility with the board power or connectivity affect…

msvc编译qt源码(qt6之前版本)

配置环境 根据源码里的readme(D:\Qt\Qt5.9.9\5.9.9\Src\readme)安装对应的依赖环境,如果是整个源码编译必须都安装 Qt for Windows - Requirements | Qt 5.15 Qt for Windows - Building from Source | Qt 5.15 Qt WebEngine Platform Not…

day02--java基础编程:变量,数据类型,类型转换,运算规则,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

1 Day02–变量数据类型类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字。在Java中,我们需要标识代码的很多元素,包括包名、类名、方法、字段、变量等。我们选择的名称就称为标识符,并且遵循以下规则: A.标识符可以由…

docker-compose部署单点apm链路追踪

一.docker-compose 安装下载 1、登入 GitHub ,找到对应版本 curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose2、将下载后的文件放到 /usr/local/bin 目录下,并…

客服部2023年中总结|用心服务,稳步提升用户体验

一、人工智能相辅相成:提升服务效能 2023年上半年,CSDN人工客服处理客诉总量为26859条,同比去年客诉量38695,下降30.59%;问题解决效率为72min,同比下降19%。 客诉量TOP5: 付费专栏质量问题退费博文审核未…

一文吃透低代码平台的衍生历程、优势及未来趋势

一、低代码概念 低代码开发平台是一种无需编码或者只需要少量代码即可快速生成应用程序的开发平台,通过可视化进行应用程序开发的方法,让不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程…

Unity3D:场景可见性

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 场景可见性 Unity 的场景可见性控件可用于在 Scene 视图中快速隐藏和显示游戏对象,而无需更改它们在游戏中的可见性。 这可用于处理难以查看和选择特定游戏对象的大型或…

Pytorch中的数据操作和预处理

Pytorch中的数据操作和预处理 整体概述 在Pytorch中的torch.util.data模块包含着一些常用的数据预处理的操作,主要用于数据的读取、切分、准备等 常用的数据操作类如下表所示 类功能torch.utils.data.TensorDataset()将数据处理为张量torch.utils.data. ConcatDat…