精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

只讀壓縮文件系統EROFS的設計與實現

SSDFans ? 來源:上海交通大學/華為陳海波 ? 2023-08-31 15:09 ? 次閱讀

本工作來自上海交通大學/華為陳海波老師團隊,發表于ATC 2019。

01動機及背景

EROFS是一個針對移動設備的只讀壓縮文件系統。作者觀察到,當前手機配備的存儲空間不大,而安卓系統的系統分區、各種app占用的空間越來越大。導致用戶的實際可支配空間越來越小。如圖所示,安卓系統的/system分區從2.3.6的184MB增長到了9.0.0的1.9GB。為了盡可能增加用戶的可用空間,對系統分區使用壓縮文件系統是最優解。

a5e959fa-47c1-11ee-97a6-92fbcf53809c.png

文章對比了兩個最常見的壓縮文件系統,Btrfs和Squashfs。其中,Btrfs是一個B樹文件系統,在使能壓縮功能后,文件數據每128KB進行壓縮存儲,由于Btrfs是一個通用文件系統,同時支持讀寫功能,因此為數據修改效率妥協了數據壓縮率,且在數據解壓時會占用大量的內存空間。

Squashfs是一個只讀壓縮文件系統,壓縮塊大小4KB-1MB可調,由于安卓的/system分區幾乎不需要修改的特性,只讀文件系統比Btrfs更合適。然而,Squashfs同樣存在嚴重的問題,在解壓過程中squashfs會產生大量的CPU和內存開銷,在資源緊張的移動設備上性能下降嚴重。

為了研究squashfs性能下降的原因,文章進行了進一步分析。第一個原因是壓縮輸入塊大小固定,導致了的壓縮輸出數據大小不同,因此導致了可觀的讀放大,如下圖所示,以128K壓縮輸入大小為例,壓縮后數據存放在SSD的blk1-blk7中,若要讀取4KB數據,則需要首先讀取blk1-blk7共7塊,解壓得到128K原始數據后,只取其中4KB所需數據,這就導致了7倍的讀放大。

第二個原因是在解壓過程中大量的內存占用和數據搬運開銷,在解壓過程中,squashfs需要大量的臨時內存用于解壓,另外,解壓過程中,數據需要多次搬運,造成大量的CPU開銷。

這兩個缺陷引出了兩個關鍵思考:如何在減小讀放大的同時盡可能少的降低壓縮率?如何在解壓過程中盡可能少占用內存?

a5fb0916-47c1-11ee-97a6-92fbcf53809c.png

02EROFS的設計與實現

固定壓縮輸出塊大小

為了產生固定大小的壓縮輸出塊,EROFS在生成鏡像時使用滑動窗口法調整壓縮算法輸入的原始數據大小。固定輸出塊大小具有多種優點。首先,固定輸出塊大小壓縮率更高;第二,讀取數據時僅需要讀取包含目標數據的塊,也就是說一塊數據最多僅需要兩次讀操作,相較squashfs,讀放大顯著縮小。

靈活的原始數據存儲

在實際解壓前,EROFS可以使用兩種方式存放原始壓縮數據。當數據僅部分解壓時,EROFS使用緩存式IO,即在發送讀請求前為申請一塊特殊inode的頁緩存,并將原始壓縮數據讀入這一塊緩存中,當再次觸發讀請求并且讀區域正好落入當前壓縮塊時,即可省去一次IO。若壓縮數據需要全部解壓,EROFS則使用在位IO方式,即將原始壓縮數據直接讀入VFS分配的存放解壓后數據的頁緩存中。

多種解壓策略結合

EROFS設計了四種解壓后數據的存放方式。

1.Vmap存放,即使用vmap方法將申請的臨時緩存和VFS分配的緩存作為連續的虛擬地址作為解壓的目標地址。這種方式有兩個缺點:第一需要動態申請內存,增加內存壓力;第二每次解壓都使用vmap和vunmap效率低下。

2. Per-CPU緩沖存放,即使用提前為每個CPU分配的緩存作為解壓數據的存放地址,這種解壓方式僅在解壓數據小于4頁時使用。

3.滾動存放,即使用EROFS預先申請的16物理頁內存存放解壓數據,當解壓數據超出16頁時,則滾動回第0頁覆蓋其數據繼續解壓。

4.在位解壓,即解壓后的數據和原始壓縮數據放置在同一段內存空間,這種解壓方式僅在確定解壓過程中不會出現解壓后數據覆蓋還未解壓數據時才可以使用(在mkfs時會判斷是否會覆蓋,并記錄在inode中)。

根據四種不同解壓后數據存放方式的特點,設計解壓策略如下圖所示。

a60b33f4-47c1-11ee-97a6-92fbcf53809c.png

03優化

索引優化:一個壓縮塊中可能存在數百頁原始數據,在解壓時這些頁的索引會占據大量內存,因此若VFS分配的頁中存在多余的可重用頁,則將壓縮塊存儲在可重用頁,這樣可以避免重復讀取,同時減少內存占用。

調度優化:傳統壓縮文件系統如Btrfs使用一個獨立的解壓線程進行數據解壓,這樣會帶來調度開銷,EROFS將解壓工作放在讀者線程執行,以避免解壓線程的調度開銷。

協同解壓:若多個線程的讀取落入同一個壓縮塊內,則僅由一個線程解壓一次,其余線程共用數據,避免重復解壓。

鏡像補丁:使用增量補丁方式,EROFS可以支持少量補丁存在。在文件讀取時,EROFS先讀取鏡像內文件原本內容,再讀取補丁中覆蓋內容進行更新。

04評估

評估平臺使用了hikey960開發板。評估方式采用了fio和enwik9數據集,fio分別執行順序讀取、隨機讀取、條帶讀取(每128KB讀取4KB)進行基準測試。

測試結果如下圖所示,在壓縮文件系統中,btrfs表現最差,在每次讀取無法落入緩沖的條帶讀取測試中,squashfs-128K下降明顯,而EROFS的性能與squashfs-4K類似,接近非壓縮的ext4和f2fs。

a61a7008-47c1-11ee-97a6-92fbcf53809c.png

壓縮率、內存占用測試

使用enwik9和silesia.tar兩個數據集測試幾個文件系統的壓縮率。測試結果如圖所示。可以看出,EROFS壓縮率和squashfs-16K接近,低于squashfs-128K,壓縮率接近0.5,可以節省接近一半的空間。

a6494e82-47c1-11ee-97a6-92fbcf53809c.png

內存壓縮測試方式為:開機、掛載文件系統,讀取整個測試文件,查看內存占用情況。測試結果如下圖所示。可以看出,EROFS的內存占用僅略高于非壓縮文件系統的ext4,遠低于squashfs。

a65e2d70-47c1-11ee-97a6-92fbcf53809c.png

實際環境測試

將安卓系統的/system;/vendor;/odm分區使用erofs,分別節省了30%-35%的空間,開機時間縮短2.3%。測試打開相機應用花費時間,92次測試累計分布如圖所示。可以看出,EROFS的應用開啟時間和ext4基本相同,甚至略優于ext4。

a6923750-47c1-11ee-97a6-92fbcf53809c.png

總結

EROFS作為一個為資源有限的移動設備設計的只讀壓縮文件系統,在保證較高壓縮率的同時提供了高性能讀取、低內存占用。在測試中,開啟時間甚至略快于ext4。目前EROFS已并入linux主線內核,并且大規模部署在智能手機上。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10825

    瀏覽量

    211140
  • 壓縮
    +關注

    關注

    2

    文章

    102

    瀏覽量

    19361
  • 文件系統
    +關注

    關注

    0

    文章

    284

    瀏覽量

    19883

原文標題:聊聊只讀壓縮文件系統

文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在Linux使用unzip命令在終端解壓縮文件

    ZIP是最廣泛使用的存檔文件格式,支持無損數據壓縮。ZIP文件是一個數據容器,其中包含一個或多個壓縮文件或目錄。
    發表于 12-08 16:52 ?4766次閱讀

    winrar壓縮文件圖標丟失(不見了)怎么辦? 不能顯示壓縮文件

    如上過程,文件關聯全部    選擇,并確定2 按住shift用鼠標右鍵點擊一個壓縮文件夾,選擇“打開方式”中的RAR程序,并選中“始終用這個   程序”打開就OK了。3  徹底刪除WinRAR軟件,用系統自帶
    發表于 11-12 12:17

    文件系統

    直接運行文件系統,這樣可以在系統運行時節省許多RAM空間。Cramfs是針對Linux內核2.4之后的版本所設計的一種新型文件系統,也是壓縮只讀
    發表于 06-02 09:29

    壓縮文件可以使用pdf壓縮器嗎

    `  壓縮文件可以使用pdf壓縮器嗎?現在很多辦公人員都會編輯各種文檔格式的文件,也都掌握了將其它可編輯格式轉換為PDF文件格式的方法,但是有時候PDF
    發表于 10-27 14:03

    樹莓派壓縮文件

    請問各位,怎么用樹莓派壓縮文件夾?
    發表于 09-13 10:03

    在 Linux 上壓縮文件的 5 種方法

    容易地傳輸到另一個系統,或者將文件作為一個相關的組進行備份。它也提供壓縮的功能,這就很有意義了,附加一個 z 壓縮選項能夠實現
    發表于 05-07 15:25

    在 Linux 上壓縮文件的 5 種方法

    作為一個相關的組進行備份。它也提供壓縮的功能,這就很有意義了,附加一個 z 壓縮選項能夠實現壓縮文件。當使用 z 選項為 tar 命令附加壓縮
    發表于 05-13 15:45

    Linux如何壓縮文件

    在Linux上壓縮文件的5種方法
    發表于 12-30 08:00

    【ELT.ZIP】OpenHarmony啃論文俱樂部—見證文件壓縮系統EROFS

    的在線多粒度蒸餾圖像壓縮文件傳輸壓縮快速隨機訪問字符串壓縮高通量并行無損壓縮增強只讀文件系統開源
    發表于 07-30 09:10

    【學習打卡】【ELT.ZIP】OpenHarmony啃論文俱樂部—見證文件壓縮系統EROFS

    的在線多粒度蒸餾圖像壓縮文件傳輸壓縮快速隨機訪問字符串壓縮高通量并行無損壓縮增強只讀文件系統開源
    發表于 07-30 09:19

    嵌入式Linux上JFFS文件系統實現方法

    我們使用的uClinux系統采用ROMFS作為根文件系統,它相對于一般的EXT2文件系統,具有節約空間的優勢。但是ROMFS是一種只讀文件系統
    發表于 05-14 10:35 ?1281次閱讀
    嵌入式Linux上JFFS<b class='flag-5'>文件系統</b>的<b class='flag-5'>實現</b>方法

    壓縮文件管理器WinRAR安裝程序下載

    壓縮文件管理器WinRAR安裝程序下載
    發表于 08-31 10:45 ?15次下載

    鈦金系列壓縮與非壓縮文件多鏡像問題

    根據客戶的反饋和需求,我們做了一個Ti60壓縮與非壓縮文件的多鏡像與加載時間的驗證。
    的頭像 發表于 12-01 10:16 ?834次閱讀
    鈦金系列<b class='flag-5'>壓縮</b>與非<b class='flag-5'>壓縮文件</b>多鏡像問題

    如何在Linux上使用Pigz來更快地壓縮文件

    Pigz是一款快速壓縮文件的工具,它能夠使用多個CPU核心進行壓縮,使得壓縮速度得到了極大的提升。在本文中,我們將介紹如何在Linux上使用Pigz來更快地壓縮文件
    的頭像 發表于 05-12 16:42 ?2172次閱讀
    如何在Linux上使用Pigz來更快地<b class='flag-5'>壓縮文件</b>

    java中的壓縮文件是如何解壓與壓縮

    (String name):表示壓縮文件中的一個文件或者目錄 void putNextEntry(ZipEntry e):寫入新的壓縮文件或者目錄 ZipIutputStream:是一種
    的頭像 發表于 10-10 15:49 ?883次閱讀