块存储空间管理

块存储资源管理

块存储 资源管理

由IO路径看资源布局。

IO start

Volume层

Pool层

Thin LUN

Meta Volume

  • Root Extent

    • Alloc Queue
    • Free Queue
    • Map Tree Root
    • Free Tree Root

Data Volume

Alloc Queue

grain分配队列

使用场景:

写thin lun,在查询map tree对应grain未分配时触发空间分配;

step1:空间以顺序分配的方式进行,分配时,增加offset偏移并可能改变队首(对首Item全部分配完时),并生成grain info返回。

step2:在map tree中插入新的映射项(grain id -> Extent ID + offset),如果和前一个node满足合并条件则合并。

step3:如果alloc queue中可分配的grain低于阈值,则触发后台空间分配,首先从SPA中获取Extent并生成Item插入alloc queue队尾,如果SPA空间不足,不能分配Extent,则从free tree中取出Item,直接插入到alloc queue。

Item Head

Tier:0,1,2(为0时,一个bit表示一个grain,每升1,乘以64)

Offset:记录Extent已经分配grain的偏移。

Bitmap:0xFFFFFFFFFFFFFFFF(64字节)

Item

Item

...

Item Tail

Item

结构

  • Extent ID

    表示归属的Extent ID

  • Tier

    多级位图结构

    0:bitmap一个bit表示一个grain的分配情况;

    1:bitmap一个bit表示64个grain的分配情况;

    2:bitmap一个bit表示64*64个grain的分配情况;

    以此类推;

  • Offset

    grain的分配采用顺序分配的方式

    Tier为0时,bitmap的置位便可表示每个grain的分配情况;

    Tier为1时,bitmap中为置为1的bit表示相应64个grain均已分配。不存在64个grain部分分配,tier却为1的情况,未集满时tier不会提升。此时bitmap的置位不能表示每个grain的分配情况,需要offset配合,每次分配一个grain,offset++,遇到已经置位的bit,还需++64;

    Tier为2时,同上;

  • Bitmap

    0xffffffffffffffff(8字节)

    对应不同的tier,每个bit置位表示不同数量的grain分配情况,1、64、64*64...

合并

归属于相同的Extent,且表示的grain范围相同的Item可以合并。

tier为0的item,集满64个bit后,tier提升为1,并根据offset将新的item对应位置的1个bit置位;

tier为1的item,集满64*64个bit后,tier提升为2,并根据offset将新的item对应位置的1个bit置位;

以此类推;

分配

Grain Free Tree

资源释放树

使用场景:

删除thin lun,去激活快照等操作,需要释放响应的grain空间,本树中记录了已经释放的grain,释放的grain从map tree摘下放到free queue,free queue将队列中同一个extent的grain合并到一个item,最终和free tree的item合并,当item集满整个Extent时,将Extent释放给SPA。

node

  • leaf node

    • key:extent id
    • value:item
  • leaf node

  • leaf node...

node

node...

Grain Map Tree

thin lun的空间分配树。

使用场景:

1.写thin lun时,查询本树相应grain是否分配,未分配时从alloc queue分配grain并在本树插入相应node。

2.删lun、去激活快照等,需要回收空间,需要查询并删除本树的节点,同时查询free t,如果free queue已经存在 相同的Extent的Item,将相应grain的offset bit置位,否则生成新的Item插入free queue的队尾。

node

  • leaf node

    相邻的node,如果属于同一个Extent,且Grain ID也相邻,则合并为一个leaf node以节省空间。

在对Thin LUN做连续写时,从分配队列分配的grain很可能满足合并条件(在资源充足,从SPA分配到整个Extent时,连续写分配的Grain必然可以合并;未从SPA分配到Extent时,去Free Tree取出Item分配,这里由于释放grain时的随机性,能合并的可能较小)。

由于存在合并的情况,使用grain id来map tree查询时,可能响应的grain已经和前面的node合并,所以查询策略略有不同,未查询到时,还需要查询前面的node中value的范围是否包含了查询的grain。

- key:LBA/grain size
- value:Extent Id + offset
  • leaf node
  • leaf node...

node

node...

Ckg Map Tree

POOL的CKG映射树(ckg id -> disk + lba)

负责ckg id到盘的路由

node

  • leaf node

    • key:ckg id
    • value:chunks{(diskid,LBA),...}
  • leaf node...

node

node...

Extent Map Tree

LUN的空间映射树(extent id -> ckg id)

该树负责extent到ckg的路由,由pool管理,物理分布在root extent中,节点有nodeMgr分配在非预留的extent node上。

读写:通过extent id进行索引,查到树上存在对应的节点,获取ckg id和offset,到pool的ckg map tree上进一步查询;

node

  • leaf node

    • key:extent id
    • value:ckg id + offset
  • leaf node

  • leaf node...

node

...

node

Free Queue

grain空间释放队列

使用场景:

删lun或去激活快照时,触发空间释放;

step1:将grain id的映射信息从map tree中摘下,并可能导致map tree node分裂(之前相邻的node满足属于同一个Extent且grain id连续)。

step2:以释放的grain的Extent id + offset去free queue查找,若找到,将相应bit置位,否则,生成新的Item插入队尾。

step3:后台释放:遍历free queue,将同一个extent的Item合并。

step4:将合并的Item去free tree查找,找到对应项则合并,否则新插入Item,若合并后Item集满整个Extent,将Extent释放给SPA。

Question:step2先查询,有相同Extent的Item置位对应bit,为什么step3还可能合并同一Extent的Item?存在同一个Extent的Item不能合并的情况?可能跟Item结构有关。。

Item Tail

Item

Item

...

Item Head

Disks

CowTree(Snapshot)

node

  • leaf node

    相邻的node,如果属于同一个Extent,且Grain ID也相邻,则合并为一个leaf node以节省空间。

在对Thin LUN做连续写时,从分配队列分配的grain很可能满足合并条件(在资源充足,从SPA分配到整个Extent时,连续写分配的Grain必然可以合并;未从SPA分配到Extent时,去Free Tree取出Item分配,这里由于释放grain时的随机性,能合并的可能较小)。

由于存在合并的情况,使用grain id来map tree查询时,可能响应的grain已经和前面的node合并,所以查询策略略有不同,未查询到时,还需要查询前面的node中value的范围是否包含了查询的grain。

- key:LBA/grain size
- value:Extent Id + offset
  • leaf node
  • leaf node...

node

node...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343