一种基于分布式存储的磁盘空间管理方法及系统与流程

文档序号:29086548发布日期:2022-03-02 01:32阅读:210来源:国知局
一种基于分布式存储的磁盘空间管理方法及系统与流程

1.本发明涉及分布式存储领域,具体涉及一种基于分布式存储的磁盘空间管理方法及系统。


背景技术:

2.分布式存储是将多台服务器(server)组合成一个存储池,数据分散存储到服务器的本地硬盘上。如图1所示,一个存储池里面可以包含多个服务器(如server1、server2和server3),每个服务器上存在多块硬盘(例如server1中的disk1、disk2和disk3),每一块硬盘承载系统的一部分数据(p1~p9)。分布式存储的具备良好的扩展性,也能够提供海量的存储空间。
3.在分布式块存储场景下,对外提供存储卷供用户进行读写。每个存储卷的数据按照固定大小进行分片,分片后的数据按照一定策略分布式的保存在服务器硬盘上。
4.针对每块硬盘,分布式存储软件需要管理磁盘上的数据。为了得到比较好的存储性能,一般会直接使用裸盘的方式管理存储空间,也就是由软件直接访问磁盘的lba(logical block address,逻辑区块地址)地址,按照磁盘起始地址+偏移这种方式来写入和读取数据,同时需要有元数据来记录用户卷上的数据和磁盘上数据的映射关系。
5.当用户写入新数据时,数据在磁盘地址上的分布情况会直接影响到存储的写入和读取的性能。通常情况下,分布式存储中会使用位图来管理磁盘空间的分布,比如将整个磁盘空间按照4kb大小进行划分,每4kb存储空间使用1个bit来描述使用情况,0表示未使用,1表示已使用。当需要写入新数据时,查找bitmap(位图),分配未使用的bit位所对应的存储空间即可。
6.通过位图管理磁盘存储空间,当使用一段时间后,数据经过多次的写入,删除之后,由于写入删除的随机性,会导致磁盘空间的碎片化,bitmap上会存在大量的空洞。这时再写入新数据,数据在磁盘的分配上就会变得不连续,数据写入时磁盘需要多次寻道再写入,读取时也需要从磁盘不同位置分别读取数据再拼接起来,这样会导致存储性能的急剧下降。
7.例如图2中,bitmap分配3个数据块(斜线部分代表分配的数据块),分别为20~24kb,28~36kb,40~44kb,按照分配的物理空间,写入一个16kb的数据,需要3次磁盘写入,读取16kb的数据时,也需要读取3次磁盘。


技术实现要素:

8.针对现有技术中存在的缺陷,本发明的目的在于提供一种基于分布式存储的磁盘空间管理方法及系统,提高数据写入磁盘的空间连续性,数据写入磁盘和从磁盘读取时,减少写入和读取的次数,提升存储性能。
9.为达到以上目的,一方面,采取一种基于分布式存储的磁盘空间管理方法,包括:
10.将整个磁盘的物理空间按照不同的空间粒度划分为多层,最上层的空间粒度最
小,每下一层的空间粒度均是上一层空间粒度的相同倍数,各层分别构建该层的bitmap;
11.写入数据时,选择空间粒度不大于待写入数据、且最接近待写入数据的一层,为待写入数据分配存储空间,若该层没有足够的存储空间进行分配,则向上一层查找存储空间并重新分配,直至在最上层完成存储空间的分配;
12.删除数据时,对已经分配的存储空间进行回收。
13.优选的,将整个磁盘的物理空间按照不同的空间粒度划分为多层,包括:
14.磁盘初始化时,以预设的最小空间粒度将所有存储空间划分为多个数据块,并构造最上层的bitmap,根据最上层的bitmap,在内存中构建其他层的bitmap。
15.优选的,最上层的bitmap采用1个bit代表最上层数据块的使用情况,1表示已使用,0表示未使用;
16.其余层的bitmap采用2个比特代表该层数据块的使用情况,00完全未使用、01表示部分未使用和11表示全部已使用。
17.优选的,存储空间分配完成、以及存储空间回收后,更新每一层的bit位;最上层的bitmap更新后进行持久化保存。
18.优选的,相邻两层中,下一层的一个数据块对应上一层一组数据块,当上一层的同组数据块全都是1或11时,下一层对应的数据块为11;当上一层同组的数据块全都是0或00时,下一层对应的数据块为00;当上一层同组的数据块属于其他情况时,下一层对应的数据块为01。
19.优选的,数据读取时,查询数据每个分片的元数据信息,按照元数据中记录的数据存储位置,读取数据;所述元数据信息在数据写入时同步生成,记录每个分片在磁盘上的位置信息。
20.优选的,删除数据时,查询数据对应的元数据,在最上层将元数据对应位置的数据块置0,然后根据与该数据块同组的其他数据块的bit位,对下一层对应数据块的bit位进行更新,直至最下层对应的数据块更新完毕。
21.本发明还提供一种基于分布式存储的磁盘空间管理系统,包括:
22.分配器,其用于将整个磁盘的物理空间按照不同的空间粒度划分为多层,最上层的空间粒度最小,每下一层的空间粒度均是上一层空间粒度的相同倍数,各层分别构建该层的bitmap;
23.所述分配器还包括写入模块和删除模块,写入模块用于写入数据时,选择空间粒度不大于待写入数据、且最接近待写入数据的一层,为待写入数据分配存储空间,若该层没有足够的存储空间进行分配,则向上一层查找存储空间并重新分配,直至在最上层完成存储空间的分配;删除模块用于删除数据时,对已经分配的存储空间进行回收。
24.优选的,所述分配器包括:
25.第一划分模块,用于在磁盘初始化时,以预设的最小空间粒度将所有存储空间划分为多个数据块,并构造最上层的bitmap,
26.第二划分模块,用于加载最上层的bitmap,根据最上层的bitmap,在内存中构建其他层的bitmap。
27.优选的,最上层的bitmap采用1个bit代表最小空间粒度的使用情况,1表示已使用,0表示未使用;
28.其余层的bitmap采用2个比特代表该层空间粒度的使用情况,00表示完全未使用、01表示部分未使用和11表示全部已使用。
29.优选的,所述写入模块完成存储空间的分配后,更新每一层的bit位;
30.所述删除模块完成存储空间回收后,更新每一层的bit位;
31.最上层的bitmap更新后进行持久化保存。
32.上述技术方案中的一个具有如下有益效果:
33.物理空间按照不同的空间粒度划分为多层,通过不同层的bitmap来进行存储空间的分配和回收,选择空间粒度不大于待写入数据、且最接近待写入数据的一层,为待写入数据分配连续的存储空间,若该层没有足够的存储空间,则向上一层查找存储空间并重新分配,由于下一层的空间粒度是上一层空间粒度的倍数,因此在level0能够最大限度的保证数据在磁盘上的连续性,提高数据写入时,大块数据在磁盘上的连续保存,减少大块数据被拆分成很多个不连续的小块数据。
34.并且,在进行数据写入和数据读取时,大部分连续的数据块保存方式能够减少写入和读取的次数,提升存储的整体性能。
附图说明
35.图1为背景技术中分布式存储集群示意图;
36.图2为背景技术中bitmap分配示意图;
37.图3为本发明实施例物理空间按照不同的空间粒度划分为多层的示意图;
38.图4为本发明实施例在level0的bitmap上分配存储空间示意图;
39.图5为本发明实施例存储空间分配流程图。
具体实施方式
40.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
41.本发明提供一种基于分布式存储的磁盘空间管理方法,按照不同的空间粒度将整个磁盘的物理空间划分为多层,并保证最上层的空间粒度最小,下一层的空间粒度是上一层空间粒度的倍数,且每相邻两层之间的倍数相同,然后每层分别构建该层的bitmap。
42.写入数据时,选择空间粒度不大于待写入数据、且最接近待写入数据的一层,在该层为待写入数据分配连续的存储空间,若该层没有足够的存储空间进行分配,则向上一层查找存储空间并重新分配,直至在最上层完成存储空间的分配;删除数据时,对已经分配的存储空间进行回收。
43.如图3所示,提供一个物理空间按照不同的空间粒度划分为多层(n≥2,且n为自然数)的实施例,本实施例中,将整个物理空间分为4层,每一层最小的空间单位代表着空间大小不同,在其他实施例中,也可以分为其他数量的层数。最上层为level0,其存储空间的空间粒度为4kb;下一层为level1,表示空间粒度为16kb的存储空间;再下一层为level2,表示空间粒度为64kb的存储空间;最后一层是level3,表示空间粒度为256kb的存储空间。除
level0之外,每一层的空间粒度都是上一层空间粒度的4倍,从level0~level3各自构建自己的bitmap。
44.进一步的,提供每一层划分的实施例。
45.首先把物理空间按照最小空间粒度(即最小颗粒度4kb)划分为若干数据块,形成level0,建立level0的bitmap。采用1个bit代表4kb物理空间的使用情况,1表示物理空间已使用,0表示物理空间未使用。
46.按照level0最小空间粒度的倍数(本实施例中为4倍)划分磁盘空间,作为level1,并建立level1的bitmap。level1的每个数据块代表16kb大小的物理空间,由于16kb的存储空间上可能存在部分使用,部分空闲的情况,所以使用两个bit位管理磁盘空间,00表示这16kb的数据完全未使用,01代表部分未使用,11代表全部已使用。
47.按照level1最小空间粒度的倍数(本实施例中为4倍)划分磁盘空间,作为level2,并建立level2的bitmap,level2的每个数据块代表64kb大小的物理空间,同样使用两个bit位管理磁盘空间,00表示这64kb的数据完全未使用,01代表部分未使用,11代表全部已使用。
48.按照level2最小空间粒度的倍数(本实施例中为4倍)划分磁盘空间,作为level3,并建立level3的bitmap,level3的每个数据块代表256kb大小的物理空间,同样使用两个bit位管理磁盘空间,00表示这256kb的数据完全未使用,01代表部分未使用,11代表全部已使用。
49.基于上述实施例,提供一个存储空间分配的实施例,当写入数据时,按照如下策略在磁盘上为待写入数据分配存储空间。
50.首先判断待写入数据的大小,选择空间粒度不大于待写入数据、并且最接近待写入数据的一层。
51.当待写入数据大小size≥level3的数据块大小(256kb)时,在level3的bitmap上查找空闲bit,找到后分配空间粒度为256kb的存储空间,如果没有足够的存储空间进行分配(即没有可以分配的256kb空闲空间),则向上查找level2的bitmap,在level2重新空间粒度为分配多个64kb的存储空间,如果level2也没有足够的存储空间进行分配,则再向上查找level1的bitmap,分配空间粒度为16kb的存储空间,如果level1没有足够的存储空间进行分配,则继续向上查找level0的bitmap,按照最小空间粒度4kb完成存储空间的分配。
52.当待写入数据大小size,满足256kb>size≥level2的数据块大小(64kb)时,在level2的bitmap上查找完全空闲的数据块,找到后分配空间粒度为64kb的存储空间,如果level2没有足够的存储空间进行分配,则向上查找level1的bitmap,分配空间粒度为16kb的存储空间。如果level1还是没有足够的存储空间进行分配,则继续向上查找level0的bitmap,按照最小空间粒度4kb完成存储空间的分配。
53.当写入磁盘的数据size,满足64kb>size≥level1的数据块大小(16kb)时,在level1的bitmap上查找完全空闲的数据块,找到后分配空间粒度为16kb连续的存储空间,如果level1没有足够的存储空间进行分配,则向上查找level0的bitmap,按照4kb完成存储空间分配。
54.当写入磁盘的数据size,满足16kb>size≥level0的数据块大小(4kb)时,直接在level0上按照空间粒度为4kb大小分配存储空间。
55.在上述分配存储空间的过程中,除了level0之外的每层,都需要找到完全空闲的数据块作为存储空间分配,也就是说,需要找到两个bit位为00的数据块。采用两个bit位管理磁盘空间,可以准确标识数据的分配情况。在向上一层的bitmap查找存储空间时,可以利用当前层的bitmap加快存储空间分配的速度,比如针对level3已经标识了11的位置,在level2对应的4个bit位必定也是11,查找level2时就可以直接跳过这4个bit位。
56.上述存储空间分配完成后,需要更新level0~level3上每一层的bit位。其中,从对应层levelx分配的存储空间,上述实施例中x=0,1,2,3,则该层的bitmap设置为11或1(该层为level0时),levelx至level0所对应的bitmap设置为11或1。从levelx分配存储空间后,需要检查与相邻下层一个数据块对应的本层4个数据中,其他的3个bit值,若均为11或1,则将下一层对应数据块设置为11,若对应本层4个数据块存在00或者01,则下一层对应的对应数据块设置为01。
57.如图3所示,假定level0中,从左到右只有前四个数据块均为1,其余均为0,那么level1的第一个数据块由于上层对应的一组数据块均为1,则level1的第一个数据块为11,那么同理,level2的第一个数据块为01,level3的第一个数据块为01。
58.如图4所示,上面为level0的bitmap示意图,假定待写入数据为32kb,满足64kb>32kb≥level1,可以在level1的bitmap上分配存储空间,分配时可以优先选择连续的数据块,本实施例在level1中,找到两个相连的数据块作为分配的存储空间。相对于现有的直接在磁盘上分配不连续的4kb数据块,如图4的下面所示,可以看出,在上一层level0的bitmap上,分配到连续的8个4kb数据块,存储空间的连续性优越。按照分配的物理空间,写入1个32kb的数据,需要1次磁盘写入,后续读取32kb的数据时,只需要读取1次磁盘。
59.基于上述实施例,提供一个数据回收的实施例。在删除数据时,需要对已经分配出去的存储空间进行回收,具体包括如下内容:
60.回收数据时,对level0~level3上每一层所对应的bit位都要更新;
61.对level0的bitmap更新,需要进行持久化保存;
62.对level1、level2、level3删除数据时,当映射的所有数据块均未使用时,设置00,当还有部分数据块在使用中,设置为01。
63.具体的,上层业务进行数据删除、或者删除卷等,都会触发底层回收磁盘上的数据。因此删除数据会按照写入时固定的分片,分别删除每一个数据块,每一个数据块都有元数据,元数据是在数据写入时同步生成的。元数据表示每个分片的元数据信息,记录这个分片中数据在磁盘上的位置信息,包括起始地址、长度等。查询元数据可以得到该数据块在磁盘上的偏移位置和长度,所以删除就是对硬盘上指定位置和长度的存储空间进行回收。
64.删除数据时,查询数据对应的元数据,在最上层将元数据对应位置的数据块置0,然后根据与该数据块同组的其他数据块的bit位,对下一层对应数据块的bit位进行更新,直至最下层对应的数据块更新完毕。
65.具体的,首先根据指定位置和长度计算所对应的level0的bit位,将对应level0的bit为由1设置为0,然后查询与之相邻的一组bit位,如果全部为0,则更新level1为00,如果部分为0,则更新level1为01,直至level3。
66.如图5所示,基于上述实施例,提供一种在实际应用中存储空间的分配流程实施例,具体包括如下步骤:
67.s101.磁盘初始化时,以预设的最小空间粒度(本实施例中为4kb)划分所有存储空间,构造level0的bitmap,并且将level0持久化保存。在初始化时,整个磁盘的存储空间全部都是空闲的,所以整个bitmap全部为0。
68.s102.采用在软件中增加一个存储空间的分配器的方式,分配器负责存储空间的分配和回收。分配器在启动时,加载磁盘上level0的bitmap,根据level0的bitmap,在内存中构建level1~level3的bitmap。
69.s103.数据写入时,判断待写入数据的大小,判断从哪个level上开始进行分配,当size≥256kb时,进入s104;当256kb>size≥64kb时,进入s106;当64kb>size≥16kb时,进入s108;16kb>size≥4kb时,进入s110。
70.s104.在level3的bitmap开始进行分配,并进行存储空间分配,进入s105;
71.s105.在level3分配存储空间是否成功,若是,进入s111;若否,进入s106;
72.s106.在level2的bitmap开始进行分配,并进行存储空间分配,进入s107;
73.s107.在level2分配存储空间是否成功,若是,进入s111;若否,进入s108;
74.s108.在level1的bitmap开始进行,并进行存储空间分配,进入s109;
75.s109.在level1分配存储空间是否成功,若是,进入s111;若否,进入s110;
76.s110.在level0的bitmap开始查找,并进行存储空间分配,进入s111;
77.s111.存储空间分配完成,数据写入后,将对应bit置位,对于level0,对应的bit位置1;对于level1、level2、level3,存储空间部分占用设置为01,完全占用设置为11;并且,对于level0,每次更新都需要进行数据的持久化。
78.上述步骤中,在最开始分配的一层存储空间分配成功,则表示连续性最优,分配失败则表示当前磁盘上已经没有连续的大块空闲空间可用了,则向上一层查找,分配小一级的连续空间,如果此次存储空间分配成功,也能保证相对较优的连续性,如果分配不成功,继续向上一层查找。
79.优先选用连续的存储空间进行分配,在level0中没有连续存储空间进行分配,可以选择不连续的4k数据块进行分配,但是如果在level0中没有足够的存储空间可分,就表示整个磁盘已经写满了,没有剩余空间可分配,本发明仅针对磁盘存储空间够分配的情况。
80.上述步骤后,进行数据读取时,查询元数据信息,按照元数据中记录的数据存储位置,读取数据。
81.本发明还提供一种基于分布式存储的磁盘空间管理系统的实施例,可以用来实现上述方法。该系统包括分配器,用来将整个磁盘的物理空间按照不同的空间粒度划分为多层,最上层的空间粒度最小,每下一层的空间粒度均是上一层空间粒度的相同倍数,各层分别构建自己的bitmap。
82.进一步的,分配器包括写入模块和删除模块。写入模块用于写入数据时,选择空间粒度不大于待写入数据、且最接近待写入数据的一层,为待写入数据分配连续的存储空间,若没有满足要求的存储空间则向上一层查找,直至在最上层完成存储空间的分配。删除模块用于删除数据时,对已经分配的存储空间进行回收。当写入模块完成存储空间的分配后,更新每一层的bit位。删除模块完成存储空间回收后,也需要更新每一层的bit位。
83.此外,分配器还包括第一划分模块和第二划分模块。第一划分模块,用于在磁盘初始化时,以预设的最小空间粒度划分所有存储空间,并构造最上层的bitmap。最上层的
bitmap采用1个bit代表最小空间粒度的使用情况,分为已使用和未使用,例如1表示物理空间已使用,0表示物理空间未使用。
84.第二划分模块,用于加载最上层的bitmap,根据最上层的bitmap,在内存中构建其他层的bitmap。其余层的bitmap采用2个比特代表该层空间粒度的使用情况,分为完全未使用、部分未使用和全部已使用,例如00表示这16kb的数据完全未使用,01代表部分未使用,11代表全部已使用。
85.通过不同空间粒度将磁盘的存储空间划分多层,并根据待写入数据,从开始层逐层查找,能够最大限度的保证数据在磁盘上的连续性,大块数据连续保存,不会被拆分成很多个不连续的小块数据。
86.以上仅为本发明的实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均包含在申请待批的本发明的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1