FTL潜规则:调优,才是算法精华

news2024/7/6 18:01:17

前言

在存储领域中有一个FTL的概念,这是一种Flash的内存管理算法,属于各个厂商的核心机密,每个厂商的处理方式不同,有的处理简单,有的处理复杂。

FTL,即Flash Translations layer,也就是闪存转 换层,可以完成从逻辑地址到物理地址的转换,简称为映射。

为什么需要FTL

因为Flash的质量参差不齐,里面坏掉的区域是完成不能使用的。

Host发送命令下来,要求把一段数据存放在A地址中,此时A就是逻辑地址,而好死不死,Flash中的A地址刚好是坏块,那怎么办?

此时B地址是好的,FTL就将数据存放在B地址中,此时B丢置就是物理地址了,同时将A逻辑地址——B物理地址记录下来,这一段记录就是映射关系了。

下一次,当主机需要读取A逻辑地址的数据时,FTL就会将B物理地址的数据读取出来返回给主机。

FTL的位置

先了解几个名词

UCL

USB Control layer,USB控制层,主要用于解析从Host发送下来的USB命令。

FTL

Flash Translation layer,Flash转换层,主要用于将逻辑地址转换成物理地址。

FCL

Flash Control layer,Flash控制层,主要用于将经过映射处理后的地址解析成flash指令发送给Flash。

UCL、FTL、FCL所处的位置

FTL遵循的规则

FTL这种内存管理算法,自然是遵循着着Flash特性,一切都是在Flash特性下才能运行起来的。

  • 写数据以page为最小单位
  • 写入的数据必须打乱存储才会稳定
  • 写满整个Block数据才会稳定
  • 擦除以Block为最小单位,一般不轻易做整块擦除

当然也有其他特性,但是Flash由于批次不同,制造工艺和厂商不同,出厂的flash也各有一些差异性的特性,这些,就实际问题实际分析。

FTL中各种调优

不同的厂商,FTl的方案各不相同,除了逻辑地址和物理地址的映射作用外,一个好的FTL还具备以下的调优:

映射颗粒度

逻辑地址和物理地址之间的映射方式有两种:块映射和页映射。

使用块映射,逻辑块映射到物理块,看起来挺好的,但是如果遇到操作page的情况,比如说要修改刚写满的某个Block中的某一个page,往往需要做整块擦除,大大降低了效率。

使用页映射,虽然弥补了上面的问题,但是每一页都做映射的话,页的数量一多,映射页多,要知道存储映射关系也是要消耗内存的。页映射需要消耗很大的空间。

所以市面上的做法大多数采用:块映射+页映射,简称混合映射,既可以满足存储需求,还能做到以page颗粒进行维护。

映射表存储

映射表是可以随时变化的,也是随时都要用到的,一般用的时候在RAM中使用,不用的时候就需要存储起来,一般都是用一些空闲块存储起来,这些空闲块不存数据,只放映射表。

merge处理

存储领域,少不了数据搬运这一块,一般来说,merge和GC是一起工作的。

GC回收

现在无论什么都会涉及一些垃圾回收,内存永远是一个好的算法需要考量的点。

垃圾回收需要选好时机,谁都不希望一个存储设备,会在没有能用的内存后才开始做GC回收,这就像开启了一段完全看不到进度的卡顿一样。

好的固件往往未雨绸缪,在不知不觉下做好了GC回收的工作。

寿命均衡

逻辑地址和物理地址的映射本身会对寿命均衡产生正面影响

就刚才讲到的,映射表可以被随时修改,那么逻辑地址对应的物理地址也就被修改了,一些物理Block经常被擦写,往往会加速损坏。

我们可以通过修改逻辑块,让每次物理块不同而避免经常擦写相同的物理块,这本身就保证不会有物理块被经常擦写。

但是有一种情况它没有办法处理,即闲置的数据块,它们被写入后没有更改,就一直占据某些物理块,而这些物理块寿命还很长,而别的块却在飞速损耗中。

面对这种情况,我们只有在合适的时机帮它们换个位置了,如何选择这个时机很重要,而且这个merge搬运动作本身也会损耗寿命本身。

以上这些策略也是各个FTL算法的精华了。

我收集了一些linux的资料、算法小抄和计算机基础的资料,仅供个人学习使用,欢迎大家一起学习探讨。

linux保姆级教程完整版文档资料

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

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

相关文章

wayland浅析之EGL、Opengles、GBM

本文针对不同的compositor,浅析eglopenglesgbm搭配使用情况; 文章目录 1. 前言1.1 问题一:是不是调用eglSwapBuffers函数以后图像就直接显示到屏幕上了?1.2 问题二:EGL基本使用流程,EGL搭配GBM上屏显示基本…

JavaSE06_面向对象之封装

JavaSE-06 [面向对象OOP 封装] 第一章 面向对象思想 1.1 面向过程和面向对象 面向过程: 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了面向对象: 面向对象是…

Servlet、JSP

一、web服务器 1.1 常用服务器产品 Tomcat(Apache开源,主流的web服务器之一,多用于javaweb项目开发) jetty(效率高于Tomcat) WebLogic(Oracl 收费) WebSpera(IBM&#xf…

cesium学习之旅1:cesium 基本介绍以及 cesium 的 hello world 程序

一:什么是Cesium Cesium 是一个跨平台、跨浏览器的展示三维地球和地图的 javascript 库。Cesium 使用WebGL 来进行硬件加速图形,使用时不需要任何插件支持,但是浏览器必须支持WebGL。Cesium是基于Apache2.0 许可的开源程序。它可以免费的用于…

代码随想录二刷 day16 | 二叉树之104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

day16 104.二叉树的最大深度559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数 104.二叉树的最大深度 题目链接 解题思路:本题中根节点的高度就是最大深度 二叉树节点的深度: 指从根节点到该节点的最长简单路径边的条数或者节点数&…

TensorFlow项目练手——天气预测

项目介绍 通过以往的天气数据和实际天气温度,做一次回归预测,模型的输入是当前的所有特征值,而模型的输出是当天的实际天气温度 字段分析 目前已有的数据有348条svc数据,他们的字段分别代表 year:年month&#xff…

美客多卖家攻略:养号技巧分享

在跨境电商平台上成功运营并建立起具有竞争力的店铺并不容易。美客多作为一个颇具影响力的平台,更需要卖家们仔细研究和精心运营。在这里,我将分享一些秘诀,这些秘诀是在我自养号过程中总结出来的,有助于增加销量并提升店铺的排名…

高级数据分析师岗位的职责描述

高级数据分析师岗位的职责描述1 职责: 1.搭建和完善数据中心的数据指标体系与监控预测体系,并推动系统化实现; 2.负责对市场、行业、竞争对手、产品、客户、业务运营等方面数据的收集、分析,完成整理出分析报告、提供数据支持、分析建议; 3.对…

AI 写的高考作文,你打几分?

又是一年高考时,高考真的是人生的一件大事,毕业这么多年,每次看到高考相关信息,还是会不由自主的点进来,其中语文的作文是每年大伙津津乐道的话题。 树先生今天就收到了某条小秘书的【邀请函】,邀请参与「…

Elasticsearch:实用指南

我们将更多地讨论使用 Elasticsearch 的最佳实践。这些做法是一般性建议,可以应用于任何用例。 让我们开始吧。 Bulk Requests 批量 API 使得在单个 API 调用中执行许多索引/删除操作成为可能。 这可以大大增加索引速度。 每个子请求都是独立执行的,因此…

Elasticsearch8.6.0安装

Elasticsearch 8.5.0 安装 Elasticsearch 简介Elasticsearch 8.6.0 安装创建网络拉取镜像运行镜像设置密码修改kibana配置绑定ES代码绑定:手动绑定: 配置ik分词器扩展词词典停用词词典 Elasticsearch 简介 Elasticsearch(ES) 是一…

Redis搭建分片集群

一、什么是Redis分片集群 1、概念 Redis分片集群是用于将Redis的数据分布在多个Redis节点上的分布式系统。通过分片集群,可以将数据分成多个部分,并将每个部分存储在不同的节点上,以便实现Redis的高可用性和高性能。 2、Redis分片集群原理…

写字楼里的「连接」智慧,撬起万亿新赛道

【潮汐商业评论/原创】 对于新入职的Cherry来说,在新公司上班的体验也是全新的。 每天上班,尚不熟悉的她可以在互动屏的指导下精准找到目的地。办公室的温度、湿度和空气质量,会随着天气条件和人员的密集程度相应调整。休息时Cherry抬头就能…

nc/netcat使用

目录 一、前言1.netcat是什么2.netcat有什么用 二、netcat的使用1.程序文件2.作为HTTP客户端3.作为HTTP服务端4.文件传输 三、问题与思考四、小结 一、前言 1.netcat是什么 netcat是一个基于命令行的网络调试和开发工具。对于windows和linux操作系统中都有适配的程序包,程序文…

AcWing算法提高课-1.3.13机器分配

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 总公司拥有 M M M 台 相同 的高效设备&#xff0c;准备分给下属的 N N N 个分公司。 各分公司若获得这些设备&#xff0c;可以为…

Linux - 第24节 - Linux高级IO(三)

1.Reactor模式 1.1.Reactor模式的定义 Reactor反应器模式&#xff0c;也叫做分发者模式或通知者模式&#xff0c;是一种将就绪事件派发给对应服务处理程序的事件设计模式。 1.2.Reactor模式的角色构成 Reactor主要由以下五个角色构成&#xff1a; 角色解释Handle&#xff08;句…

LVS-DR负载群集的优势和部署实例(我们都会在各自喜欢的事情里变得可爱)

文章目录 一、DR模式数据包流向分析二、DR模式的特点三、DR模式中需要解决的问题问题1解决方式 问题2解决方式 四、LVS-DR部署实例1.配置NFS共享存储器2.配置节点web服务&#xff08;两台的配置相同&#xff09;3.配置LVS负载调度器 一、DR模式数据包流向分析 1.Client 客户端…

【Hello MySQL】数据库基础

目录 1. 什么是数据库 2. 主流数据库 3. MySQL的基本使用 3.1 MySQL安装 3.2 连接 MySQL 服务器 3.3 退出 MySQL 服务器 3.4 服务器&#xff0c;数据库&#xff0c;表关系 3.5 MySQL的配置 4. MySQL架构 5. SQL分类 6. 存储引擎 6.1 存储引擎 6.2 查看存储引擎 6.3 存储引擎对…

Vue.js 中的 $nextTick 方法是什么?有什么作用?

Vue.js 中的 $nextTick 方法是什么&#xff1f; 在 Vue.js 中&#xff0c;$nextTick 方法是一个非常有用的工具&#xff0c;它可以让我们在下一个 DOM 更新周期之前执行回调函数。这个方法可以用于很多场景&#xff0c;比如在 Vue 实例数据改变之后&#xff0c;立即获取更新后…

肠道重要菌属——Dorea菌,减肥过敏要重视它?

谷禾健康 认识 Dorea菌 Dorea菌属于厚壁菌门毛螺菌科&#xff0c;广泛存在于人体肠道内&#xff0c;谷禾数据显示该菌在人群的检出率超89%。该菌最早也是从人体粪便中分离出来。 “Dorea” 目前没有一个确定的译名&#xff0c;Dorea是以法国微生物学家 Joel Dor 的名字命名&…