FTL-- GC 垃圾回收

引入概念:

OP :独立于用户看的见的容量之外的容量,可以看作是隐藏的容量
WA:写放大,也就是用户写入一笔数据对NAND来说需要写入更多,造成写放大

OP作用:

多出来的空间一般用于存储一些固件的L2P表,更换坏块,GC时零时调用出来做数据搬移等等。OP对于整个SSD的寿命以及随机写性能以及写放大是有帮助的
简单说,OP越大,寿命越长,写性能越强,写放大越小
比如我们一块NAND实际容量256G的SSD,在Host端下识别为240GB,其中16GB就是OP。
OP比例 = (闪存空间-用户空间)/ 用户空间

GC作用:

数据更新的时候,由于闪存不可覆写,所以需要擦掉旧数据写入新数据
假如我们一个Block是一个9宫格,其中三个是无用数据,6个是有用数据,假如我们一直不做处理,当数据越来越多,达到SSD的存储上限,可能会发现,原本240G的硬盘只能存储不到240G的文件,我删除文件并没有让原本占用的空间释放出来
所以,为了避免这样的状况就需要及时整理我们的Block,把里面不需要的垃圾数据清除出去,于是乎,我们需要把有用的数据读出来,然后擦除掉整个Block,再把有用的数据写进去。

WA

垃圾回收就会造成写放大,相当于我们写入一笔数据,但实际NAND为了腾出这笔数据的存放空间,自己做了GC,需要把其他有用资料读出来,再一起写进去。所以对于SSD来说,实际写入的资料要大于Host传过来需要保存的资料量的
于是得到公式:
WA = NAND写入量/Host 写入量

然后引入一个 有效数据计数的概念
上文提到GC是清除掉block上的不需要的数据,那么如何得知这个Block上多少数据是需要的,多少数据是无效的,挑选那些Blcok做GC可以更高效呢?这就需要用到 有效数据计数 ,类似会把每个Block上有效的page计数,这样做GC时优先选择有效数据低的block进行操作.
所以FTL上还有另外两张表,
VPBM(Valid Page Bit Map) 记录物理块上那个page上的数据是有效数据
VPC(Valid Page count)记录物理块上的有效Page数

另一个是如何得知这些数据是无效数据了呢?
引入另一个概念trim
我们在Host端删除文件的时候,系统同时也会下发命令告知SSD,这个我不再需要了,于是乎SSD会把这些资料标注起来,凡是打上标签的都是不需要的资料,后续SSD可以进行处理

理论上,主动下发trim命令后,对Host而言,在重新读这个位置,SSD应该要回复空数据

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

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

相关文章

JPA 方式实现 RESTful API

除了常见的方式实现 RESTful API,还有一种简单的方式实现 RESTful API,那就是用 JPA 方式。首先介绍一下 JPA,它是 Sun 公司推荐的 JAVA 持久化规范,为了简化 ORM 技术而产生。需要注意的是,他只是一套规范&#xff0c…

HarmonyOS4.0系列——02、汉化插件、声明式开发范式ArkTS和类web开发范式

编辑器调整 我们在每次退出编辑器后再次打开会直接进入项目文件中,这样在新建项目用起来很是不方便,所以这里跟着设置一下就好 这样下次进入就不会直接跳转到当时的文件项目中!! 关于汉化 settings → plugins → installe…

什么是 Jest ? Vue2 如何使用 Jest 进行单元测试?Vue2 使用 Jest 开发单元测试实例

什么是Jest? Jest 是一个流行的 JavaScript 测试框架,由 Facebook 开发并维护,专注于简单性和速度。它通常用于编写 JavaScript 和 TypeScript 应用程序的单元测试、集成测试和端到端测试。 特点: 简单易用: Jest 提供简洁的 API 和易于理解的语法,使得编写测试用例变得…

【数据结构】什么是队列?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌队列的定义 📌队列的抽象数据类型 📌队列的顺序存储结构 📌队列的链式存储结构 结语 人生,是一个又一个小小的队列…

探索网络模型与协议:从OSI到HTTPs的原理解析

一、OSI网络模型 OSI(Open Systems Interconnection)七层网络参考模型和TCP/IP四层模型都是用于理解和设计计算机网络的框架,但它们之间存在一些差异。 1、七层 vs 四层 OSI七层网络参考模型: 物理层(Physical Laye…

人力资源管理后台 === 权限应用

目录 1.权限应用-拆分静态路由-动态路由 2.权限应用-根据用户权限添加动态路由 3.权限应用-根据权限显示左侧菜单 4.权限应用-退出登录重置路由 5.权限应用-功能权限-按钮权限标识 6.权限应用-自定义指令应用功能权限 7.其他模块-集成 8.首页-基本结构和数字滚动 9.首页…

17.找出1000之内的所有完数。

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为循环结构编程题,点滴成长,一起逆袭。 一、题目描述 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,⑥的因子为1、2、3,而…

python 如何调用GPT系列的api接口,实现想要的功能

目录 问题描述: 问题解决: 问题描述: 随着各种LLMs (Large Language Models)的出现,如何调用各种LLMs的api成为了经常会遇见的问题。 问题解决: 下面仅以生成给定sentence的复述句为例,说明…

vue3+ts mitt的使用

安装mitt :npm i mitt -Smain.ts: import mitt from mittconst Mit mitt();declare module vue {export interface ComponentCustomProperties{$Bus:typeof Mit} } app.config.globalProperties.$BusMit在A组件中使用 <template><div><h1>我是A<…

【深度学习】如何找到最优学习率

经过了大量炼丹的同学都知道&#xff0c;超参数是一个非常玄乎的东西&#xff0c;比如batch size&#xff0c;学习率等&#xff0c;这些东西的设定并没有什么规律和原因&#xff0c;论文中设定的超参数一般都是靠经验决定的。但是超参数往往又特别重要&#xff0c;比如学习率&a…

建造者模式-C语言实现

UML类图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…

论文种使用的数据集怎么获取

1.根据论文中的描述&#xff0c;可能会提及数据集已上传至某个网站&#xff01; 最常见的 1.GitHub 2.paper with code 3.期刊官网找到这篇论文&#xff0c;看是否存在补充材料&#xff01; 4.论文中提到&#xff0c;若读者需要&#xff0c;可邮件联系XXX(某位作者或任意作者)…

RabbitMQ之延迟消息实战

RabbitMQ之延迟消息实战 使用死信交换机实现延迟消息 使用死信交换机的过期时间以及没有消费者进行消费&#xff0c;时间到了就会到死信队列中&#xff0c;由此可以实现延迟消息使用延迟消息插件 前提&#xff1a;需要mq配置插件 延时信息案例实战 把一个30分钟的延迟消息可以…

前端review

关于实时预览vs code中的颜色代码需要安装的插件&#xff0c;包括html文件格式中的颜色代码安装Flutter Color插件 VSCode 前端常用插件集合 1.Auto Close Tag自动闭合HTML/XML标签 2.Auto Rename Tag自动完成另一侧标签的同步修改 3.Beautify格式化代码&#xff0c;值得注…

【高可用架构】Haproxy 和 Keepalived 的区别

Haproxy 和 Keepalived 的区别 1.负载均衡器介绍2.Haproxy 和 Keepalived 的基本概念和特点2.1 Haproxy2.2 Keepalived 3.Haproxy 和 Keepalived 的区别3.1 功能上的区别3.2 架构上的区别3.3 配置上的区别 4.总结 1.负载均衡器介绍 负载均衡器是一种解决高并发和高可用的常用的…

每日OJ题_算法_双指针⑥剑指 Offer 57. 和为s的两个数字

目录 剑指 Offer 57. 和为s的两个数字 解析代码&#xff1a; 剑指 Offer 57. 和为s的两个数字 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 难度 简单 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总…

蓝桥杯官网练习题(平均)

问题描述 有一个长度为 n 的数组&#xff08; n 是 10 的倍数&#xff09;&#xff0c;每个数 ai 都是区间 [0,9] 中的整数。小明发现数组里每种数出现的次数不太平均&#xff0c;而更改第 i 个数的代价为 bi&#xff0c;他想更改若干个数的值使得这 10 种数出现的次数相等…

【开源】基于Vue和SpringBoot的农家乐订餐系统

项目编号&#xff1a; S 043 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S043&#xff0c;文末获取源码。} 项目编号&#xff1a;S043&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核…

C/C++内存管理,malloc,realloc,calloc,new,delete详解!!!

1.初步了解内存中各个区间存储的数据特征 1.栈区&#xff1a;存储一些局部变量、函数参数、返回值等&#xff0c;跟函数栈振有关&#xff0c;出了作用域&#xff0c;生命周期结束。 2.堆区&#xff1a;用于动态开辟空间&#xff0c;如果不主动销毁空间&#xff0c;则程序运行结…

302. 任务安排3,斜率优化dp,一般情况

有 N 个任务排成一个序列在一台机器上等待执行&#xff0c;它们的顺序不得改变。 机器会把这 N 个任务分成若干批&#xff0c;每一批包含连续的若干个任务。 从时刻 0 开始&#xff0c;任务被分批加工&#xff0c;执行第 i 个任务所需的时间是 Ti。 另外&#xff0c;在每批任…