0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是文件的逻辑碎片和物理碎片

yYjs_江波龙 来源:江波龙电子 作者:江波龙电子 2022-09-22 16:02 次阅读

UFS简介

UFS(Universal Flash Storage, 通用闪存存储)协议是JEDEC为移动存储设备制定的通讯接口协议,业界通常将基于UFS协议的移动存储产品称为UFS设备。UFS设备广泛应用于智能手机、平板电脑VR(虚拟现实)设备、AR(增强现实)设备、无人机、3D游戏、监控系统、PDA、数字记录器、MP3播放器、电子玩具等领域。

UFS是eMMC的替代者,它提供比eMMC更高的性能和能效比。图1是eMMC和各代UFS的性能数据对比。

dfb1ff1c-398e-11ed-9e49-dac502259ad0.jpg

(图 1:eMMC和UFS最大带宽)

从图1可以看到,最新UFS 4.0的最大带宽可达到4GB/s以上,是eMMC最大带宽的10倍有余。目前eMMC已停止演进,而UFS正在慢慢取代eMMC。

UFS经历几次迭代,目前最新版本是UFS 4.0(2022年8月发布)。从图1可以看到,每一次迭代,UFS性能都是在前一代的基础上翻倍。UFS 4.0也不例外,它在UFS 3.0/3.1的基础上性能翻倍,最大带宽达到4GB/s以上。除此之外,UFS 4.0在UFS 3.0/3.1的基础上,引入了一些新的特性,比如引入Barrier命令、高级RPMB、FBO等。今天我们将重点解读FBO特性。

FBO,全称为File Based Optimization,基于文件的优化,顾名思义,它是基于文件来做性能优化。在继续FBO介绍之前,首先交代一下背景知识,了解什么是文件的逻辑碎片和物理碎片。

文件的逻辑碎片和物理碎片

对于一个文件来说,文件系统会为其分配若干个逻辑块(Logical Block,用LBA寻址)用于存储文件数据。当文件系统在为一个文件分配逻辑块时,会尽量为其分配连续的逻辑块,但如果分配不到所需的连续逻辑块,则会分配不连续的块。

dfe8d866-398e-11ed-9e49-dac502259ad0.jpg

(图 2:一个文件分配逻辑块的两个场景)

在这里,我们把LBA连续简称为“逻辑连续”。图2场景1为“逻辑连续”,场景2则为“逻辑不连续”。一个文件的LBA如果“逻辑不连续”,通俗来讲就是这个文件存在逻辑碎片化——该文件的LBA越离散,则表示其逻辑碎片化程度越高。

文件数据最终都是要存储在存储设备上,即这些逻辑块(不管连续还是不连续)都是要写到存储设备的闪存物理块上去。在设备端,如果没有其它写入命令插入,存储设备会把上述文件数据写入到连续的闪存空间里。

如图3所示:

e003c144-398e-11ed-9e49-dac502259ad0.jpg

(图 3:存储设备把文件数据写入到连续的闪存空间)

我们把文件的数据在闪存空间连续写入的场景称之为“物理连续”。

但主机端在写入上述文件的时候,可能会混杂着其它的写入,比如该文件元数据的写入,或者其它文件数据的写入,设备端按接收到的写命令依次接收写入数据,由于各种数据的穿插写入,就可能导致上述文件的数据不是被连续写到闪存空间。

如图4所示:

e0284a3c-398e-11ed-9e49-dac502259ad0.jpg

(图 4:存储设备把文件数据写入到不连续的闪存空间)

我们把文件数据在闪存空间不是连续写入的场景称之为“物理不连续”,通俗来讲就是文件存在物理碎片化——一个文件的数据在闪存空间存储越分散,则表示其物理碎片化程度越高。

值得一提的是,即使文件刚开始写入到闪存是连续的,但由于后续存储设备内部的一些操作,比如垃圾回收,也有可能导致文件数据最后存储在闪存空间的位置不是连续的。

文件碎片化对性能的影响

对存储设备(比如UFS设备)来说,由于一个LBA的数据可能存储在闪存的任意一个物理位置,因此存储设备需要维护一张逻辑地址到物理地址的映射关系表,即L2P映射表。L2P映射表是一个大的数组:索引为LBA,内容是该LBA在闪存的物理地址(简称为PBA)。当存储设备要读取数据时,首先查找L2P映射表获得该LBA对应的PBA,然后根据该PBA读取该LBA对应的数据。L2P映射表大小一般为存储设备容量的1/1024,比如一个256GB的UFS设备,其L2P映射表大小为256MB。对消费级存储设备来说,一般不带DRAM所以L2P映射表数据大多数时间都是存储在闪存中的,而存储设备固件则按需加载部分L2P映射关系到小容量的SRAM中。

在访问一个文件的时候,如果该文件的LBA是连续的:一方面,主机端只要发很少的命令到存储设备,以图2场景1为例,要读该文件,只需要发一个读取命令即可,而对图2场景2,即文件存在逻辑碎片,要读取该文件,主机端需要发三个读取命令,增加了I/O命令的个数。I/O命令个数的增多,无论是对主机端软件,还是设备端固件,都带来了不小的负担。另一方面,如果文件LBA连续,存储设备从闪存设备一次加载4KB的L2P映射关系,就能满足4MB的LBA数据访问,相反,如果LBA不连续,则最坏情况是每读一个LBA,存储设备需要从闪存中加载一个4KB的映射关系,然而频繁的L2P加载,将会严重影响存储设备的读取性能。

简而言之,无论是主机端还是设备端,都是特别喜欢“逻辑连续”的,不喜欢文件逻辑碎片化。

那“物理连续”呢?很显然,存储设备也同样“喜闻乐见”。原因在于读取的时候,如果数据都集中在一起,一次读可以使用多Plane操作,比如对4 Plane闪存来说,一次读取可以获得64KB数据。但这64KB数据如果不是物理连续——分散在闪存中的不同地方,则最坏情况下要读取16次闪存(每个命令只读取4KB)。

至此我们能得出的结论是:“逻辑连续”和“物理连续”都满足的场景下,文件具有最好的读取性能。但只要其中任何一个场景不满足,文件读取性能则会受影响,最终可能导致手机出现“卡顿”的问题。因此,文件读取性能优化方向是避免或者减少文件逻辑碎片和物理碎片。

FBO特性

现在我们回到FBO特性上来。FBO作为UFS 4.0的一个扩展协议,概括下来就是:主机和设备一起配合,把文件数据从“物理不连续”转换成“物理连续”,以提升文件数据的读取性能。

具体来说,系统空闲的时候(比如夜深人静的时候),主机把需要性能优化的某个(或某些)文件的LBA信息告诉存储设备,让存储设备去检查这些LBA在闪存块上是否连续。设备会查询这些LBA的映射关系,通过这些LBA在闪存上的物理地址,来分析该文件在闪存空间上是否物理连续,以及不连续的程度(物理碎片化程度),然后把这些信息返回给主机。主机根据设备反馈信息,来指示存储设备下一步动作:如果该文件在闪存空间上很分散,就要叫存储设备把这些不连续的数据块都搬到连续的地方去。在设备接到指示后,便会执行数据的整理:将不连续的数据集中写到新的连续闪存块位置。FBO通过主机和设备的这种协作,就能够解决文件数据在存储空间的“碎片化”问题,从而改善文件的读取性能。

e04e9642-398e-11ed-9e49-dac502259ad0.jpg

(图5:FBO把文件数据从物理不连续整理成物理连续)

FBO旨在解决文件物理碎片化问题。

FBO没有解决的问题

FBO解决了文件的物理碎片化问题,即把“物理不连续”变成“物理连续”,但他没有解决文件逻辑碎片化问题。有数据表明,文件“逻辑不连续”相比文件“物理不连续”,对文件性能影响更大,因此解决文件的逻辑碎片化问题显得更为重要。

文件逻辑碎片化问题从古(HDD时代)至今(固态存储时代)一直存在。业界对此做了不少努力。

首先是日志结构文件系统(log-structured file system)的出现,以F2FS(Flash Friendly File System,闪存友好文件系统)为代表。F2FS是专门为基于闪存的存储设备而设计的文件系统,是手机中最常用的两大文件系统之一(另一个是EXT4文件系统)。F2FS在为文件分配逻辑块的时候,一般采用追加方式分配逻辑块,即按顺序分配;只有当存储设备逻辑空间很满的时候,才采用一种叫Threaded Logging的逻辑块分配方式,这种方式可能为一个文件分配离散的逻辑块。尽管如此,F2FS的出现,仍然大幅缓解了文件的逻辑碎片化问题。

其次是SSD中的ZNS(Zoned Namespace)技术,它把整个存储空间划分成若干个区块(Zone),在区块内部强制顺序写入。这对存储设备来说是个好消息,它的L2P映射表可以变得很小(采用更大的映射粒度),因此L2P映射表可常驻内存,当固件在处理读取命令的时候,能够快速获取LBA的物理地址,从而提升读取性能。在制定UFS 4.0标准的过程中,业界很多企业建议把Zoned Storage的概念应用到UFS上来,但从结果来看,这个建议并没有在UFS 4.0上被采纳。但可以预见类似SSD的ZNS技术一定会出现在未来的某个UFS版本中。

点评FBO

虽然没有解决文件逻辑碎片问题,但FBO解决了文件物理碎片问题,一定程度上能提升文件的读取性能。如果考虑到类似F2FS文件系统的使用,即绝大多数文件的LBA是连续的,而现在有了FBO的加持,在手机上大文件的读取性能将会得到改善,手机“越用越卡”的问题“可能”会得到解决。(为什么说“可能”?前面分析了影响文件系统性能最大因素是文件逻辑碎片化,如果文件逻辑碎片化问题没有得到解决,FBO效果不会很好。)

俗话说“万事有得必有失”,文件碎片整理需要从一个闪存块把数据读出来,然后集中写到另外闪存块,而FBO这种额外的写会引入写放大,影响存储设备寿命。

另外,FBO是一种“亡羊补牢”的做法,即文件出现物理碎片,然后再将它们做整理。如果一开始存储设备对文件的物理碎片化问题有针对性设计,即一开始就拒绝文件物理碎片的产生,那么FBO就失去了其意义。

导致文件物理碎片化主要有两个原因:

1.由于各种数据混合着写,某个文件的LBA数据一开始就有可能被写到不连续的闪存空间;

2.还有就是有些存储设备在设计上没有意识到文件数据在闪存空间连续存放的意义,一些诸如垃圾回收的内部操作,可能会导致最初连续写入的文件数据,被分散写入到闪存空间,最终导致“物理不连续”。

如果知道物理碎片产生的原因,那么存储设备就可以有针对性设计了。

比如存储设备在算法上可以采用物理隔离的方式,将大尺寸数据写入到一个闪存块,而把小尺寸数据写到另外一个闪存块,这样避免了因小尺寸元数据写入,而导致大尺寸数据在物理空间上写入不连续的情况。

或者一开始文件数据被不连续地写入到闪存块,但是在对这个闪存数据块做垃圾回收的时候,将该闪存块上连续的LBA数据写到连续的新的物理块上,从而达到类似FBO的功效。

江波龙Smart GC技术

江波龙UFS3.1在设计之初就意识到文件的物理碎片化问题,当研发团队在设计垃圾回收算法时,不单只考虑到通过垃圾回收功能来回收闪存块,还利用执行垃圾回收的时机同时完成“物理不连续”到“物理连续”的整理。我们把这种“毕其功于一役”的垃圾回收技术称为Smart GC。

e063c576-398e-11ed-9e49-dac502259ad0.jpg

(图6:Smart GC:设备执行垃圾回收的同时完成物理碎片整理)

Smart GC这项创新技术不仅解决了文件物理碎片化问题,改善了大文件的读取性能,同时也避免了额外碎片整理对存储设备寿命带来的影响。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 闪存
    +关注

    关注

    16

    文章

    1753

    浏览量

    114609
  • 数据
    +关注

    关注

    8

    文章

    6725

    浏览量

    88392
  • 带宽
    +关注

    关注

    3

    文章

    882

    浏览量

    40668
  • 文件系统
    +关注

    关注

    0

    文章

    280

    浏览量

    19848

原文标题:深度解读UFS 4.0的FBO特性

文章出处:【微信号:江波龙电子,微信公众号:江波龙电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于Altera FPGA的IP碎片重组模块实现

    基于Altera FPGA的IP碎片重组模块实现Implementation of an FPGA-Based IP Reassembly Module摘要:为了更好地支持网络安全,IP碎片重组
    发表于 10-07 11:00

    【电脑日常维护教程】6个磁盘碎片整理技巧

    整理程序时系统会自动屏蔽掉屏幕保护,运行完成后自动恢复。4. 改变交换文件的位置 我们知道,如果大量碎片存在于C盘之中,可能会影响系统的启动速度。为了加快系统的启动速度,我们应该尽量减少C盘中的碎片
    发表于 05-18 16:12

    请问mymalloc会产生内存碎片吗?

    malloc申请内存在释放后,会产生内存碎片,所以UCOSIII内有专门的内存申请。原子哥视频(UCOSIII视频19讲)最后的时候说可以用原子哥自己的mamalloc函数来申请内存。我想问,难道原子哥的mymalloc不会产生内存碎片
    发表于 10-16 04:35

    物联网的技术碎片化与业务碎片化分析

    谁会关心物联网碎片化?不同的企业对待物联网碎片化,看法是不一样的。关于碎片化的成因很多,那么到底挑战碎片化有没有解呢?
    发表于 03-05 07:33

    如何避免内存碎片的产生

    内存碎片的产生(从内部碎片和外部碎片方面讲述)编程题:第一题:解析头文件,简单来说就是大写字母小写之母通过一些特定的规则进行转换,具体题目要求忘了…(AC)#include #incl
    发表于 12-21 07:50

    磁盘碎片整理的工作原理是什么?

    磁盘碎片整理的工作原理是什么? “磁盘碎片整理”这个术语通常用于指代Microsoft Windows中称为磁盘碎片整理程序的应用程序。它的设计目的是解决一个由于硬盘存储
    发表于 07-30 08:17 4150次阅读

    如何加快磁盘碎片整理速度

    如何加快磁盘碎片整理速度 本文介绍可以帮助我们加快系统整理磁盘碎片速度的几个技巧。     关闭应用程序  
    发表于 02-23 14:09 468次阅读

    如何避免Linux的物理内存碎片

    Linux buddyy系统是linux kernel比较稳定的一个模块,但是并不是说它没有缺陷,Linux内存管理系统自诞生之日,就一直存在物理内存碎片化的问题:在系统启动并且运行很长一段时间后
    的头像 发表于 05-01 16:43 5385次阅读
    如何避免Linux的<b class='flag-5'>物理</b>内存<b class='flag-5'>碎片</b>化

    你知道linux kernel内存碎片防治技术?

    Linux kernel组织管理物理内存的方式是buddy system(伙伴系统),而物理内存碎片正式buddy system的弱点之一,为了预防以及解决碎片问题,kernel采取了
    发表于 05-10 10:59 905次阅读

    系统碎片是什么?是怎么产生的?为什么会产生?

    系统碎片是系统频繁地删除文件再写入文件造成的。理论上,只要删除文件再写入就有碎片,重复的越多,碎片
    的头像 发表于 01-21 11:14 2.8w次阅读

    物联网的技术碎片化与业务碎片化资料下载

    电子发烧友网为你提供物联网的技术碎片化与业务碎片化资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-07 08:50 34次下载
    物联网的技术<b class='flag-5'>碎片</b>化与业务<b class='flag-5'>碎片</b>化资料下载

    溅射工艺对晶片碎片的影响

      介绍了半导体晶片制造设备溅射机和溅射工艺对晶片碎片的影响,给出了如何减少晶片应力以达到少碎片的目的。
    发表于 03-10 14:45 2次下载

    FreeRTOS内存碎片是怎么来的

    内存碎片 在看 FreeRTOS的内存分配方法之前我们先来看一下什么叫做内存碎片,看名字就知道是小块的、碎片化的内存。那么内存碎片是怎么来的呢?内存
    的头像 发表于 07-30 10:29 767次阅读
    FreeRTOS内存<b class='flag-5'>碎片</b>是怎么来的

    如何解决内存碎片与内存交换效率慢的问题

    内存分页 分段的好处是能产生连续的内存空间,但是会出现大量内存碎片与内存交换效率低的问题 先思考一下怎么解决这两个问题,内存碎片是由多个不连续的小物理内存空间造成,如果把这些不连续的小物理
    的头像 发表于 10-09 16:57 857次阅读
    如何解决内存<b class='flag-5'>碎片</b>与内存交换效率慢的问题

    mysql磁盘碎片整理

    背景 数据结转过程中经常进行 delete 操作,产生空白空间,如果进行新的插入操作,MySQL将尝试利用这些留空的区域,但仍然无法将其彻底占用,于是造成了数据的存储位置不连续,以及物理存储顺序
    的头像 发表于 08-27 15:26 157次阅读
    mysql磁盘<b class='flag-5'>碎片</b>整理