成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關(guān)于Ceph中Bufferlist的設(shè)計與使用

云計算
如果非要在整個Ceph中,找出一個類最重要,我覺得非Bufferlist莫屬了,原因很簡單,因為Bufferlist負(fù)責(zé)管理Ceph中所有的內(nèi)存。整個Ceph中所有涉及到內(nèi)存的操作,無論是msg分配內(nèi)存接收消息,還是OSD構(gòu)造各類數(shù)據(jù)結(jié)構(gòu)的持久化表示(encode/decode),再到實際磁盤操作,都將bufferlist作為基礎(chǔ)。

[[134327]]

如果非要在整個Ceph中,找出一個類最重要,我覺得非Bufferlist莫屬了,原因很簡單,因為Bufferlist負(fù)責(zé)管理Ceph中所有的內(nèi)存。整個Ceph中所有涉及到內(nèi)存的操作,無論是msg分配內(nèi)存接收消息,還是OSD構(gòu)造各類數(shù)據(jù)結(jié)構(gòu)的持久化表示(encode/decode),再到實際磁盤操作,都將bufferlist作為基礎(chǔ)。

Ceph中bufferlist的設(shè)計還是有些復(fù)雜的,其中包含三個主要的內(nèi)buffer::raw(bufferraw)、 buffer::ptr(bufferptr)和buffer::list(bufferlist)。這三個類都定義在common/buffer.h 中,都是buffer類的內(nèi)部類,而buffer類本身沒有任何內(nèi)容,只起到了一個命名空間的作用。

這三個類的職責(zé)各有不同:

buffer::raw:對應(yīng)一段真實的物理內(nèi)存,負(fù)責(zé)維護這段物理內(nèi)存的引用計數(shù)nref和釋放操作。

buffer::ptr:對應(yīng)Ceph中的一段被使用的內(nèi)存,也就是某個bufferraw的一部分或者全部。

buffer::list:表示一個ptr的列表(std::list),相當(dāng)于將N個ptr構(gòu)成一個更大的虛擬的連續(xù)內(nèi)存。

buffer這三個類的相互關(guān)系可以用下面這個圖來表示:

 

Ceph中Bufferlist的設(shè)計與使用

圖中藍(lán)色的表示bufferlist,橙色表示bufferptr,綠色表示bufferraw。

在這個圖中,實際占用的系統(tǒng)內(nèi)存一共就三段,分別是raw0,raw1和raw2代表的三段內(nèi)存。其中:

raw0被ptr0,ptr1,ptr2使用

raw1被ptr3,ptr4,ptr6使用

raw2被ptr5,ptr7使用

而list0是由ptr0-5組成的,list1是由ptr6和ptr7組成的。

從這張圖上我們就可以看出bufferlist的設(shè)計思路了: 對于bufferlist來說,僅關(guān)心一個個ptr。bufferlist將ptr連在一起,當(dāng)做是一段連續(xù)的內(nèi)存使用。因此,可以通過 bufferlist::iterator一個字節(jié)一個字節(jié)的迭代整個bufferlist中的所有內(nèi)容,而不需要關(guān)心到底有幾個ptr,更不用關(guān)心這些 ptr到底和系統(tǒng)內(nèi)存是怎么對應(yīng)的;也可以通過bufferlist::write_file方法直接將bufferlist中的內(nèi)容出到一個文件中;或者通過bufferlist::write_fd方法將bufferlist中的內(nèi)容寫入到某個fd中。

與bufferlist相對的是負(fù)責(zé)管理系統(tǒng)內(nèi)存的bufferraw。bufferraw只關(guān)心一件事:維護其所管理的系統(tǒng)內(nèi)存的引用計數(shù),并且在引用計數(shù)減為0時——即沒有ptr再使用這塊內(nèi)存時,釋放這塊內(nèi)存。

連接bufferlist和bufferraw的是bufferptr。bufferptr關(guān)心的是如何使用內(nèi)存。每一個bufferptr一定有一個bufferraw為其提供系統(tǒng)內(nèi)存,然后ptr決定使用這塊內(nèi)存的哪一部分。bufferlist只用通過ptr才能對應(yīng)到系統(tǒng)內(nèi)存中,而 bufferptr而可以獨立存在,只是大部分ptr還是為bufferlist服務(wù)的,獨立的ptr使用的場景并不是很多。

通過引入ptr這樣一個中間層次,bufferlist使用內(nèi)存的方式可以非常靈活,這里可以舉兩個場景:

1. 快速encode/decode

在Ceph中經(jīng)常需要將一個bufferlist編碼(encode)到另一個bufferlist中,例如在msg發(fā)送消息的時候,通常msg拿到的 osd等邏輯層傳遞給它的bufferlist,然后msg還需要給這個bufferlist加上消息頭和消息尾,而消息頭和消息尾也是用 bufferlist表示的。這時候,msg通常會構(gòu)造一個空的bufferlist,然后將消息頭、消息尾、內(nèi)容都encode到這個空的 bufferlist。而bufferlist之間的encode實際只需要做ptr的copy,而不涉及到系統(tǒng)內(nèi)存的申請和Copy,效率較高。

2. 一次分配,多次使用

我們都知道,調(diào)用malloc之類的函數(shù)申請內(nèi)存是非常重量級的操作。利用ptr這個中間層可以緩解這個問題,即我們可以一次性申請一塊較大的內(nèi)存,也就是一個較大的bufferraw,然后每次需要內(nèi)存的時候,構(gòu)造一個bufferptr,指向這個bufferraw的不同部分。這樣就不再需要向系統(tǒng)申請內(nèi)存了。***將這些ptr都加入到一個bufferlist中,就可以形成一個虛擬的連續(xù)內(nèi)存。

關(guān)于作者:袁冬博士,UnitedStack產(chǎn)品副總裁,負(fù)責(zé)UnitedStack產(chǎn)品、售前和對外合作工作;云計算專家,在云計算、虛擬化、分布式系統(tǒng)和企業(yè)級應(yīng)用等方面有豐富的經(jīng)驗;對分布式存儲、非結(jié)構(gòu)數(shù)據(jù)存儲和存儲虛擬化有深刻地理解,在云存儲和企業(yè)級存儲領(lǐng)域有豐富的研發(fā)與實踐經(jīng)驗;Ceph等開源存儲項目的核心代碼貢獻者。

原文鏈接:https://www.ustack.com/blog/bufferlist/

責(zé)任編輯:Ophira 來源: ustack博客
相關(guān)推薦

2015-05-20 10:05:10

Ceph分布式文件系統(tǒng)序列化

2023-02-28 08:00:24

2021-05-06 21:26:00

BcacheCeph存儲

2015-03-24 20:10:21

2023-10-12 08:01:00

2018-04-12 08:37:27

2022-07-10 07:48:26

緩存軟件設(shè)計

2017-12-06 14:35:01

OpenStackCeph存儲

2009-12-31 10:13:23

寬帶接入網(wǎng)

2018-05-22 08:37:02

Ceph存儲存儲系統(tǒng)

2010-03-26 19:22:08

F#代理

2017-09-20 09:58:21

數(shù)據(jù)庫“狀態(tài)”字段設(shè)計

2024-06-21 14:41:52

2009-12-28 16:55:25

2013-12-27 09:14:09

2017-06-27 14:48:51

開發(fā)設(shè)計程序員

2025-05-22 08:15:00

2020-07-19 10:26:47

Kubernetes數(shù)據(jù)結(jié)構(gòu)

2025-03-20 09:54:47

2024-07-22 08:09:28

C#模式架構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99精品国产一区二区三区 | 成人国产一区二区三区精品麻豆 | 成人免费毛片在线观看 | 久久综合一区二区 | 久久日本 | 欧美www在线观看 | 久久99久久98精品免观看软件 | 中文字幕在线视频免费观看 | 一本一道久久a久久精品蜜桃 | 国产精品久久久久久久久久久免费看 | 国产精品免费播放 | 91麻豆精品一区二区三区 | 国产精品一区二区三区在线播放 | 91免费电影 | 日一区二区 | 亚洲精品一区二区三区四区高清 | 最新中文字幕在线 | 精品国产一区二区三区久久 | 国产精品久久99 | 情侣黄网站免费看 | www.三级| 欧美综合一区二区三区 | 91欧美激情一区二区三区成人 | 国产资源一区二区三区 | 亚洲精品美女视频 | 亚洲精品99久久久久久 | 国产精品久久久av | 国产一区在线免费 | 成人欧美一区二区三区 | 国产小视频在线观看 | 国产精品成av人在线视午夜片 | 久久狠狠 | 国产精品久久久久久久 | 亚洲视频一区二区三区 | 午夜三区 | av在线一区二区三区 | 国产精品综合久久 | 国产成人精品一区 | 日韩av成人| 欧美日韩精品影院 | 97国产精品视频人人做人人爱 |