谁偷走了我的存储容量?预留空间OP参上!

news2024/11/20 15:24:14

大家好,我是五月。

前言

不知道你有没有发现,每当买回来一块U盘,插入电脑发现永远比所标的容量小。

到底是谁偷走了我的容量?

真凶就是预留空间(Over Provisioning),简称OP。

预留空间OP是什么

了解内存开发的都会知道,一块Flash中能用的空间并不会全部用来做用户空间。

还有一部分空间会被用来做预留空间,用以做一些中间搬运的操作。

所谓用户空间,就是内存容量,也就是主机端能看到的存储容量。 预留空间,用户是看不到的,属于FTL层,用来做一些中间写操作。

我们假设一个Flash只有一个通道,那么肯定就只有一个Die,该Die有5个Block块(Block0~Block4),每个Block中有9个小方块,代表着9个page(后面说的Flash,也是用的这个假设容量)。

其中有多少用作预留空间是固件决定的事情,属于FTL层。

我们假设固件设置这Flash的前4Block为用户容量,那么另外1个Block就是用户容量之外的预留空间。

​预留空间的种类

  • 本征预留空间OP1

  • 标称预留空间OP2

本征预留空间

市场上SSD标称的容量1K是按照1000来计算的,但是NAND闪存的容量中1K是按照1024计算的。

假设现在买到手一个1G的U盘,我们简单列个式子计算一下:

市场SSD标称: 1GB = 1000MB = 10001000KB = 10001000*1000Byte = 10^9Byte(1,000,000,000Byte)。

NAND闪存: 1GB = 1024MB = 10241024KB = 10241024*1024Byte =2^30Byte(1,073,741,824Byte)。

这两个计算方式之间正好相差7.37%。所以说该U盘的本征预留空间就有7.37%。

标称预留空间

标称OP是由于固件需要提升性能要求而故意预留出来的空间,大小由FTL来决定。

这个部分预留空间主要用于垃圾回收GC,暂存有效数据。

标称预留空间OP=(Flash总容量-用户空间)/用户空间。

预留空间的用途

  • 更新数据

  • 提供额外的空间暂存有效数据,为垃圾回收做准备

更新数据

假设往不断地往Flash中写数据,忽然某些逻辑地址的数据用户不想要了,想要更新新的数据进入。

由于Flash的特性是不能覆盖写的,写之前还必须进行整个Block的擦除。

为了避免擦除掉Block中有用的数据,用户更新数据,固件只能另外找空间写入新的数据,那原来的地址中数据就没用了,成立垃圾。

而这个另外找的空间,一般找的就是预留空间。

同时假设用户要在Block0上更新新数据,地址为Page0,数据量为1page时,固件会把新写入的page数据写到预留空间中。

这时候,预留空间Block4的page0就是Block0的page0的有效数据了。

而Block0中原来的page0的数据也就失效了,过期了,变成垃圾了。

随着更新的数据越来越多,垃圾数据也就越来越多了。

提供额外的空间暂存有效数据,为垃圾回收做准备

随着数据不断写入,用户空间被不断填充,直到整个盘被写满了。

从主机端看也就是整个用户空间被写满了,但是由于预留空间的存在,其实整个Flash并没有被写满。

但是按着这么写下去,总有一天用户空间被写满,预留空间也会被写满。

这时候如果还想写入更多呢?

没办法,只能将不想要的垃圾数据删除掉,腾出空间来,也就是做垃圾回收。

实际中不会等到所有的内存空间都写满了才做垃圾回收,而是在写满之前就在做回收了。

为了避免擦除Block的时候将其中的某些有效数据被删掉了,会先将Block上的有效数据读出来,写到一个新的Block上。

如下图,假设Block 0的有效数据为A、B、C,Block 1的有效数据为D、E、F;

垃圾回收就是找一个新的Block 4,将Block 0和Block 1的有效数据搬移到Block 4上。

这样Block 0和Block 0上就没有任何有效数据了.

​Blcok 0和Block 1可以随时擦除,变成两个可用的Block块。

​当然也有些厂商的FTL方案中,这个新的Block不一定从预留空间中找,也会在用户空间中找。

​需要注意的是,在做完垃圾回收之后,需要把有效数据写回新擦除的Block中,这些Block剩下的空间,就能继续写入新的数据了。

预留空间的好处

牺牲了那么多本该数据用户空间的容量来做预留空间,自然是有好处的。

  • 提高写入性能

由于有预留空间的存在,写入数据时并不需要经常做垃圾回收,加快了写入速度。

  • 降低写放大WA

写放大的计算方法:WA = 写入闪存的数据量/用户写入的数据量

OP越大,写入Flash的有效数据就越少,WA自然就降低了。

  • 增加闪存使用寿命

OP越大,可供的额外空间越多,就不用只盯着那几个Block去做擦读写,减少了某些Block频繁的擦读写次数和数据搬迁,增加使用寿命。

  • 数据保护主要提供ECC之外的数据保护

这个几乎很少用到,这里就不讨论这个了。

写在最后

我记得曾经有人说过,思想和行动的区别在于:

想谈恋爱却高呼自由可贵,想进大厂却不想工作,想当大牛却不想学习,每个人都知道明天必须披荆斩棘的活下去,却依旧浑浑噩噩的度过今天。

不用去怀疑自己的能力,你只需要一份靠谱的学习资料,一个学习的deadline以及一个没学完就打爆你狗头的人,很快你就会被自己的才华和能力所惊艳。

我收集了一些linux的资料,算法小抄和计算机基础的资料。

以下资料仅供个人学习使用,欢迎大家一起学习探讨。

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

希望以上内容能帮助到你,祝各位生活愉快。

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

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

相关文章

DSP,国产C2000,数字电源,电机专用,国产经典之作,新品上市

1、替代TI 的 TMS320F280049 2、独立双核,主频400MHz 3、单精度浮点运算,三角函数运算 4、Flash 1MB,SRAM 1MB 5、12bit ADC,采样率 3.45MSPS 6、16个高分辨率 ePWM 优点: 1、主频400MHz,运算能力强 2、独…

攻防世界-ext3

原题 解题思路 下载下来的文件解压就可以看到非常多的文件夹,直接搜索flag 明显用base64加密了:解码工具

Lazada为什么成为卖家新宠?趋势如何?

其实跨境销售是网络发达以来,很多国内的商家都在突破的点。只有真正打开自己的市场,这样才可以让销售能够直线上升。如果永远在国内进行销售,那么不仅仅会增加难度,并且也很有可能无法打开自己的销售思路,导致最终在时代的潮流中没落。那么如果想要进行跨境销售,渠道就是相当重…

交叉编译liblzma:64位版本

xmlIO.c:40:10: 致命错误&#xff1a; lzma.h&#xff1a;没有那个文件或目录40 | #include <lzma.h>在交叉编译libxml时&#xff0c;报错 为解决这个问题&#xff0c;编译liblzma 网址https://tukaani.org/xz/ 解压&#xff1a; tar jxvf xz-5.2.12.tar.bz2执行&#…

Java基础之IO流File类创建及删除

1.File类概述及构造方法 2.File类创建功能 文件创建成功&#xff01; 如果文件不存在&#xff0c;就创建文件&#xff0c;并返回true 如果文件存在&#xff0c;就不创建文件&#xff0c;并返回false 如果文件夹不存在&#xff0c;就创建文件夹&#xff0c;并返回true 如果文件…

树莓派3B安装64位操作系统

树莓派3B安装Ubuntu MATE_树莓派3b 安装ubuntu_雨田大大的博客-CSDN博客https://blog.csdn.net/lsjackson13/article/details/92423694?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-92423694-blog-80716098.235%5Ev38%5Ep…

电路学习+硬件每日学习十个知识点(40)23.8.20 (希腊字母读音,阶跃信号和冲激信号的关系式,信号的波形变换,信号的基本运算,卷积积分,卷积和)

文章目录 1.信号具有时间特性和频率特性。2.模拟转数字&#xff0c;抽样、量化、编码3.阶跃信号和冲激信号4.信号的波形变换&#xff08;时移、折叠、尺度变换&#xff09;5.信号的基本运算&#xff08;加减、相乘、微分与积分、差分与累加&#xff09;5.1 相加减5.2 相乘5.3 微…

Gowin FPGA工程modelsim功能仿真和时序仿真

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Gowin FPGA工程的modelsim功能仿真和时序仿真 前言功能仿真时序仿真&#xff08;后仿真&#xff09; 前言 下面记录一下modelsim功能仿真和时序仿真的操作步骤&#xff0c;学…

持续集成与持续交付:现代软件测试的变革之路

引言 在数字化时代&#xff0c;软件开发的速度和复杂性都在不断增加。为了满足市场的需求&#xff0c;企业需要更快、更高效地交付高质量的软件产品。在这样的背景下&#xff0c;持续集成与持续交付&#xff08;CI/CD&#xff09;成为了软件开发和测试的核心实践。 软件开发的…

Android 之 Vibrator (振动器)

本节引言&#xff1a; 本节我们介绍的是Vibrator(振动器)&#xff0c;是手机自带的振动器&#xff0c;别去百度直接搜针振动器&#xff0c;因为 你的搜索结果可能是如图所示的神秘的道具&#xff0c;或者其他神秘道具&#xff1a; 嗯&#xff0c;说回本节介绍的Vibrator&#…

电路学习+硬件每日学习十个知识点(39)23.8.19 (电路模型,电感,电容)

文章目录 1.电力线路和通信线路2.实际电路的元器件3.集总参数元件&#xff08;类似于物理的质点&#xff09;4.电子电路习惯画法5.电感元件6.电容元件 1.电力线路和通信线路 电路的基本功能可分为两大类&#xff1a;一类电路进行能量的传输、分配和转换&#xff0c;如电力线路…

jdk生成jre供javaFx使用

文章目录 前言一、Jdk二、使用步骤1.进入到jdk目录下2.地址栏输入cmd3.执行生成命令4.注意 总结 前言 JavaFx开发桌面程序&#xff0c;发布给其它人时候需要附带jre 一、Jdk 自备jdk8、jdk11、jdk17等等 二、使用步骤 1.进入到jdk目录下 2.地址栏输入cmd 3.执行生成命令 b…

Error: Flash Download failed - “Cortex-M7“

选择对应FLM文件加上即可。 具体可参考&#xff1a; https://www.sunev.cn/embedded/669.html https://zhuanlan.zhihu.com/p/487664063

【Git】学习总结

【Git】学习总结 【一】安装【二】Git克隆项目代码【1】idea下载git项目【2】创建新的分支【3】新建的分支推送到远程【4】合并最新代码到主分支【5】切换分支 【三】提交本地项目到远程&#x1f680;1. 配置 Git&#x1f680;2. 创建项目远程仓库&#x1f680;3. 初始化本地仓…

江西萍乡能源石油化工阀门三维扫描3d测量抄数建模-CASAIM中科广电

长期以来&#xff0c;石油天然气、石油石化、发电和管道输送行业在环保、健康和安全保障方面一直承受着巨大的压力&#xff0c;他们必须确保相关规程在各项作业中得到全面贯彻。 阀门作为流体管道运输中的组成部分&#xff0c;其装配密封度是保证流体运输安全的重要一环&#…

将AI融入CG特效工作流;对谈Dify创始人张路宇;关于Llama 2的一切资源;普林斯顿LLM高阶课程;LLM当前的10大挑战 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 将AI融入CG特效工作流&#xff0c;体验极致的效率提升 BV1pP411r7HY 这是 B站UP主 特效小哥studio 和 拓星研究所 联合投稿的一个AI特…

分布式锁系列之zookeeper分布式锁和mysql分布式锁

目录 介绍 下载安装 基本指令​编辑 java集成zookeeper 官方提供版 永久节点 临时节点​编辑 永久序列化节点 判断当前节点是否存在 获取当前节点中的数据内容 获取当前节点的子节点 更新节点内容 删除节点 zookeeper实现分布式锁 Mysql实现分布式锁 总结 介绍 ZooK…

关于stm32推挽带有上下拉电阻的思考、IO口驱动能力是什么

1、发现推挽带有上下拉电阻 1.1、stm32手册 记忆中推挽是不需要上下拉的&#xff0c;没关注过&#xff0c;但是我真的理解上下拉吗&#xff0c;下图来自stm32f4的中文版和英文版的数据手册&#xff0c;没有翻译错&#xff0c;就是“推挽带有上下拉的能力”。 1.2、查找相关信…

tomcat8的安装和部署启动jpress应用

首先准备tomcat&#xff0c;jdk&#xff0c;jpress安装包 一. tomcat8的安装 1. 使用xftp等工具将软件包上传至Linux 2. 将jdk移至/usr/local/tomcat并安装jdk mv jdk-8u261-linux-x64.rpm /usr/local/tomcat yum localinstall jdk-8u261-linux-x64.rpm -y 3. 将tomca…

【PHP】数据类型运算符位运算

文章目录 数据类型简单&#xff08;基本&#xff09;数据类型&#xff1a;4个小类复合数据类型&#xff1a;2个小类特殊数据类型&#xff1a;2个小类类型转换类型判断整数类型浮点类型布尔类型 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自…