在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Blobstore中結(jié)構(gòu)的劃分,Blobstore是如何管理塊的分配呢?

SSDFans ? 來(lái)源:lp ? 2019-04-11 13:35 ? 次閱讀

Blobstore是位于SPDK bdev之上的Blob管理層,用于與用戶(hù)態(tài)文件系統(tǒng)Blobstore Filesystem (BlobFS)集成,從而代替?zhèn)鹘y(tǒng)的文件系統(tǒng),支持更上層的服務(wù),如數(shù)據(jù)庫(kù)MySQL、K-V存儲(chǔ)引擎Rocksdb以及分布式存儲(chǔ)系統(tǒng)Ceph、Cassandra等。以Rocksdb為例,通過(guò)BlobFS作為Rocksdb的存儲(chǔ)后端的優(yōu)勢(shì)在于,I/O經(jīng)由BlobFS與Blobstore下發(fā)到bdev,隨后由SPDK用戶(hù)態(tài)driver寫(xiě)入磁盤(pán)。整個(gè)I/O流從發(fā)起到落盤(pán)均在用戶(hù)態(tài)操作,完全bypass內(nèi)核。此外,可以充分利用SPDK所提供的異步、無(wú)鎖化、Zero Copy、輪詢(xún)等機(jī)制,大幅度減少額外的系統(tǒng)開(kāi)銷(xiāo)。它們之間的關(guān)系如下所示(以NVMe bdev為例):

BlobFS在管理文件時(shí),主要依賴(lài)于Blobstore對(duì)blob的分配與管理。Blob類(lèi)似于文件的概念,而又不完全等同于文件,其并不支持所有文件的POSIX接口。BlobFS與Blobstore的關(guān)系可以理解為Blobstore實(shí)現(xiàn)了對(duì)Blob的管理,包括Blob的分配、刪除、讀取、寫(xiě)入、元數(shù)據(jù)的管理等,而B(niǎo)lobFS是在Blobstore的基礎(chǔ)上進(jìn)行封裝的一個(gè)輕量級(jí)文件系統(tǒng),用于提供部分對(duì)于文件操作的接口,并將對(duì)文件的操作轉(zhuǎn)換為對(duì)Blob的操作,BlobFS中的文件與Blobstore中的Blob一一對(duì)應(yīng)。在Blobstore下層,與SPDK bdev層對(duì)接。SPDK bdev層類(lèi)似于內(nèi)核中的通用塊設(shè)備層,是對(duì)底層不同類(lèi)型設(shè)備的統(tǒng)一抽象管理,例如NVMe bdev、Malloc bdev、AIO bdev等。

Blobstore中結(jié)構(gòu)的劃分

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

Logical Block:與塊設(shè)備中所提供的邏輯塊相對(duì)應(yīng),通常為512B或4KiB。

Page:由多個(gè)連續(xù)的Logical Block構(gòu)成,通常一個(gè)page的大小為4KiB,因此一個(gè)Page由八個(gè)或一個(gè)Logical Block構(gòu)成,取決于Logical Block的大小。在Blobstore中,Page是連續(xù)的,即從SSD的LBA 0開(kāi)始,多個(gè)或一個(gè)塊構(gòu)成Page 0,接下來(lái)是Page 1,依次類(lèi)推。

Cluster:由多個(gè)連續(xù)的Page構(gòu)成,通常一個(gè)Cluster的大小默認(rèn)為1MiB,因此一個(gè)Cluster由256個(gè)Page構(gòu)成。Cluster與Page一樣,是連續(xù)的,即從SSD的LBA 0開(kāi)始的位置依次為Cluster 0到Cluster N。

Blob:Blobstore中主要的操作對(duì)象為Blob,與BlobFS中的文件相對(duì)應(yīng),提供read、write、create、delete等操作。一個(gè)Blob由多個(gè)Cluster構(gòu)成,但構(gòu)成Blob中的Cluster并不一定是連續(xù)的。

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

在Blobstore中,會(huì)將cluster 0作為一個(gè)特殊的cluster。該cluster用于存放Blobtore的所有信息以及元數(shù)據(jù),對(duì)每個(gè)blob數(shù)據(jù)塊的查找、分配都是依賴(lài)cluster 0中所記錄的元數(shù)據(jù)所進(jìn)行的。Cluster 0的結(jié)構(gòu)如下:

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

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

Metadata Page Allocation:用于記錄所有元數(shù)據(jù)頁(yè)的分配情況。在分配或釋放元數(shù)據(jù)頁(yè)后,將會(huì)對(duì)metadata page allocation中的數(shù)據(jù)做相應(yīng)的修改。

Cluster Allocation:用于記錄所有cluster的分配情況。在分配新的cluster或釋放cluster后會(huì)對(duì)cluster allocation中的數(shù)據(jù)做相應(yīng)的修改。

Blob Id Allocation:用于記錄blob id的分配情況。對(duì)于blobstore中的所有blob,都是通過(guò)唯一的標(biāo)識(shí)符blob id將其對(duì)應(yīng)起來(lái)。在元數(shù)據(jù)域中,將會(huì)在blob allocation中記錄所有的blob id分配情況。

Metadata Pages Region:元數(shù)據(jù)頁(yè)區(qū)域中存放著每個(gè)blob的元數(shù)據(jù)頁(yè)。每個(gè)blob中所分配的cluster都會(huì)記錄在該blob的元數(shù)據(jù)頁(yè)中,在讀寫(xiě)blob時(shí),首先會(huì)通過(guò)blob id定位到該blob的元數(shù)據(jù)頁(yè),其次根據(jù)元數(shù)據(jù)頁(yè)中所記錄的信息,檢索到對(duì)應(yīng)的cluster。對(duì)于每個(gè)blob的元數(shù)據(jù)頁(yè),并不是連續(xù)的。

對(duì)于一個(gè)blob來(lái)說(shuō),metadata page記錄了該blob的所有信息,數(shù)據(jù)存放于分配給該blob的cluster中。在創(chuàng)建blob時(shí),首先會(huì)為其分配blob id以及metadata page,其次更新metadata region。當(dāng)對(duì)blob進(jìn)行寫(xiě)入時(shí),首先會(huì)為其分配cluster,其次更新該blob的metadata page,最后將數(shù)據(jù)寫(xiě)入,并持久化到磁盤(pán)中。

為了實(shí)現(xiàn)對(duì)磁盤(pán)空間的動(dòng)態(tài)分配管理,Blobstore中為每個(gè)blob分配的cluster并不是連續(xù)的。對(duì)于每個(gè)blob,通過(guò)相應(yīng)的結(jié)構(gòu)維護(hù)當(dāng)前使用的cluster以及metadata page的信息:clusters與pages。Cluster中記錄了當(dāng)前該blob所有cluster的LBA起始地址,pages中記錄了當(dāng)前該blob所有metadata page的LBA起始地址。

Blobstore實(shí)現(xiàn)了對(duì)磁盤(pán)空間分配的動(dòng)態(tài)管理,并保證斷電不丟失數(shù)據(jù),因此Blob具有persistent特性。Blobstore中的配置信息與數(shù)據(jù)信息均在super block與metadata region中管理,在重啟后,若要保持persistent,可以通過(guò)Blobstore中所提供的load操作。

注意:

Blob的persistent主要是針對(duì)NVMe這類(lèi)bdev。對(duì)于Malloc bdev,由于其本身的性質(zhì),是無(wú)法保證Blob的persistent,需要重啟后進(jìn)行重新配置。

下面通過(guò)文件的讀寫(xiě)來(lái)講解BlobFS與Blobstore中的I/O流程:

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

為了提高文件的讀取效率,BlobFS在內(nèi)存中提供了cache buffer。在文件讀寫(xiě)時(shí),首先會(huì)進(jìn)行read ahead操作,將一部分?jǐn)?shù)據(jù)從磁盤(pán)預(yù)先讀取到內(nèi)存的buffer中。其后,根據(jù)cache buffer的大小,對(duì)文件的I/O進(jìn)行切分,使每個(gè)I/O的最大長(zhǎng)度不超過(guò)一個(gè)cache buffer的大小。對(duì)于拆分后的文件I/O,會(huì)根據(jù)其offset在cache buffer tree中查找相應(yīng)的buffer。若存在,則直接從cache buffer中讀取數(shù)據(jù),進(jìn)行memcpy。而對(duì)于沒(méi)有緩存到cache buffer中的數(shù)據(jù),將會(huì)對(duì)該文件的讀取,轉(zhuǎn)換到該文件對(duì)應(yīng)的Blob進(jìn)行讀取。對(duì)Blob讀取時(shí)候,根據(jù)已打開(kāi)的blob結(jié)構(gòu)中記錄的信息,可以獲取該blob所有cluster的LBA起始位置,并根據(jù)讀取位置的offset信息,計(jì)算相應(yīng)的LBA地址。最后向SPDK bdev層發(fā)送異步的讀請(qǐng)求,并等待I/O完成。BlobFS所提供的讀操作為同步讀,I/O完成后會(huì)在callback函數(shù)中,通過(guò)信號(hào)量通知BlobFS完成信號(hào),至此文件讀取結(jié)束。

對(duì)于cache buffer tree,其結(jié)構(gòu)如下所示:

Cache buffer tree是由多層樹(shù)結(jié)構(gòu)組成。最底層Level 0葉子節(jié)點(diǎn)為buffer node,是用于存放數(shù)據(jù)的buffer。Level 0以上的其它層中,均為tree node,用于構(gòu)建樹(shù)的索引結(jié)構(gòu)。在文件讀寫(xiě)的時(shí)候,根據(jù)文件結(jié)構(gòu)中的根節(jié)點(diǎn)以及讀取位置的offset信息,在樹(shù)結(jié)構(gòu)中通過(guò)索引查找buffer node的位置,即從Level N,逐步定位到對(duì)應(yīng)的Level 0的葉子節(jié)點(diǎn)。

文件寫(xiě)入:文件寫(xiě)入操作的流程圖如下所示:

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

總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 磁盤(pán)
    +關(guān)注

    關(guān)注

    1

    文章

    389

    瀏覽量

    25693
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3905

    瀏覽量

    65878
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    849

    瀏覽量

    27663

原文標(biāo)題:再見(jiàn),Linux內(nèi)核!文件系統(tǒng)直接訪(fǎng)問(wèn)SSD

文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    頁(yè)面與地址變換結(jié)構(gòu)

    分頁(yè)存儲(chǔ)管理是將作業(yè)的邏輯地址劃分為一系列同等大小的部分,稱(chēng)為頁(yè)。并為各頁(yè)加以編號(hào),每個(gè)作業(yè)的頁(yè)的編號(hào)都是從0開(kāi)始的。與之類(lèi)似,把可用的物理內(nèi)存也劃分為同樣大小的連續(xù)的部分,稱(chēng)為或頁(yè)
    發(fā)表于 08-02 06:14

    STM32的內(nèi)存映射被劃分為哪幾部分

    內(nèi)存映射在一些桌面程序,整個(gè)內(nèi)存映射是通過(guò)虛擬內(nèi)存來(lái)進(jìn)行管理的,使用一種稱(chēng)為內(nèi)存管理單元(MMU)的硬件結(jié)構(gòu)來(lái)將程序的內(nèi)存映射到物理RAM。然后在對(duì)于RAM緊缺的嵌入式系統(tǒng)
    發(fā)表于 12-09 07:18

    內(nèi)存管理程序結(jié)構(gòu)

    內(nèi)存管理程序結(jié)構(gòu)內(nèi)存分配方式內(nèi)存管理函數(shù)mallocrealloccallocmemsetfree堆和棧的區(qū)別管理方式不同空間大小不同是否產(chǎn)生碎片增長(zhǎng)方向不同
    發(fā)表于 12-17 07:15

    RT-Thread系統(tǒng)動(dòng)態(tài)內(nèi)存堆有哪幾種管理算法

    管理上,根據(jù)上層應(yīng)用及系統(tǒng)資源的不同,有針對(duì)性地提供了不同的內(nèi)存分配管理算法。內(nèi)存堆管理根據(jù)具體內(nèi)存設(shè)備劃分為三種情況:針對(duì)小內(nèi)存
    發(fā)表于 03-31 13:53

    關(guān)于RTT支持的內(nèi)存分配算法

    的,能夠分配相同大小內(nèi)存的zone會(huì)鏈接在一個(gè)鏈表,而72種對(duì)象的zone鏈表則放在一個(gè)數(shù)組(zone arry)中統(tǒng)一管理。 下面是分配
    發(fā)表于 04-27 14:40

    關(guān)于RTT支持的內(nèi)存分配算法

    是固定的,能夠分配相同大小內(nèi)存的zone會(huì)鏈接在一個(gè)鏈表,而72種對(duì)象的zone鏈表則放在一個(gè)數(shù)組(zone arry)中統(tǒng)一管理。 下面是
    發(fā)表于 04-27 14:42

    IP地址管理和子網(wǎng)劃分基礎(chǔ)

    本章內(nèi)容:• IP地址基礎(chǔ)。• 子網(wǎng)劃分的目的。• 基本的固定長(zhǎng)度掩碼。Pv4的地址管理主要用于給一個(gè)物理設(shè)備分配一個(gè)邏輯地址。聽(tīng)起來(lái)很復(fù)雜,但實(shí)際上
    發(fā)表于 07-31 10:13 ?44次下載

    認(rèn)知網(wǎng)絡(luò)基于功率分配的收發(fā)聯(lián)合迭代結(jié)構(gòu)

    認(rèn)知網(wǎng)絡(luò)基于功率分配的收發(fā)聯(lián)合迭代結(jié)構(gòu)_李蠡
    發(fā)表于 01-07 16:24 ?0次下載

    基于劃分思想的文件結(jié)構(gòu)化相似性比較方法

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

    linux內(nèi)存管理的SLAB分配器詳解

    管理區(qū)頁(yè)框分配器,這里我們簡(jiǎn)稱(chēng)為頁(yè)框分配器,在頁(yè)框分配主要是管理物理內(nèi)存,將物理內(nèi)存的頁(yè)框
    發(fā)表于 05-17 15:01 ?2378次閱讀
    linux內(nèi)存<b class='flag-5'>管理</b><b class='flag-5'>中</b>的SLAB<b class='flag-5'>分配</b>器詳解

    bootmem分配器使用的數(shù)據(jù)結(jié)構(gòu)

    在內(nèi)核初始化的過(guò)程需要分配內(nèi)存,內(nèi)核提供了臨時(shí)的引導(dǎo)內(nèi)存分配器,在頁(yè)分配器和分配器初始化完畢
    的頭像 發(fā)表于 07-22 11:18 ?1656次閱讀

    Linux內(nèi)核之分配

    為了解決小塊內(nèi)存的分配問(wèn)題,Linux 內(nèi)核提供了分配器,最早實(shí)現(xiàn)的分配器是SLAB 分配
    的頭像 發(fā)表于 07-27 09:35 ?1889次閱讀

    Linux內(nèi)核引導(dǎo)內(nèi)存分配器的原理

    Linux內(nèi)核引導(dǎo)內(nèi)存分配器使用的是伙伴系統(tǒng)算法。這種算法是一種用于動(dòng)態(tài)內(nèi)存分配的高效算法,它將內(nèi)存空間劃分為大小相等的,然后將這些組合
    發(fā)表于 04-03 14:52 ?552次閱讀

    文件存儲(chǔ)和存儲(chǔ)的區(qū)別和聯(lián)系

    ,它將文件以樹(shù)狀結(jié)構(gòu)進(jìn)行組織,每個(gè)文件都被分配一個(gè)唯一的文件名。文件系統(tǒng)將文件劃分為邏輯上的或數(shù)據(jù),然后將這些
    的頭像 發(fā)表于 12-20 17:16 ?1664次閱讀

    CIDR的IP地址分配管理

    和路由聚合方法。 CIDR摒棄了傳統(tǒng)的基于類(lèi)的IP地址分配方式,采用的是可變長(zhǎng)子網(wǎng)掩碼技術(shù)的擴(kuò)展。 假設(shè)一個(gè)組織獲得了一個(gè) CIDR 地址,如10.0.0.0/16。它可以根據(jù)自己的需求進(jìn)一步劃分成更小的子網(wǎng)。比如,可以將其
    的頭像 發(fā)表于 12-26 10:01 ?559次閱讀
    主站蜘蛛池模板: 成年人啪啪网站 | 国产午夜视频在线观看 | 四虎在线观看 | 天天操天天摸天天爽 | 五月停停 | 乌克兰一级毛片 | 亚洲精品私拍国产福利在线 | 日韩特黄特色大片免费视频 | www.天天色| 亚洲卡5卡6卡7国色天香 | 日本一区视频在线观看 | 5g影院午夜伴侣 | 色中文网| 天天操夜夜添 | 91正在播放 | 欧美性xxxxbbbb| 久草资源免费 | 在线视频黄 | 欧美三级影院 | 日日操夜夜操免费视频 | 国产在线小视频 | 亚洲加勒比在线 | 中文字幕一区二区三区四区五区 | 天天伊人网 | 亚洲国产成人最新精品资源 | 亚洲精品美女久久久久网站 | 久久黄网站 | 午夜影院0606免费 | 狠狠干网站| 黄a视频在线观看 | 能可以直接看的av网址 | 中文天堂最新版www官网在线 | 成人窝窝午夜看片 | 三级特黄视频 | 你懂的亚洲 | 亚洲www网站 | 国产日本特黄特色大片免费视频 | 老熟女毛片 | 九九九精品午夜在线观看 | 黄视频福利 | 91视频综合网 |