第4章 SSD核心技术:FTL 4.3-4.5

news2024/11/16 9:41:25

4.3 垃圾回收

4.3.1 垃圾回收原理

      WA(Write Amplification),即写放大。

      OP(Over Provisioning),即预留空间。

4.3.2 写放大

 

        对于空盘来说(未触发GC),写放大一般为1,即用户写入多少数据,SSD写入闪存也是多少数据。

       GC触发后,WA怎么算?以下面的Block为例,深色的是垃圾数据,浅色的是有效数据,

 一共36个方块,其中有12个有效数据块,做完垃圾回收后,需把这12个有效数据块写回,如下,

 

        

        增大OP为何能减小写放大?

        OP比例 = (闪存空间 - 用户空间)/(用户空间)。

        SSD容量 = 主机端看到的SSD大小,即用户空间。

        闪存空间 = SSD容量 + OP空间。

 

       影响写放大的因素主要有:

        (1)OP:OP越大,写放大越小;

        (2)用户写入的数据Pattern:顺序写,GC做的量就少,写放大就小;

        (3)GC策略:挑选有效数据最少(垃圾数据最多)的Block,写放大就小;

        (4)磨损均衡:为平衡每个Block的擦除次数,需要数据的搬移,写放大就大;

        (5)读干扰和数据保持:数据搬移增加写放大;

        (6)主控:带压缩和不带压缩的控制器会影响写放大;

        (7)Trim:有没有Trim,对写放大影响很大。

4.3.3 垃圾回收实现

   1. 步骤

      (1)挑选源Block;

      (2)从源Block中找到有效数据;

      (3)把有效数据写入到目标Block。

  详细步骤如下:

     (1)挑选源Block。

          一般常见的算法是挑选有效数据最小的Block,这样需要重写的有效数据越少,写放大页越小。这种BPA算法叫做Greedy算法,是绝大多数SSD采用的一种策略。

    (2)把数据从源Block读出来。怎么读才最有效率?有以下三种方法

        1)方法一

         固件FW在往一个Block上写入逻辑页时,会更新和维护闪存块的有效数据量,因此可以快速挑选中源闪存块。

         该方法的缺点:固件开销大。

         2)方法二

         如果没有每个闪存块的有效数据Bitmap,FW做GC时,可以选择把所有数据都上来。那,这些数据中,哪些是有效数据(需要重写的)呢?

 

         该方法的缺点:GC做的慢。

        3)方法三         

 

     (3)重写。即把读出来的有效数据写入闪存。

4.3.4 垃圾回收时机

     有两种:前台垃圾回收和后台垃圾回收。均是由SSD自己内部控制的

  1. 前台垃圾回收Foreground GC

        当用户写入数据时,可用的Block小于一定的阈值,此时需要做GC,以腾出空间给用户写。

        被动的做GC

  2. 后台垃圾回收BackGround GC

        在SSD空闲(Idle)时,SSD主动去做的GC。

4.4 Trim

 

         Trim是一个新增的ATA命令(Data Set Management)。当用户删除一个文件时,操作系统会发trim命令给SSD,使SSD知晓这些数据已无效,可以被回收掉,从而避免了无谓的数据搬移。

       

4.5 磨损平衡Wear Leveling

  1. 含义:磨损平衡,就是让SSD中的每个Block的磨损(擦除)都保持均衡。

  2. 需要磨损平衡的原因:闪存是有寿命的,即擦写次数有限。

  3. 如何实现磨损平衡的?

     冷数据(Cold Data):用户不经常更新的数据;

     热数据(Hot Data):用户频繁更新的数据;

     年老的(Old):擦写次数(EC,Erase Count)比较多的Block;

     年轻的(Young):擦写次数比较少的Block。

4. 磨损平衡算法

     有动态磨损平衡(Dynamic WL)和静态磨损平衡(Static WL)两种。

     动态磨损平衡:把热数据写到年轻的Block上;

     静态磨损平衡:把冷数据写到年老的Block上。

 

      为什么冷热数据混在一起不好呢?冷热数据混合在一起,那么冷数据就可能经常需要被搬移到另一个Block上,会引入额外的写,导致写放大增大。

     如何解决该问题呢?做静态磨损平衡的时候采用专门的Block存放冷数据。

        

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

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

相关文章

基于DarkFace数据集的高精度人脸检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于DarkFace数据集的高精度人脸检测系统可用于日常生活中来检测与定位人脸目标,利用深度学习算法可实现图片、视频、摄像头等方式的人脸目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练…

volatile 原理

volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence) 对 volatile 变量的写指令后会加入写屏障对 volatile 变量的读指令前会加入读屏障 如何保证可见性 写屏障(sfence)保证在该屏障之前的&#xff0c…

液晶仪表业务去年赚了4个亿,又一家汽车电子厂商冲刺IPO

液晶仪表,有多赚钱? 本周,随着天有为电子首次对外发布IPO招股说明书,这家专注于电子式组合仪表、全液晶组合仪表和双联屏仪表等产品的传统汽车仪表企业,揭开了过去几年的财务数据。 作为一家传统汽车仪表转型升级的典…

sqlserver导入外部数据文件

1、外部数据文件存为txt格式,可以带中文标题保存。 2、登录链接数据库服务器,选择任意一个数据库右键-任务-导入数据-数据源:选择Flat File Sourse 平面文件.-文件名:选择文件路径-浏览一下列是否对应上。-下一步-目标&#xff1a…

WebStorm配置代码模板【以vue模板为例,提供vue代码模板】

配置过程 引言 为了便于开发,提高生产效率,我们通常会复制粘贴一些共同代码,在WebStorm中,可以将这些共同代码制作成模板,在使用的时候,只需要输入关键字点击按键即可将模板的代码粘贴到代码文件中&#…

免费申域名

申请地址:https://nic.eu.org/ 英国人地址生成器:https://www.shenfendaquan.com/Index/index/ying_guo_shen_fen_sheng_cheng 1、注册 填写注册信息 进入注册页面,输入注册信息。这里我们打开英国人地址生成器,用英国的信息注…

数据库应用:MySQL数据库使用与管理

目录 一、理论 1.MySQL基本操作 2.数据类型 2.使用MySQL数据库 二、实验 1.查看数据库结构 2.创建及删除库和表 3.管理表中的数据记录 4.修改表名和表结构 5.查看、修改字符集 三、问题 1.表导入新记录报错 四、总结 一、理论 1.MySQL基本操作 (1&…

【sql注入-延时注入】sleep()、benchmark()函数 延时注入

目录 sleep()、benchmark()延时注入 一、语法介绍: 二、延时注入 三、不同数据库 网络安全小圈子 sleep()、benchmark()延时注入 一、语法介绍: 版本: sleep() MySQL>5.7.8 benchmark() MySQL>5.7.5 语法: 使用…

孤立随机森林(Isolation Forest)(Python实现)

目录 1 简介 2 孤立随机森林算法 2.1 算法概述 2.2 原理介绍 2.3 算法步骤 3 参数讲解 4 Python代码实现 5 结果 1 简介 孤立森林(isolation Forest)是一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点&…

Linux5.95 ELK企业级日志分析系统

文章目录 计算机系统5G云计算第四章 LINUX ELK 企业级日志分析系统一、ELK 概述1.ELK 简介1)ElasticSearch2)Kiabana3)Logstash4)可以添加的其它组件:Filebeat5)缓存/消息队列(redis、kafka、Ra…

Ubuntu 18.04 下 uhd+gnuradio 安装指南,国产B210

安装ubutnu18.04,换源,apt-get update 一、虚拟机设置以及安装low-latency内核 给虚拟机分配尽可能多的cpu及内存。在USB控制器选项中,将USB兼容性设置为USB 3.1。 USRP B210需要用USB线连接到电脑的USB 3.0/3.1接口上,实现供电…

Melon库运用——栈篇

头文件片段 // mln_stack.htypedef struct mln_stack_node_s {void *data;struct mln_stack_node_s *prev;struct mln_stack_node_s *next; } mln_stack_node_t;typedef struct {mln_stack_node_t *bottom;mln_stack_node_t *top;mln_stac…

喜讯|电巢科技与陕西理工大学“新工科人才联合培养基地”签约暨揭牌仪式成功举行

7月6日上午,深圳市电巢科技有限公司联合陕西理工大学物理与电信工程学院在校内举行产学研座谈会,并完成了“新工科人才联合培养基地”的签约暨揭牌仪式。陕西理工大学物电学院党委书记韩强,院长卢超,副书记潘峰,副院长…

吸烟(抽烟)检测和识别2:Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码)

吸烟(抽烟)检测和识别2:Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码) 目录 吸烟(抽烟)检测和识别2:Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码) 1.吸烟(抽烟)检测和识别 2.吸烟(抽烟)数据集 (1&am…

msvcp120.dll丢失的解决方法?哪种方法更推荐

msvcp120.dll是一个Windows操作系统的动态链接库文件。它属于Microsoft Visual C Redistributable软件包的一部分。这个文件包含了一些用于C程序编译和运行的函数和类。当某个程序需要使用这些函数和类时,它会在系统中寻找msvcp120.dll文件。如果系统中缺少这个文件…

运行别人gitub上的vue代码

1.删除package-lock.json和node_modules文件 package-lock.json记录了整个node_moudles文件夹的树状结构,还记录了模块的下载地址,但是它是基于项目作者的npm版本库生成的,若不删掉这个依赖文件,容易出现npm版本差异导致的报错。…

性能测试测什么?如何做性能测试?超级详细总结

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试 负载&a…

深入理解Dockerfile:构建镜像的详细解释与常用命令

目录 1.Dockerfile 简介 2.Dockerfile 指令解析 2.1 FROM 2.2 RUN 2.3 COPY 2.4 ADD 2.5 CMD 2.6 ENTRYPOINT 2.7 ENV 2.8 ARG 2.9 EXPOSE 2.10 WORKDIR 2.11 VOLUME 2.12 USER 3.构建 Docker 镜像的常用命令 3.1 docker build 3.2 docker tag 3.3 docker pu…

银河麒麟V10使用编译安装PostSQL+PostGIS

一、安装环境 银河麒麟V10 1、PostGIS简介 PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能: 空间对象、空间索引、空间操作函数和空间操作符。同时,PostGIS遵循OpenGIS的规范。 二、使用make安装Post…

Day49

思维导图 练习 闹钟设计 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QPushButton> #include <QLabel> #include <QLineEdit> #include <QTextEdit> #include <QTimer> …