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

这篇具有很好参考价值的文章主要介绍了谁偷走了我的存储容量?预留空间OP参上!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是五月。

前言

不知道你有没有发现,每当买回来一块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保姆级教程完整版文档资料

希望以上内容能帮助到你,祝各位生活愉快。文章来源地址https://www.toymoban.com/news/detail-666180.html

到了这里,关于谁偷走了我的存储容量?预留空间OP参上!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java8 Instant 计算方法耗时, 再见了我的System.currentTimeMillis()

    以下是一个 Java Instant 计算方法耗时的示例代码: 在上述示例代码中,我们使用 Instant.now() 方法获取当前时间,并在执行需要计算耗时的方法前后分别获取当前时间,然后使用 Duration.between() 方法计算两个时间点之间的时间差,并将结果输出到控制台。 在示例代码中,我们使

    2023年04月10日
    浏览(40)
  • 耗时3个月,线下访谈30+ csdn大佬,规划出了我的云原生学习路线

    大家好,我是沐风晓月,最近线下拜访不少云原生方向的大佬和csdn其他方向的大佬,受益匪浅。 于是在 5月23日,我定下来自己的目标: 我的目标: 可以说,这个世代给予的机遇,让我们每一个人,即便是草莽出生,也可以通过技术,通过努力获得一些关注和成就。 随着

    2024年02月08日
    浏览(36)
  • Python Moviepy 视频编辑踩坑实录01:谁动了我的音频比特率

    1.音频比特率:从16000,调用函数后编程了44100 2. 音频通道数:从1通道,变成了2通道; 部分参数采用了默认值,包括音频比特率,通道类型。  filename:视频文件名,只要是ffmpeg支持的视频文件如 .ogv, .mp4, .mpeg, .avi, .mov等都可以  fps:帧率,每秒编码的帧数  codec:用于图像

    2024年02月19日
    浏览(44)
  • OP-TEE的安全存储(一)

    参考内容来自《手机安全和可信应用开发指南》 OP-TEE的安全存储功能是OP-TEE为用户提供的安全存储机制。用户可使用 安全存储功能来保存敏感数据、密钥等信息 。 使用OP-TEE安全存储功能保存数据时,OP-TEE会对需要被保存的数据进行加密,且每次更新安全文件时所用的加密密

    2024年02月04日
    浏览(43)
  • cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间

    问题 在shell输入命令按tab键时出现以下报错 原因分析 磁盘空间不够 解决 1、清理大文件 进入到 容量-已用 使用值最大的挂载点路径 查看该文件夹下的子文件占用大小 具体使用情况 一层层查看具体原因 查到具体文件如像日志,如果不重要的可以先进行清空 2、虚拟机扩容

    2024年04月25日
    浏览(37)
  • 玩转UE4/UE5动画系统:UE5的运行时(动态)重定向治好了我的精神内耗

    本文参考了油管UP主:AngelV的教程 UE5中新的动画资源的(静态)重定向方法比UE4好用很多,但这种静态的重定向方式依然很让人头疼,因为我们需要对于每一个需要的动画资源为每一个目标骨架生成一套资源备份。尽管个过程并不复杂,但对于诸如老王这种对资源管理有“洁

    2023年04月19日
    浏览(63)
  • mysql语句查看数据库表所占容量空间大小

         六. 查看所有产生碎片的表 查看某个表的碎片大小 SHOW TABLE STATUS LIKE \\\'表名\\\'; 查询结果中的\\\'Data_free\\\'字段的值就是碎片大小。 7. 清理表碎片

    2024年02月11日
    浏览(40)
  • 【iPhone】手机还有容量,拍视频却提示 iPhone 储存空间已满

    今天在用 iPhone 录像的时候突然提醒我 iPhone储存空间已满 你没有足够的储存空间来录制视频” 可我明明还有 20G 的容量 我非常疑惑,因为我之前还剩1个G都能录像,现在20G反而不行了,于是重启了手机,再次打开后,还是这样的提示。 然后我又在网上查了各种方法,包括:

    2024年02月14日
    浏览(116)
  • LINUX空间管理之du与df命令查看磁盘容量不一致问题

    在Linux系统的运行过程中,会经常遇到磁盘使用率过高,通过执行 du 与 df 命令查看磁盘容量确出现不一致的现象,例如以下几种现象: 执行 du 和 df 命令显示的结果不一致, df 比 du 命令显示的数据大很多。 使用 df 命令显示磁盘使用率过高,但是执行 du 命令统计目录时却磁

    2024年02月16日
    浏览(49)
  • 无限容量分布式文件存储解决方案

    常见分布式文件系统比较 常见的分布式文件系统有GFS、HDFS 、Ceph 、GridFS 、TFS、FastDFS等。各自适用于不同的领域。 类 Google FS 都支持文件冗余备份,例如 Google FS、TFS 的备份数是 3。一个文件存储到哪几个存储结点,通常采用动态分配的方式。采用这种方式,一个文件存储到

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包