女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

Blobstore中結構的劃分,Blobstore是如何管理塊的分配呢?

SSDFans ? 來源:lp ? 2019-04-11 13:35 ? 次閱讀

Blobstore是位于SPDK bdev之上的Blob管理層,用于與用戶態文件系統Blobstore Filesystem (BlobFS)集成,從而代替傳統的文件系統,支持更上層的服務,如數據庫MySQL、K-V存儲引擎Rocksdb以及分布式存儲系統Ceph、Cassandra等。以Rocksdb為例,通過BlobFS作為Rocksdb的存儲后端的優勢在于,I/O經由BlobFS與Blobstore下發到bdev,隨后由SPDK用戶態driver寫入磁盤。整個I/O流從發起到落盤均在用戶態操作,完全bypass內核。此外,可以充分利用SPDK所提供的異步、無鎖化、Zero Copy、輪詢等機制,大幅度減少額外的系統開銷。它們之間的關系如下所示(以NVMe bdev為例):

BlobFS在管理文件時,主要依賴于Blobstore對blob的分配與管理。Blob類似于文件的概念,而又不完全等同于文件,其并不支持所有文件的POSIX接口。BlobFS與Blobstore的關系可以理解為Blobstore實現了對Blob的管理,包括Blob的分配、刪除、讀取、寫入、元數據的管理等,而BlobFS是在Blobstore的基礎上進行封裝的一個輕量級文件系統,用于提供部分對于文件操作的接口,并將對文件的操作轉換為對Blob的操作,BlobFS中的文件與Blobstore中的Blob一一對應。在Blobstore下層,與SPDK bdev層對接。SPDK bdev層類似于內核中的通用塊設備層,是對底層不同類型設備的統一抽象管理,例如NVMe bdev、Malloc bdev、AIO bdev等。

Blobstore中結構的劃分

在blobstore中,將SSD中的塊劃分為多個抽象層,主要由Logical Block、Page、Cluster、Blob組成,它們之間的關系如下所示:

Logical Block:與塊設備中所提供的邏輯塊相對應,通常為512B或4KiB。

Page:由多個連續的Logical Block構成,通常一個page的大小為4KiB,因此一個Page由八個或一個Logical Block構成,取決于Logical Block的大小。在Blobstore中,Page是連續的,即從SSD的LBA 0開始,多個或一個塊構成Page 0,接下來是Page 1,依次類推。

Cluster:由多個連續的Page構成,通常一個Cluster的大小默認為1MiB,因此一個Cluster由256個Page構成。Cluster與Page一樣,是連續的,即從SSD的LBA 0開始的位置依次為Cluster 0到Cluster N。

Blob:Blobstore中主要的操作對象為Blob,與BlobFS中的文件相對應,提供read、write、create、delete等操作。一個Blob由多個Cluster構成,但構成Blob中的Cluster并不一定是連續的。

那么Blobstore是如何管理塊的分配呢?

在Blobstore中,會將cluster 0作為一個特殊的cluster。該cluster用于存放Blobtore的所有信息以及元數據,對每個blob數據塊的查找、分配都是依賴cluster 0中所記錄的元數據所進行的。Cluster 0的結構如下:

Cluster 0中的第一個page作為super block,Blobstore初始化后的一些基本信息都存放在super block中,例如cluster的大小、已使用page的起始位置、已使用page的個數、已使用cluster的起始位置、已使用cluster的個數、Blobstore的大小等信息。

Cluster 0中的其它page將組成元數據域(metadata region)。元數據域主要由以下幾部分組成:

Metadata Page Allocation:用于記錄所有元數據頁的分配情況。在分配或釋放元數據頁后,將會對metadata page allocation中的數據做相應的修改。

Cluster Allocation:用于記錄所有cluster的分配情況。在分配新的cluster或釋放cluster后會對cluster allocation中的數據做相應的修改。

Blob Id Allocation:用于記錄blob id的分配情況。對于blobstore中的所有blob,都是通過唯一的標識符blob id將其對應起來。在元數據域中,將會在blob allocation中記錄所有的blob id分配情況。

Metadata Pages Region:元數據頁區域中存放著每個blob的元數據頁。每個blob中所分配的cluster都會記錄在該blob的元數據頁中,在讀寫blob時,首先會通過blob id定位到該blob的元數據頁,其次根據元數據頁中所記錄的信息,檢索到對應的cluster。對于每個blob的元數據頁,并不是連續的。

對于一個blob來說,metadata page記錄了該blob的所有信息,數據存放于分配給該blob的cluster中。在創建blob時,首先會為其分配blob id以及metadata page,其次更新metadata region。當對blob進行寫入時,首先會為其分配cluster,其次更新該blob的metadata page,最后將數據寫入,并持久化到磁盤中。

為了實現對磁盤空間的動態分配管理,Blobstore中為每個blob分配的cluster并不是連續的。對于每個blob,通過相應的結構維護當前使用的cluster以及metadata page的信息:clusters與pages。Cluster中記錄了當前該blob所有cluster的LBA起始地址,pages中記錄了當前該blob所有metadata page的LBA起始地址。

Blobstore實現了對磁盤空間分配的動態管理,并保證斷電不丟失數據,因此Blob具有persistent特性。Blobstore中的配置信息與數據信息均在super block與metadata region中管理,在重啟后,若要保持persistent,可以通過Blobstore中所提供的load操作。

注意:

Blob的persistent主要是針對NVMe這類bdev。對于Malloc bdev,由于其本身的性質,是無法保證Blob的persistent,需要重啟后進行重新配置。

下面通過文件的讀寫來講解BlobFS與Blobstore中的I/O流程:

文件讀取:文件讀取操作的流程圖如下所示:

為了提高文件的讀取效率,BlobFS在內存中提供了cache buffer。在文件讀寫時,首先會進行read ahead操作,將一部分數據從磁盤預先讀取到內存的buffer中。其后,根據cache buffer的大小,對文件的I/O進行切分,使每個I/O的最大長度不超過一個cache buffer的大小。對于拆分后的文件I/O,會根據其offset在cache buffer tree中查找相應的buffer。若存在,則直接從cache buffer中讀取數據,進行memcpy。而對于沒有緩存到cache buffer中的數據,將會對該文件的讀取,轉換到該文件對應的Blob進行讀取。對Blob讀取時候,根據已打開的blob結構中記錄的信息,可以獲取該blob所有cluster的LBA起始位置,并根據讀取位置的offset信息,計算相應的LBA地址。最后向SPDK bdev層發送異步的讀請求,并等待I/O完成。BlobFS所提供的讀操作為同步讀,I/O完成后會在callback函數中,通過信號量通知BlobFS完成信號,至此文件讀取結束。

對于cache buffer tree,其結構如下所示:

Cache buffer tree是由多層樹結構組成。最底層Level 0葉子節點為buffer node,是用于存放數據的buffer。Level 0以上的其它層中,均為tree node,用于構建樹的索引結構。在文件讀寫的時候,根據文件結構中的根節點以及讀取位置的offset信息,在樹結構中通過索引查找buffer node的位置,即從Level N,逐步定位到對應的Level 0的葉子節點。

文件寫入:文件寫入操作的流程圖如下所示:

BlobFS目前用于支持上層的Rocksdb,在Rocksdb的抽象環境層中提供文件的接口,目前僅支持append類型的寫操作。在進行文件寫入時,首先會根據文件當前的寫入位置檢查是否符合cache buffer寫入需求,若滿足,則直接將數據寫入到cache buffer中,同時觸發異步的flush操作。在flush的過程中,BlobFS觸發Blob的寫操作,將cache buffer中的數據,寫入到文件對應blob的相應位置。若不滿足cache buffer的寫入需求,BlobFS則直接觸發文件對應的blob的寫操作。Blobstore首先為該blob分配cluster,根據計算得到的寫入LBA信息,向SPDK bdev層發送異步的寫請求,將數據寫入,并更新相應的元數據。對于元數據的更新,出于性能考慮,當前對元數據的更新都在內存中操作,當用戶使用強制同步或卸載Blobstore時,更新后的元數據信息才會同步到磁盤中。此外,blob結構中維護了兩份可變信息(指cluster與metadata page)的元數據,分別為clean與active。Clean中記錄的是當前磁盤的元數據信息,而active中記錄的是當前在內存中更新后的元數據信息。同步操作會將clean中記錄的信息與active記錄的信息相匹配。

總結

Blobstore實現對Blob管理,Blob類似與文件的概念,但又不完全等同于文件,Blob沒有完全遵循文件的POSIX接口,因此避免與文件混淆,在SPDK中稱之為Blob而不是File。Blobstore Filesystem (BlobFS)是基于Blobstore實現的輕量級文件系統,對Blobstore進行封裝,提供一些文件的常用接口,如read、write、open、sync等,其目的在于作為文件系統支持更上層的應用,例如Rocksdb。但其本質仍然是Blobstore,因此命名為BlobFS。目前SPDK基于維護了Rocksdb的一個分支,該分支下的Rocksdb在環境抽象層主要通過BlobFS進行對接,I/O可以經由BlobFS繞過內核I/O棧。關于Rocksdb的搭建與測試步驟,可以參考[3]。

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

    關注

    1

    文章

    388

    瀏覽量

    25662
  • 數據庫
    +關注

    關注

    7

    文章

    3901

    瀏覽量

    65787
  • MySQL
    +關注

    關注

    1

    文章

    849

    瀏覽量

    27557

原文標題:再見,Linux內核!文件系統直接訪問SSD

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    頁面與地址變換結構

    分頁存儲管理是將作業的邏輯地址劃分為一系列同等大小的部分,稱為頁。并為各頁加以編號,每個作業的頁的編號都是從0開始的。與之類似,把可用的物理內存也劃分為同樣大小的連續的部分,稱為或頁
    發表于 08-02 06:14

    STM32的內存映射被劃分為哪幾部分

    內存映射在一些桌面程序,整個內存映射是通過虛擬內存來進行管理的,使用一種稱為內存管理單元(MMU)的硬件結構來將程序的內存映射到物理RAM。然后在對于RAM緊缺的嵌入式系統
    發表于 12-09 07:18

    內存管理程序結構

    內存管理程序結構內存分配方式內存管理函數mallocrealloccallocmemsetfree堆和棧的區別管理方式不同空間大小不同是否產生碎片增長方向不同
    發表于 12-17 07:15

    RT-Thread系統動態內存堆有哪幾種管理算法

    管理上,根據上層應用及系統資源的不同,有針對性地提供了不同的內存分配管理算法。內存堆管理根據具體內存設備劃分為三種情況:針對小內存
    發表于 03-31 13:53

    關于RTT支持的內存分配算法

    的,能夠分配相同大小內存的zone會鏈接在一個鏈表,而72種對象的zone鏈表則放在一個數組(zone arry)中統一管理。 下面是分配
    發表于 04-27 14:40

    關于RTT支持的內存分配算法

    是固定的,能夠分配相同大小內存的zone會鏈接在一個鏈表,而72種對象的zone鏈表則放在一個數組(zone arry)中統一管理。 下面是
    發表于 04-27 14:42

    IP地址管理和子網劃分基礎

    本章內容:• IP地址基礎。• 子網劃分的目的。• 基本的固定長度掩碼。Pv4的地址管理主要用于給一個物理設備分配一個邏輯地址。聽起來很復雜,但實際上
    發表于 07-31 10:13 ?44次下載

    認知網絡基于功率分配的收發聯合迭代結構

    認知網絡基于功率分配的收發聯合迭代結構_李蠡
    發表于 01-07 16:24 ?0次下載

    基于劃分思想的文件結構化相似性比較方法

    針對傳統文件結構化相似性比較法采用基本( BB) -對一映射而造成的巨大時空消耗及基本比較結果的絕對化問題,提出一種基于劃分思想的文件
    發表于 01-02 14:04 ?0次下載
    基于<b class='flag-5'>劃分</b>思想的文件<b class='flag-5'>結構</b>化相似性比較方法

    linux內存管理的SLAB分配器詳解

    管理區頁框分配器,這里我們簡稱為頁框分配器,在頁框分配主要是管理物理內存,將物理內存的頁框
    發表于 05-17 15:01 ?2362次閱讀
    linux內存<b class='flag-5'>管理</b><b class='flag-5'>中</b>的SLAB<b class='flag-5'>分配</b>器詳解

    bootmem分配器使用的數據結構

    在內核初始化的過程需要分配內存,內核提供了臨時的引導內存分配器,在頁分配器和分配器初始化完畢
    的頭像 發表于 07-22 11:18 ?1636次閱讀

    Linux內核之分配

    為了解決小塊內存的分配問題,Linux 內核提供了分配器,最早實現的分配器是SLAB 分配
    的頭像 發表于 07-27 09:35 ?1870次閱讀

    Linux內核引導內存分配器的原理

    Linux內核引導內存分配器使用的是伙伴系統算法。這種算法是一種用于動態內存分配的高效算法,它將內存空間劃分為大小相等的,然后將這些組合
    發表于 04-03 14:52 ?539次閱讀

    文件存儲和存儲的區別和聯系

    ,它將文件以樹狀結構進行組織,每個文件都被分配一個唯一的文件名。文件系統將文件劃分為邏輯上的或數據,然后將這些
    的頭像 發表于 12-20 17:16 ?1621次閱讀

    CIDR的IP地址分配管理

    和路由聚合方法。 CIDR摒棄了傳統的基于類的IP地址分配方式,采用的是可變長子網掩碼技術的擴展。 假設一個組織獲得了一個 CIDR 地址,如10.0.0.0/16。它可以根據自己的需求進一步劃分成更小的子網。比如,可以將其
    的頭像 發表于 12-26 10:01 ?535次閱讀