js 曲线 网站,营销型网站方案书,网站贸易表格怎么做,网站建设题库含答案前段时间#xff0c;在小米14的发布会上#xff0c;雷布斯公布了名为“Xiaomi Ultra Space存储扩容”的技术#xff0c;号称可以在512G的手机中再搞出来16G#xff0c;256G的手机中再搞出8G。对于普通用户来说#xff0c;能多得一些存储空间#xff0c;无异是个很好的福利…前段时间在小米14的发布会上雷布斯公布了名为“Xiaomi Ultra Space存储扩容”的技术号称可以在512G的手机中再搞出来16G256G的手机中再搞出8G。对于普通用户来说能多得一些存储空间无异是个很好的福利不过也有网友说这是以损害存储使用寿命为代价的那么真相到底如何呢这篇文章我就从技术角度来给大家详细分析下。
认识闪存
首先让我们来了解一些手机存储的基本知识。 手机存储使用的是闪存技术其本质和U盘、固态硬盘都是一样的。
在闪存中读写的基本单位是页Page比页更大的概念是块Block一个块会包含很多页。
虽然读写的基本单位都是页但是写实际操作的很可能是块这是为什么呢
这要从删除谈起在闪存中删除数据时不会立即删除页上的数据而只是给页打上一个空闲的标签。这是因为谁也不知道这个页什么时候会再写入数据这样处理起来比较简单快速。
再看写操作如果写入分配的页是因为删除而空闲的数据并不能立即写入根据闪存的特性此时需要先把页上之前存储的数据擦除然后才能写入但是闪存中擦除操作的基本单位是块此时就需要先把整个块中的有效数据读出来然后再擦除块最后再向块中写入修改后的整块数据这整个操作称为“读-改-写”。当然如果写入分配的页是空白的并不需要先进行擦除此时直接写入就可以了。
预留空间
小米这次抠出来的存储空间来源于一个称为“预留空间”的区域它的英文全称是Over Provisio简称 OP。
那么“预留空间”是什么呢我将通过5个方面来介绍它的用途让大家近距离认识下。
提高写入速度
在上面介绍闪存的基本知识时我们谈到闪存的写操作存在一种“读-改-写”的情况因为额外的读和擦除操作这种方法的耗时相比单纯的写入会增加不少闪存使用的时间越长空白的空间越少这种操作越容易出现闪存的读写性能下降的越快。
为了提升写入的性能我们可以先将新数据写入到预留空间此时上层系统就可以认为已经写入完成然后我们在后台将预留空间中的新数据和原数据块中需要保留的数据合并到一个新的数据块中这样就避免了频繁的读-修改-写操作从而可以大大提高写入速度。
垃圾回收和整理
在上面介绍闪存的基本知识时我们还谈到删除数据并不是立即清除空间而是给数据页打一个标签这样做的效率比较高。这样做就像我们标记了垃圾但是并没有把它们运走时间久了这些垃圾会占用很多的空间。这些垃圾空间就像一个个的小碎片所以有时也把这个问题称为碎片化问题。
虽然我们可以通过“读-改-写”操作来重新利用这些碎片空间包括通过异步的“读-改-写”操作来提升上层应用的写入效率但无疑还是存在写入的难度实际写入之前还是要先进行擦除。
为了解决上述问题聪明的设计师们又想到了新办方法让存储器在后台自动检测、自动整理存储中的数据碎片而不是等到写入数据时再进行整理。
考虑到闪存的读擦写特性当需要移除数据块中部分碎片或者将不同数据碎片合并时就得把需要保留的数据先放到一个临时空间中以免数据出现丢失待存储中的数据块准备好之后再重新写入预留空间就可以用作这个临时空间。
磨损均衡
闪存中每个块的写入次数都是有限制的超过这个限制块就可能会变得不可靠不能再被使用。这就是我们通常所说的闪存的磨损。
为了尽可能延长闪存的使用寿命我们需要尽量均匀地使用所有的闪存块确保每个块的使用频率大致相同。这就是磨损均衡的主要目标。
假设我们发现块A的使用频率过高我们需要将它的数据移动到没怎么用过的块B去以达到磨损均衡的目的。首先我们需要读取块A中的数据然后将这些数据暂时存储到预留空间。然后我们擦除块A将它标记为空闲。最后我们从预留空间中取出数据写入到块B。实际上磨损均衡的策略比这更复杂不仅仅是看使用频率还需要考虑其他因素比如块的寿命数据的重要性等。
可以看到预留空间在这个过程中起到了临时存储数据的作用。
不过你可能会问为什么不直接将块A的数据复制到块B而需要一个临时空间
这是因为在实际操作中直接复制块A的数据到块B会带来一些问题和限制。
假如直接进行这种数据复制那么在数据从块A复制到块B的过程中块A和块B中都会存在一份相同的数据如果有其他进程在这个过程中访问了这份数据可能会产生数据一致性的问题。此外如果移动过程中发生意外中断如电源故障可能会导致数据在块B中只复制了一部分而块A中的数据还未被擦除这样就可能导致数据丢失或者数据不一致的问题。
而如果我们使用预留空间也就是引入一个第三方就可以缓解这些问题。我们先将数据从块A复制到预留空间然后擦除块A最后再将预留空间中的数据写入到块B。在这个过程中我们可以借助预留空间来实现一些原子性的机制来保证数据不会丢失和数据的一致性。
错误校正
预留空间还可以用来存储错误校正码ECC。如果在读取数据时发现有错误可以用错误校正码来修复这些错误提高数据的可靠性。
很多同学可能也不了解这个错误校正码的来龙去脉这里多说几句。
我们知道计算机中的数据最终都是二进制的0和10和1使用硬件比较好表达比如我们使用高电压表示1低电压表示0。但是硬件有时候会出错本来写进去的是1读出来的却是0。为了解决这个问题设计师们就搞出来个错误校正码这个校正码是使用某些算法基于要存储的数据算出来的存储数据的时候把它一起保存起来。读取数据的时候再使用相同的算法进行计算如果两个校正码对不上就说明存储的数据出现错误了。然后ECC算法可以通过计算知道是哪一位出现了错误改正它就可以恢复正确的数据了。
注意ECC能够修正的二进制位数有限因为可以修复的位数越多额外需要的存储空间也越大具体能修复几位要考虑出现坏块的概率以及数据的重要性。
大家可别小看这个校正码如果没有它数据可能就差的离谱。曾经有个企业使用普通消费级内存代替服务器内存但是经常在做数学计算时出现特殊符号不能转换为数字的问题查来查去就是内存出了问题但是普通内存没有校正码所以发现不了这个问题。
坏块管理
当闪存单元变为坏块时预留空间可以提供新的闪存单元来替代坏块此时读取对应数据时不再访问坏块而是通过映射表转到预留空间中读取从而保证数据的存储和读取不受影响提高了固态硬盘的可靠性和耐用性。
综上所述预留空间在提升固态硬盘性能延长其使用寿命提高数据的可靠性等方面发挥着重要的作用。
小米的优化
根据公开资料小米将预留空间的占比从6.9%压缩到了约3%。
那么小米是怎么做到的呢以下是官方说法
小米在主机端也基于文件管理深度介入了 UFS 的资源管理通过软件实现“数据非必要不写入UFS”通过软件 固件实现“写入数据非必要不迁移”减少写入量的同时也实现了更好的 wear-leveling 和 WAF
还有一张图 优化解读
这里用了一些术语文字也比较抽象我这里解读下
UFSUniversal Flash Storage即通用闪存存储可以理解为就是手机中的存储模块。
“数据非必要不写入UFS”也就是先把数据写入到缓冲区然后等收到足够的数据之后比如1页再写入闪存单元这样就可以减少闪存单元的擦写次数自然就能延长闪存单元的使用寿命推迟坏块的产生。这个缓冲区类似于计算机的内存如果突然掉电可能会丢失一部分数据但是对于手机来说突然掉电这个情况发生的几率极低所以小米在这里多缓存点数据对数据丢失的影响很小不过还是需要注意缓冲空间有限这个值也不能太大具体多少小米应该经过大量测试之后做了评估。
“写入数据非必要不迁移” 没有细说怎么做的大概率说的是优化磨损均衡、垃圾回收和整理策略没事别瞎整理整理的时候尽量少擦写目的还是延长闪存单元的使用寿命。
“增加坏块预留” 小米可以根据用户的使用情况调整坏块预留区的大小比如用户是个重度手机使用狂他用1年相当于别人用4年小米系统就会增加坏块预留区以应对擦写次数增加带来的坏块几率增加。注意这个调整是在云端实现的如果手机不联网这个功能还用不上。
wear-leveling就是上面提到的磨损均衡小米优化了均衡算法减少擦写。
WAF写放大Write Amplification Factor缩写WAF。写放大就是上面提到的“读-改-写”操作引起的因为擦除必须擦掉整个块的数据所以上层系统只需要写一个页的情况下底层存储可能要重写一个块从页到块放大了写操作的数据量。因为闪存的寿命取决于擦除次数所以写放大会影响到闪存的使用寿命。
概括来说就是小米从存储的预留空间中抠出来一部分作为用户存储不过预留空间的减小意味着坏块管理、错误纠正等可以使用的空间变小这些空间变小会减少存储的使用寿命所以小米又通过各种算法延缓了手机存储的磨损速度如此则对大家的使用没有什么影响而用户又能多得一些存储空间。
小米的测试结果
对于大家担心小米手机存储的寿命问题小米手机系统软件部总监张国全表示:“按照目前重度用户的模型来评估,在每天写入40GB数据的条件下, 256GB的扩容芯片依然可以保证超过10年, 512GB可以超过20年,请大家放心。”
同时一般固态硬盘往往都拥有5年的质保而很多消费者往往会5年之内更换手机。因此按着这个寿命数据来看普通消费者并不用太担心“扩容芯片”的寿命问题。所以如果你的手机用不了10年可以不用担心这个问题。
当然更多的测试细节小米并没有透漏比如读写文件的大小等。不过按照小米的说法存储的供应商也做了测试没有什么问题。这个暂时只能相信小米是个负责任的企业做好了完备的测试。 最后小米搞了这个技术申请了专利但是又把标准和技术方案贡献给了UFS协会同时还要求存储芯片厂商设置了半年的保护期也就是说技术可以分享给大家但是请大家体谅下原创的辛苦所以半年后其它手机厂商才能用上。大家猜一下半年后其它手机厂商会跟进吗