UFS簡(jiǎn)介
UFS(Universal Flash Storage, 通用閃存存儲(chǔ))協(xié)議是JEDEC為移動(dòng)存儲(chǔ)設(shè)備制定的通訊接口協(xié)議,業(yè)界通常將基于UFS協(xié)議的移動(dòng)存儲(chǔ)產(chǎn)品稱(chēng)為UFS設(shè)備。UFS設(shè)備廣泛應(yīng)用于智能手機(jī)、平板電腦、VR(虛擬現(xiàn)實(shí))設(shè)備、AR(增強(qiáng)現(xiàn)實(shí))設(shè)備、無(wú)人機(jī)、3D游戲、監(jiān)控系統(tǒng)、PDA、數(shù)字記錄器、MP3播放器、電子玩具等領(lǐng)域。
UFS是eMMC的替代者,它提供比eMMC更高的性能和能效比。圖1是eMMC和各代UFS的性能數(shù)據(jù)對(duì)比。
(圖 1:eMMC和UFS最大帶寬)
從圖1可以看到,最新UFS 4.0的最大帶寬可達(dá)到4GB/s以上,是eMMC最大帶寬的10倍有余。目前eMMC已停止演進(jìn),而UFS正在慢慢取代eMMC。
UFS經(jīng)歷幾次迭代,目前最新版本是UFS 4.0(2022年8月發(fā)布)。從圖1可以看到,每一次迭代,UFS性能都是在前一代的基礎(chǔ)上翻倍。UFS 4.0也不例外,它在UFS 3.0/3.1的基礎(chǔ)上性能翻倍,最大帶寬達(dá)到4GB/s以上。除此之外,UFS 4.0在UFS 3.0/3.1的基礎(chǔ)上,引入了一些新的特性,比如引入Barrier命令、高級(jí)RPMB、FBO等。今天我們將重點(diǎn)解讀FBO特性。
FBO,全稱(chēng)為File Based Optimization,基于文件的優(yōu)化,顧名思義,它是基于文件來(lái)做性能優(yōu)化。在繼續(xù)FBO介紹之前,首先交代一下背景知識(shí),了解什么是文件的邏輯碎片和物理碎片。
文件的邏輯碎片和物理碎片
對(duì)于一個(gè)文件來(lái)說(shuō),文件系統(tǒng)會(huì)為其分配若干個(gè)邏輯塊(Logical Block,用LBA尋址)用于存儲(chǔ)文件數(shù)據(jù)。當(dāng)文件系統(tǒng)在為一個(gè)文件分配邏輯塊時(shí),會(huì)盡量為其分配連續(xù)的邏輯塊,但如果分配不到所需的連續(xù)邏輯塊,則會(huì)分配不連續(xù)的塊。
(圖 2:一個(gè)文件分配邏輯塊的兩個(gè)場(chǎng)景)
在這里,我們把LBA連續(xù)簡(jiǎn)稱(chēng)為“邏輯連續(xù)”。圖2場(chǎng)景1為“邏輯連續(xù)”,場(chǎng)景2則為“邏輯不連續(xù)”。一個(gè)文件的LBA如果“邏輯不連續(xù)”,通俗來(lái)講就是這個(gè)文件存在邏輯碎片化——該文件的LBA越離散,則表示其邏輯碎片化程度越高。
文件數(shù)據(jù)最終都是要存儲(chǔ)在存儲(chǔ)設(shè)備上,即這些邏輯塊(不管連續(xù)還是不連續(xù))都是要寫(xiě)到存儲(chǔ)設(shè)備的閃存物理塊上去。在設(shè)備端,如果沒(méi)有其它寫(xiě)入命令插入,存儲(chǔ)設(shè)備會(huì)把上述文件數(shù)據(jù)寫(xiě)入到連續(xù)的閃存空間里。
如圖3所示:
(圖 3:存儲(chǔ)設(shè)備把文件數(shù)據(jù)寫(xiě)入到連續(xù)的閃存空間)
我們把文件的數(shù)據(jù)在閃存空間連續(xù)寫(xiě)入的場(chǎng)景稱(chēng)之為“物理連續(xù)”。
但主機(jī)端在寫(xiě)入上述文件的時(shí)候,可能會(huì)混雜著其它的寫(xiě)入,比如該文件元數(shù)據(jù)的寫(xiě)入,或者其它文件數(shù)據(jù)的寫(xiě)入,設(shè)備端按接收到的寫(xiě)命令依次接收寫(xiě)入數(shù)據(jù),由于各種數(shù)據(jù)的穿插寫(xiě)入,就可能導(dǎo)致上述文件的數(shù)據(jù)不是被連續(xù)寫(xiě)到閃存空間。
如圖4所示:
(圖 4:存儲(chǔ)設(shè)備把文件數(shù)據(jù)寫(xiě)入到不連續(xù)的閃存空間)
我們把文件數(shù)據(jù)在閃存空間不是連續(xù)寫(xiě)入的場(chǎng)景稱(chēng)之為“物理不連續(xù)”,通俗來(lái)講就是文件存在物理碎片化——一個(gè)文件的數(shù)據(jù)在閃存空間存儲(chǔ)越分散,則表示其物理碎片化程度越高。
值得一提的是,即使文件剛開(kāi)始寫(xiě)入到閃存是連續(xù)的,但由于后續(xù)存儲(chǔ)設(shè)備內(nèi)部的一些操作,比如垃圾回收,也有可能導(dǎo)致文件數(shù)據(jù)最后存儲(chǔ)在閃存空間的位置不是連續(xù)的。
文件碎片化對(duì)性能的影響
對(duì)存儲(chǔ)設(shè)備(比如UFS設(shè)備)來(lái)說(shuō),由于一個(gè)LBA的數(shù)據(jù)可能存儲(chǔ)在閃存的任意一個(gè)物理位置,因此存儲(chǔ)設(shè)備需要維護(hù)一張邏輯地址到物理地址的映射關(guān)系表,即L2P映射表。L2P映射表是一個(gè)大的數(shù)組:索引為L(zhǎng)BA,內(nèi)容是該LBA在閃存的物理地址(簡(jiǎn)稱(chēng)為PBA)。當(dāng)存儲(chǔ)設(shè)備要讀取數(shù)據(jù)時(shí),首先查找L2P映射表獲得該LBA對(duì)應(yīng)的PBA,然后根據(jù)該P(yáng)BA讀取該LBA對(duì)應(yīng)的數(shù)據(jù)。L2P映射表大小一般為存儲(chǔ)設(shè)備容量的1/1024,比如一個(gè)256GB的UFS設(shè)備,其L2P映射表大小為256MB。對(duì)消費(fèi)級(jí)存儲(chǔ)設(shè)備來(lái)說(shuō),一般不帶DRAM,所以L(fǎng)2P映射表數(shù)據(jù)大多數(shù)時(shí)間都是存儲(chǔ)在閃存中的,而存儲(chǔ)設(shè)備固件則按需加載部分L2P映射關(guān)系到小容量的SRAM中。
在訪(fǎng)問(wèn)一個(gè)文件的時(shí)候,如果該文件的LBA是連續(xù)的:一方面,主機(jī)端只要發(fā)很少的命令到存儲(chǔ)設(shè)備,以圖2場(chǎng)景1為例,要讀該文件,只需要發(fā)一個(gè)讀取命令即可,而對(duì)圖2場(chǎng)景2,即文件存在邏輯碎片,要讀取該文件,主機(jī)端需要發(fā)三個(gè)讀取命令,增加了I/O命令的個(gè)數(shù)。I/O命令個(gè)數(shù)的增多,無(wú)論是對(duì)主機(jī)端軟件,還是設(shè)備端固件,都帶來(lái)了不小的負(fù)擔(dān)。另一方面,如果文件LBA連續(xù),存儲(chǔ)設(shè)備從閃存設(shè)備一次加載4KB的L2P映射關(guān)系,就能滿(mǎn)足4MB的LBA數(shù)據(jù)訪(fǎng)問(wèn),相反,如果LBA不連續(xù),則最壞情況是每讀一個(gè)LBA,存儲(chǔ)設(shè)備需要從閃存中加載一個(gè)4KB的映射關(guān)系,然而頻繁的L2P加載,將會(huì)嚴(yán)重影響存儲(chǔ)設(shè)備的讀取性能。
簡(jiǎn)而言之,無(wú)論是主機(jī)端還是設(shè)備端,都是特別喜歡“邏輯連續(xù)”的,不喜歡文件邏輯碎片化。
那“物理連續(xù)”呢?很顯然,存儲(chǔ)設(shè)備也同樣“喜聞樂(lè)見(jiàn)”。原因在于讀取的時(shí)候,如果數(shù)據(jù)都集中在一起,一次讀可以使用多Plane操作,比如對(duì)4 Plane閃存來(lái)說(shuō),一次讀取可以獲得64KB數(shù)據(jù)。但這64KB數(shù)據(jù)如果不是物理連續(xù)——分散在閃存中的不同地方,則最壞情況下要讀取16次閃存(每個(gè)命令只讀取4KB)。
至此我們能得出的結(jié)論是:“邏輯連續(xù)”和“物理連續(xù)”都滿(mǎn)足的場(chǎng)景下,文件具有最好的讀取性能。但只要其中任何一個(gè)場(chǎng)景不滿(mǎn)足,文件讀取性能則會(huì)受影響,最終可能導(dǎo)致手機(jī)出現(xiàn)“卡頓”的問(wèn)題。因此,文件讀取性能優(yōu)化方向是避免或者減少文件邏輯碎片和物理碎片。
FBO特性
現(xiàn)在我們回到FBO特性上來(lái)。FBO作為UFS 4.0的一個(gè)擴(kuò)展協(xié)議,概括下來(lái)就是:主機(jī)和設(shè)備一起配合,把文件數(shù)據(jù)從“物理不連續(xù)”轉(zhuǎn)換成“物理連續(xù)”,以提升文件數(shù)據(jù)的讀取性能。
具體來(lái)說(shuō),系統(tǒng)空閑的時(shí)候(比如夜深人靜的時(shí)候),主機(jī)把需要性能優(yōu)化的某個(gè)(或某些)文件的LBA信息告訴存儲(chǔ)設(shè)備,讓存儲(chǔ)設(shè)備去檢查這些LBA在閃存塊上是否連續(xù)。設(shè)備會(huì)查詢(xún)這些LBA的映射關(guān)系,通過(guò)這些LBA在閃存上的物理地址,來(lái)分析該文件在閃存空間上是否物理連續(xù),以及不連續(xù)的程度(物理碎片化程度),然后把這些信息返回給主機(jī)。主機(jī)根據(jù)設(shè)備反饋信息,來(lái)指示存儲(chǔ)設(shè)備下一步動(dòng)作:如果該文件在閃存空間上很分散,就要叫存儲(chǔ)設(shè)備把這些不連續(xù)的數(shù)據(jù)塊都搬到連續(xù)的地方去。在設(shè)備接到指示后,便會(huì)執(zhí)行數(shù)據(jù)的整理:將不連續(xù)的數(shù)據(jù)集中寫(xiě)到新的連續(xù)閃存塊位置。FBO通過(guò)主機(jī)和設(shè)備的這種協(xié)作,就能夠解決文件數(shù)據(jù)在存儲(chǔ)空間的“碎片化”問(wèn)題,從而改善文件的讀取性能。
(圖5:FBO把文件數(shù)據(jù)從物理不連續(xù)整理成物理連續(xù))
FBO旨在解決文件物理碎片化問(wèn)題。
FBO沒(méi)有解決的問(wèn)題
FBO解決了文件的物理碎片化問(wèn)題,即把“物理不連續(xù)”變成“物理連續(xù)”,但他沒(méi)有解決文件邏輯碎片化問(wèn)題。有數(shù)據(jù)表明,文件“邏輯不連續(xù)”相比文件“物理不連續(xù)”,對(duì)文件性能影響更大,因此解決文件的邏輯碎片化問(wèn)題顯得更為重要。
文件邏輯碎片化問(wèn)題從古(HDD時(shí)代)至今(固態(tài)存儲(chǔ)時(shí)代)一直存在。業(yè)界對(duì)此做了不少努力。
首先是日志結(jié)構(gòu)文件系統(tǒng)(log-structured file system)的出現(xiàn),以F2FS(Flash Friendly File System,閃存友好文件系統(tǒng))為代表。F2FS是專(zhuān)門(mén)為基于閃存的存儲(chǔ)設(shè)備而設(shè)計(jì)的文件系統(tǒng),是手機(jī)中最常用的兩大文件系統(tǒng)之一(另一個(gè)是EXT4文件系統(tǒng))。F2FS在為文件分配邏輯塊的時(shí)候,一般采用追加方式分配邏輯塊,即按順序分配;只有當(dāng)存儲(chǔ)設(shè)備邏輯空間很滿(mǎn)的時(shí)候,才采用一種叫Threaded Logging的邏輯塊分配方式,這種方式可能為一個(gè)文件分配離散的邏輯塊。盡管如此,F(xiàn)2FS的出現(xiàn),仍然大幅緩解了文件的邏輯碎片化問(wèn)題。
其次是SSD中的ZNS(Zoned Namespace)技術(shù),它把整個(gè)存儲(chǔ)空間劃分成若干個(gè)區(qū)塊(Zone),在區(qū)塊內(nèi)部強(qiáng)制順序?qū)懭?。這對(duì)存儲(chǔ)設(shè)備來(lái)說(shuō)是個(gè)好消息,它的L2P映射表可以變得很?。ú捎酶蟮挠成淞6龋?,因此L2P映射表可常駐內(nèi)存,當(dāng)固件在處理讀取命令的時(shí)候,能夠快速獲取LBA的物理地址,從而提升讀取性能。在制定UFS 4.0標(biāo)準(zhǔn)的過(guò)程中,業(yè)界很多企業(yè)建議把Zoned Storage的概念應(yīng)用到UFS上來(lái),但從結(jié)果來(lái)看,這個(gè)建議并沒(méi)有在UFS 4.0上被采納。但可以預(yù)見(jiàn)類(lèi)似SSD的ZNS技術(shù)一定會(huì)出現(xiàn)在未來(lái)的某個(gè)UFS版本中。
點(diǎn)評(píng)FBO
雖然沒(méi)有解決文件邏輯碎片問(wèn)題,但FBO解決了文件物理碎片問(wèn)題,一定程度上能提升文件的讀取性能。如果考慮到類(lèi)似F2FS文件系統(tǒng)的使用,即絕大多數(shù)文件的LBA是連續(xù)的,而現(xiàn)在有了FBO的加持,在手機(jī)上大文件的讀取性能將會(huì)得到改善,手機(jī)“越用越卡”的問(wèn)題“可能”會(huì)得到解決。(為什么說(shuō)“可能”?前面分析了影響文件系統(tǒng)性能最大因素是文件邏輯碎片化,如果文件邏輯碎片化問(wèn)題沒(méi)有得到解決,F(xiàn)BO效果不會(huì)很好。)
俗話(huà)說(shuō)“萬(wàn)事有得必有失”,文件碎片整理需要從一個(gè)閃存塊把數(shù)據(jù)讀出來(lái),然后集中寫(xiě)到另外閃存塊,而FBO這種額外的寫(xiě)會(huì)引入寫(xiě)放大,影響存儲(chǔ)設(shè)備壽命。
另外,F(xiàn)BO是一種“亡羊補(bǔ)牢”的做法,即文件出現(xiàn)物理碎片,然后再將它們做整理。如果一開(kāi)始存儲(chǔ)設(shè)備對(duì)文件的物理碎片化問(wèn)題有針對(duì)性設(shè)計(jì),即一開(kāi)始就拒絕文件物理碎片的產(chǎn)生,那么FBO就失去了其意義。
導(dǎo)致文件物理碎片化主要有兩個(gè)原因:
1.由于各種數(shù)據(jù)混合著寫(xiě),某個(gè)文件的LBA數(shù)據(jù)一開(kāi)始就有可能被寫(xiě)到不連續(xù)的閃存空間;
2.還有就是有些存儲(chǔ)設(shè)備在設(shè)計(jì)上沒(méi)有意識(shí)到文件數(shù)據(jù)在閃存空間連續(xù)存放的意義,一些諸如垃圾回收的內(nèi)部操作,可能會(huì)導(dǎo)致最初連續(xù)寫(xiě)入的文件數(shù)據(jù),被分散寫(xiě)入到閃存空間,最終導(dǎo)致“物理不連續(xù)”。
如果知道物理碎片產(chǎn)生的原因,那么存儲(chǔ)設(shè)備就可以有針對(duì)性設(shè)計(jì)了。
比如存儲(chǔ)設(shè)備在算法上可以采用物理隔離的方式,將大尺寸數(shù)據(jù)寫(xiě)入到一個(gè)閃存塊,而把小尺寸數(shù)據(jù)寫(xiě)到另外一個(gè)閃存塊,這樣避免了因小尺寸元數(shù)據(jù)寫(xiě)入,而導(dǎo)致大尺寸數(shù)據(jù)在物理空間上寫(xiě)入不連續(xù)的情況。
或者一開(kāi)始文件數(shù)據(jù)被不連續(xù)地寫(xiě)入到閃存塊,但是在對(duì)這個(gè)閃存數(shù)據(jù)塊做垃圾回收的時(shí)候,將該閃存塊上連續(xù)的LBA數(shù)據(jù)寫(xiě)到連續(xù)的新的物理塊上,從而達(dá)到類(lèi)似FBO的功效。
江波龍Smart GC技術(shù)
江波龍UFS3.1在設(shè)計(jì)之初就意識(shí)到文件的物理碎片化問(wèn)題,當(dāng)研發(fā)團(tuán)隊(duì)在設(shè)計(jì)垃圾回收算法時(shí),不單只考慮到通過(guò)垃圾回收功能來(lái)回收閃存塊,還利用執(zhí)行垃圾回收的時(shí)機(jī)同時(shí)完成“物理不連續(xù)”到“物理連續(xù)”的整理。我們把這種“畢其功于一役”的垃圾回收技術(shù)稱(chēng)為Smart GC。
(圖6:Smart GC:設(shè)備執(zhí)行垃圾回收的同時(shí)完成物理碎片整理)
Smart GC這項(xiàng)創(chuàng)新技術(shù)不僅解決了文件物理碎片化問(wèn)題,改善了大文件的讀取性能,同時(shí)也避免了額外碎片整理對(duì)存儲(chǔ)設(shè)備壽命帶來(lái)的影響。
-
閃存
+關(guān)注
關(guān)注
16文章
1845瀏覽量
115987 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7256瀏覽量
91886 -
帶寬
+關(guān)注
關(guān)注
3文章
994瀏覽量
42185 -
文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
296瀏覽量
20395
原文標(biāo)題:深度解讀UFS 4.0的FBO特性
文章出處:【微信號(hào):江波龍電子,微信公眾號(hào):江波龍電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于Altera FPGA的IP碎片重組模塊實(shí)現(xiàn)
【電腦日常維護(hù)教程】6個(gè)磁盤(pán)碎片整理技巧
請(qǐng)問(wèn)mymalloc會(huì)產(chǎn)生內(nèi)存碎片嗎?
物聯(lián)網(wǎng)的技術(shù)碎片化與業(yè)務(wù)碎片化分析
如何避免內(nèi)存碎片的產(chǎn)生
磁盤(pán)碎片整理的工作原理是什么?
如何加快磁盤(pán)碎片整理速度
如何避免Linux的物理內(nèi)存碎片化

你知道linux kernel內(nèi)存碎片防治技術(shù)?
系統(tǒng)碎片是什么?是怎么產(chǎn)生的?為什么會(huì)產(chǎn)生?
物聯(lián)網(wǎng)的技術(shù)碎片化與業(yè)務(wù)碎片化資料下載

濺射工藝對(duì)晶片碎片的影響
FreeRTOS內(nèi)存碎片是怎么來(lái)的

如何解決內(nèi)存碎片與內(nèi)存交換效率慢的問(wèn)題

mysql磁盤(pán)碎片整理

評(píng)論