独家揭秘|小米14魔改存储芯片多出8GB空间背后的秘诀

news2024/11/28 4:34:51

图片

在昨天发表的文章下面,有粉丝朋友要求“评价下小米256GB多8GB的技术”。小编也是好奇,本文就让我们一起来看看这个“高科技”背后的秘密。(提前声明:本文内容仅代表个人观点,如果不当之处,小米公司不要投诉我哈,我支持雷总!)

图片

首先,让我们看看雷总在小米14发布会上对这个“小创新”的阐述:

图片

发布会内容中,提到的256GB内存,其实就是一个UFS4.0设备(基于NAND存储颗粒的移动存储产品)。这里还有一个名词“FBO焕新存储”。小编认为这个就是可以多8GB的关键。

图片

根据公开信息查到,针对UFS文件系统功能优化FBO特性是由小米与西部数据联合研发,并得到了其他厂商(比如美光、三星、海力士、铠侠等)支持,合入了UFS 4.0规范,在2022年8月正式发布在JEDEC组织。基于这一点,也得给小米点这个赞,创新不易!

图片

小米工程师向linux社区提交的UFS FBO功能优化patch记录:

图片

基于文件优化特性(FBO)是一种帮助移动设备在其使用寿命内保持性能优势的新技术,主要目的是为了解决手机的碎片化

碎片化的本质:碎片化会导致数据存储效率低下。随着时间的推移,当一个存储设备被填满并且无法再按顺序写入数据时,或者当一个数据更新过程发生时,碎片化就会产生。在更新过程中,新的NAND块被使用,而未更新的数据仍然保留在原始的NAND块中。即使数据在逻辑上是顺序更新的,它也可能不是物理NAND块中的顺序存储。当这种情况发生时,数据会分散(随机)存储在存储设备的不同位置上。这反过来会导致较慢的性能,因为设备需要从各个物理位置收集数据时进行多次读取。

小米14中的UFS 4.0,跟SSD一样,底层存储颗粒都是NAND。那你知道NAND闪存是怎么工作的吗?其实,它就是由很多个晶体管组成的。这些晶体管里面存储着电荷,代表着我们的二进制数据,要么是“0”,要么是“1”。NAND闪存原理上是一个CMOS管,有两个栅极,一个是控制栅极(Control Gate), 一个是浮栅(Floating Gate). 浮栅的作用就是存储电荷,而浮栅与沟道之间的氧化层(Oxide Layer)的好坏决定着浮栅存储电荷的可靠性,也就是NAND闪存的寿命。

图片

但是呢,这些晶体管的电荷可不是永久存在的。它们就像一群顽皮的孩子,喜欢跑来跑去。如果你经常让它们进行“擦除”和“写入”的操作(NAND闪存中,P/E Cycle,也称为擦除次数),它们就会觉得累,电荷的存储能力也会逐渐下降(浮栅与沟道之间的氧化层被磨损的越来越严重,导致浮栅中电子的控制越来越艰难)。直到有一天,它们再也不想存储电荷了,那这个时候,你的SSD的寿命也就差不多了。

图片

所以呢,SSD寿命评估的底层机理,其实就是计算NAND闪存的擦除和写入次数(P/E Cycle)。每个晶体管都有一个固定的擦除和写入次数,就像我们的腿一样,跑多了会累,会磨损。当这些晶体管达到一定的磨损程度时,它们就再也存储不了电荷了,这时候你的SSD可就要退休了哦!

目前市面上主要流通的就是4种NAND类型:SLC、MLC、TLC、QLC。随着每个寿命从高到低依次是SLC>MLC>TLC>QLC.

图片

随着单个cell含有的bit数越多,NAND的可靠性也会有所降低。同时写延迟也在不断的增加。SLC写延迟在0.5ms级别,到QLC写延迟达到10-20ms,40倍的差距。

图片

NAND存储产品的寿命,最怕垃圾数据太多,也就是碎片化严重,会导致NAND颗粒的写放大增加,降低NAND的寿命

举个例子,最坏情况下的,假如我要写入一个4KB的数据Z覆盖A,并恰好目标块没有空余的页区,需要进行GC回收。这个时候就需要把B、C、D、E、F五分数据都搬走,然后擦除整个数据块,擦除完成后再整体写入6个数据页。这个整个过程,Host虽然只写了4KB的数据,但实际过程中,由于GC的问题,NAND最终写入了24KB。那么写放大WAF=24KB/4KB=6.

图片

SSD产品中影响WAF的因素有很多,其中“OP预留空间”是跟本次雷总说的魔改8GB的空间有关。

  • SSD FTL算法的设计会影响写入放大的大小

  • Wear Leveling,WL磨损均衡:这一机制主要是通过均衡所有的闪存颗粒,从而延长整体的使用寿命,然而依旧是增加整体的写放大

  • Over-Provisioning,OP预留空间:也会影响NAND写入的比例,最终影响写放大

  • Garbage Collection,GC垃圾回收:比如上面的例子,就是GC垃圾回收搬迁数据,擦除数据块后写入带来了整体写放大提升。

  • 业务读写的数据模型:随机写和顺序写对NAND的写入比例有非常大的影响,直接影响写放大的系数

  • 系统层的TRIM操作:会影响invalid无效数据是否在GC过程中搬迁,对写放大影响也有重要的作用。

预留空间OP是什么呢?
当一块SSD的数据写满时,需要额外的空间在启动垃圾回收之前接受新写入的数据,这块额外的空间,我们就称为预留空间。当然,这块预留空间是对用户不可见的。

预留空间主要分为两个部分:

图片

(1)由于标称容量与NAND闪存计算差异造成的本征预留空间OP1。
市场上SSD标称的容量是按照千进制(1000)来计算的,但是NAND闪存的容量是按照1024计算的。
我们简单列个式子计算一下:

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

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

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

(2)SSD由于性能要求而预留空间OP2,这部分也是标称OP。
这个部分预留空间主要用于垃圾回收GC,存储SSD主控的固件(Firmware),备用数据块(Spare Blocks)等。
标称预留空间OP=(SSD物理总容量-用户数据空间)/用户数据空间

图片

从上面这个表格中我们看到标称预留空间(Marketed OP)为0%的时候,其实这时的内部仍然有7%的本征预留空间。

预留空间OP有什么好处?预留空间牺牲了用户数据空间,那TA要是再没有什么好处,用户就真的要崩溃咯。其实预留空间OP的好处有很多:提高写入性能、降低写放大、提升NAND闪存使用寿命等。

所以,结合上面几个关键信息点,这个事情的逻辑应该是这样:

  • 小米研发了基于文件优化的特性FBO,减小碎片化,增加NAND的顺序写入,降低了写放大,提升了UFS使用寿命

  • 原本UFS 4.0 256GB预留了10GB空间,用于坏块管理和FW垃圾回收等功能,现在由于有FBO的出现,只需要2GB就可以完成原本10GB的工作,这样就省出来了8GB给用户

小编理解大概是这个逻辑,不知道各位是否有其他的看法,欢迎评论区留言交流!


小编每日撰文不易,如果您看完有所受益,欢迎点击文章底部左下角“关注”并点击“分享”、“在看”,非常感谢!

精彩推荐:

  • SSD IO性能优化是一项复杂但很有趣的工程

  • 双11即将来临,挑选SSD硬盘最全避坑指南

  • 性能领域:你知道的越多,不知道的也就越多

  • NVMe SSD:ZNS与FDP对决,你选谁?

  • 如何通过优化Read-Retry机制降低SSD读延迟?

  • 关于硬盘质量大数据分析的思考

  • 存储系统性能优化中IOMMU的作用是什么?

  • 全景解析SSD IO QoS性能优化

  • NVMe IO数据传输如何选择PRP or SGL?

  • 浅析nvme原子写的应用场景

  • 多维度深入剖析QLC SSD硬件延迟的来源

  • 浅析PCIe链路LTSSM状态机

  • 浅析Relaxed Ordering对PCIe系统稳定性的影响

  • 实战篇|浅析MPS对PCIe系统稳定性的影响

  • 浅析PCI配置空间

  • 浅析PCIe系统性能

  • 存储随笔《NVMe专题》大合集及PDF版正式发布!

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

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

相关文章

09.K8S高可用-堆叠etcd拓扑测试说明

堆叠 etcd 拓扑 1、部署架构如图 2、原理说明 核心组件高可用模式高可用实现方式apiserver主备keepalived + haproxycontroller-manager主备leader electionscheduler主备leader electionetcd集群kubeadm**「vip」**由外部负载均衡器提供一个vip,流量负载到keepalived master…

vue 内置指令-v-pre/v-memo

一、v-pre 使用了该指令的元素和子元素会被编译忽略&#xff0c;也就是不进行编译&#xff0c;其中包含的所有vue模版语法都会原样显示&#xff0c;作用加快vue的编译 例子&#xff1a; <p v-pre>{{不会被编译}}<span v-text"msg"></span></p&…

2016年下半年上午易错题(软件设计师考试)

在程序运行过程中&#xff0c; CPU 需要将指令从内存中取出并加以分析和执行。 CPU 依据&#xff08; &#xff09;来区 分在内存中以二进制编码形式存放的指令和数据。 A&#xff0e;指令周期的不同阶段 B &#xff0e;指令和数据的寻址方式 C &#xff0e;指令操作码的…

基于计算机视觉的坑洼道路检测和识别-MathorCup A(深度学习版本)

1 2023 年 MathorCup 高校数学建模挑战赛——大数据竞赛 赛道 A&#xff1a;基于计算机视觉的坑洼道路检测和识别 使用深度学习模型&#xff0c;pytorch版本进行图像训练和预测&#xff0c;使用ResNet50模型 2 文件夹预处理 因为给定的是所有图片都在一个文件夹里面&#xf…

Wpf 使用 Prism 实战开发Day03

一.实现左侧菜单绑定 效果图: 1.首先需要在项目中创建 mvvm 的架构模式 创建 Models &#xff0c;放置实体类。 实体类需要继承自Prism 框架的 BindableBase&#xff0c;目的是让实体类支持数据的动态变更! 例如: 系统导航菜单实体类 / <summary>/// 系统导航菜单实体类…

AWTK 液体流动效果控件发布

液体流动效果控件。 主要特色&#xff1a; 支持水平和垂直方向。支持正向和反向流动。支持设置头尾的图片。支持设置流动的图片。支持设置速度的快慢。支持启停操作。 准备 获取 awtk 并编译 git clone https://github.com/zlgopen/awtk.git cd awtk; scons; cd -运行 生成…

2023-10-29 LeetCode每日一题(H 指数)

2023-10-29每日一题 一、题目编号 274. H 指数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a…

【管理运筹学】第 10 章 | 排队论(5,多服务台排队系统、一般服务时间模型、P-K 公式、排队系统的经济分析)

文章目录 引言一、多服务台排队系统二、一般服务时间 M / G / 1 M/G/1 M/G/1 模型Pollaczek-Khinchine&#xff08;P-K&#xff09;公式 三、排队系统的经济分析写在最后 引言 对于多服务台负指数分布排队系统&#xff0c;大纲要求没那么深&#xff0c;只提到了状态转移图以及…

A. Doremy‘s Paint 3

今天第一次打CF&#xff0c;不过鼠鼠被气死了 先说说战况&#xff0c;今天一发没A&#xff08;赛场上&#xff09;&#xff0c;生活真是无奈&#xff0c;废物女友真是一点用没有 心里也很烦&#xff0c;什么压力都自己扛着。每天想尝试改变什么&#xff0c;又被现实掣肘&…

Leetcode刷题详解——第 N 个泰波那契数

1. 题目链接&#xff1a;1137. 第 N 个泰波那契数 2. 题目描述&#xff1a; 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a; 输入&#…

矩阵点乘multiply()函数和矩阵乘法dot()函数

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 矩阵点乘multiply()函数 和矩阵乘法dot()函数 [太阳]选择题 使用multiply()和dot()函数,输出错误的是&#xff1a; import pandas as pd import numpy as np df1pd.DataFrame([[0,1],[2,3]])…

Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块

首先了解涉及的新词汇&#xff0c;编程外国人发明的&#xff0c;所以大部分是和他们语言相关&#xff0c;了解对应意思&#xff0c;可以更好理解掌握。 import 英 /ˈɪmpɔːt/ n. 进口&#xff0c;进口商品&#xff1b;输入&#xff0c;引进&#xff1b;重要性&#xff1b;…

线程池里对异常的处理方式

方式&#xff1a;重写afterExecute方法, 统一处理线程池里抛出的异常。 但是要区分是execute方式提交的&#xff0c;还是submit方式提交的。 代码如下&#xff1a; public class Test001 {public static void main(String[] args) throws Exception {ExecutorService executor…

Redis(07)| 数据结构-跳表

Redis 只有 Zset 对象的底层实现用到了跳表&#xff0c;跳表的优势是能支持平均 O(logN) 复杂度的节点查找。 zset 结构体里有两个数据结构&#xff1a;一个是跳表&#xff0c;一个是哈希表。这样的好处是既能进行高效的范围查询&#xff0c;也能进行高效单点查询。 typedef s…

37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。

基于MATLAB平台的图像去噪&#xff0c;锐化&#xff0c;边缘检测&#xff0c;程序已调试通过&#xff0c;可直接运行。 37matlab边缘检测图像处理 (xiaohongshu.com)

ABBYY FineReader PDF15免费版图片文件识别软件

ABBYY全称为“ABBYY FineReader PDF”, ABBYY FineReader PDF集优秀的文档转换、PDF 管理和文档比较于一身。 首先这款软件OCR文字识别功能十分强大&#xff0c;话不多说&#xff0c;直接作比较。下图是某文字识别软件识别一串Java代码的结果&#xff0c;识别的结果就不多评价…

pyro库应用第 1 部分----贝叶斯回归

Bayesian Regression - Introduction (Part 1) — Pyro Tutorials 1.8.6 documentation 一、说明 我们很熟悉线性回归的问题&#xff0c;然而&#xff0c;一些问题看似不似线性问题&#xff0c;但是&#xff0c;用贝叶斯回归却可以解决。本文使用土地平整度和国家GDP的关系数据…

LibTorch实战二:MNIST的libtorch代码

目录 一、前言 二、另一种下载数据集方式 三、MNIST的Pytorch源码 四、MNIST的Libtorch源码 一、前言 前面介绍过了MNIST的python的训练代码、和基于torchscript的模型序列化&#xff08;导出模型&#xff09;。今天看看&#xff0c;如何使用libtorch C来实现手写数字训练。…

【算法|动态规划No.32 | 完全背包问题】完全背包模板题

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

2023年【加氢工艺】考试题库及加氢工艺免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年加氢工艺考试题库为正在备考加氢工艺操作证的学员准备的理论考试专题&#xff0c;每个月更新的加氢工艺免费试题祝您顺利通过加氢工艺考试。 1、【单选题】《使用有毒物品作业场所劳动保护条例》规定,从事使用高…