基于令牌桶算法的Ceph云存储系统的QoS设置方法与流程

文档序号:13450027阅读:703来源:国知局
基于令牌桶算法的Ceph云存储系统的QoS设置方法与流程

本发明属于分布式存储领域,具体涉及一种基于令牌桶算法的ceph云存储系统的qos设置方法。



背景技术:

云存储是云计算概念延伸和发展出的一个新兴的概念,它指通过集群应用、网络技术或分布式文件系统等网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作共同对外提供数据存储和业务访问功能的一个系统,保证数据的安全性,并节约存储空间。

qos(qualityofservice)是一种控制机制,它提供了针对不同用户或不同数据流采用相应的不同优先级,或者是根据程序的要求,保证数据流的性能达到一定的水准。qos在分组交换网络领域中指网络满足给定业务合同的概率;在电话业务领域中,指线路噪音和声音,适当的音量水平等指标的衡量;在存储领域则主要表现为对存储访问的iops(input/outputoperationspersecond)的控制。提供qos保证资源利用在各个专业领域都是很重要的。

ceph消除了对单一中心节点的依赖,真正实现了无中心结构的一个分布式存储系统,这是其它的分布式存储系统所不能比的。ceph作为目前最流行的开源分布式存储系统,已成为openstack的开源存储方案之一,其已经被纳入处于linux内核之中。而qos在存储中相当重要,由于资源竞争的关系,多种工作负载互相争夺iops,为保证关键任务的带宽可用,提供qos技术是必须的。尤其是在使用ssd的情况下,随着ssd容量的稳步增大,多种工作负载竞争ssd成为常态;而且ssd会进行自动维护,这个日常维护会影响性能,此时qos可以对存储带宽进行优先级排序,使得关键任务在资源竞争激烈的时候也能获得所需的带宽,否则可能发生关键任务竞争不到足够的带宽,而与其它任务一起缓慢的执行。目前ceph更新的版本推出了bluestore等针对ssd的优化架构,但ceph目前尚未有对qos的支持。

令牌桶(tokenbucket)算法是在分组交换计算机网络中实现流量整形和速率限制的最常用的算法之一,它采用固定速率产生令牌的方式应对到来的数据包,根据剩余令牌的数量决定数据包的发放或丢弃。而令牌桶算法不只可以用在网络技术上,在存储等其它领域仍然有很大的应用潜力。



技术实现要素:

本发明所要解决的技术问题是针对上述现有技术的不足提供一种基于令牌桶算法的ceph云存储系统的qos设置方法,本基于令牌桶算法的ceph云存储系统的qos设置方法提供了qos中的limit限制,当众多客户端进行io操作时,可以限制其最大iops,能够避免某些客户端占用大量iops而其它客户端饥饿的现象;同时提供了处理突发的能力,桶的深度即子令牌桶模块保持的最大令牌数可以对突然到来的较大的io进行处理,避免了抖动等问题。

为实现上述技术目的,本发明采取的技术方案为:

一种基于令牌桶算法的ceph云存储系统的qos设置方法,所述ceph云存储系统包括多个客户端和与多个客户端通信连接的服务端,所述服务端设置有总令牌桶模块,所述总令牌桶模块内包括多个子令牌桶模块,每个所述客户端与每个所述子令牌桶模块之间呈一一对应关系,所述qos设置方法包括:

(1)设置最大值和令牌产生速度:预设总令牌桶模块内包含的令牌数量的最大值和子令牌桶模块产生令牌的速度;

(2)产生io请求:客户端产生io请求,服务端将io请求存入相应的io请求集合队列中,其中子令牌桶模块与io请求集合队列之间呈一一对应关系;

(3)获取令牌:服务端内的子令牌桶模块根据令牌产生速度不断产生令牌并将令牌放入子令牌桶模块内,同时保证所有子令牌桶模块内包含的令牌总数量不大于总令牌桶模块内包含的令牌数量的最大值;

(4)取队首io请求:判断io请求集合队列是否为空,若是,则结束,否则子令牌桶模块根据io请求集合队列中的排列顺序取出位于队首的io请求;

(5)请求令牌:子令牌桶模块根据位于队首的io请求的大小、类型和令牌产生速度设置该io请求所需要的令牌数量,若子令牌桶模块内的令牌数量大于等于该io请求所需要的令牌数量,则从子令牌桶模块内取出相同数量的令牌并处理该io请求,将该io请求退出io请求集合队列并返回执行步骤(4);若子令牌桶模块内的令牌数量小于该io请求所需要的令牌数量,则取出子令牌桶模块内剩余所有的令牌,将该io请求所需要的令牌数量减去子令牌桶模块内剩余的所有的令牌数量,将计算得到的结果标记给该io请求并将该结果更新为该io请求所需要的新的令牌数量,将该io请求重新放回io请求集合队列的队首位置,执行下一步骤;

(6)检查io请求:所述子令牌桶模块定期并依次检查io请求集合队列中位于队首的io请求所需要的新的令牌数量是否小于等于子令牌桶模块内的令牌数量,若是,则从子令牌桶模块内取出与位于队首的io请求所需要的新的令牌数量相同的令牌并处理该io请求,将该io请求退出io请求集合队列并返回执行步骤(4),否则子令牌桶模块退出检查。

每个子令牌桶模块和每个客户端之间的处理io请求的方法均按照上述步骤(1)至步骤(6)进行操作。

进一步地,所述服务端将io请求存入相应的io请求集合队列中包括:

(1)服务端根据客户端发送io请求的时间顺序将io请求依次存入io请求集合队列中;

(2)服务端根据io请求集合队列中的每个io请求的调度优先级对io请求的排列顺序进行相应调整。

进一步地,所述io请求集合队列包括读操作io请求集合队列和写操作io请求集合队列,所述读操作io请求集合队列用于存储io请求的读操作,所述写操作io请求集合队列用于存储io请求的写操作。

本发明具有以下技术效果:本发明提供了qos中的limit限制,当众多客户端(用户)进行io请求操作时,可以通过设置每个子令牌桶模块中令牌产生速率限制每个客户端的最大iops,能够避免某些用户占用大量iops而其它用户饥饿的现象;同时提供了处理突发的能力,桶的深度即子令牌桶模块保持的最大令牌数可以对突然到来的较大的io请求进行处理,避免了抖动等问题。本发明为不同io请求制定优先级,并按照该优先级进行优先分配iops,让紧急、重要任务在资源竞争剧烈的时候也能获得足够的iops;并在资源竞争宽松时尽量最大化iops的利用率。

附图说明

图1为本发明的结构示意图。

图2为本发明的工作流程图。

具体实施方式

下面根据图1和图2对本发明的具体实施方式作出进一步说明:

参见图1,一种基于令牌桶算法的ceph云存储系统的qos设置方法,提供qos保证中limit(限制)要求,并能处理一定的突发情况,允许客户iops暂时高于限制值。所述ceph云存储系统包括多个客户端和与多个客户端通信连接的服务端,所述服务端设置有总令牌桶模块,所述总令牌桶模块内包括多个子令牌桶模块,每个所述客户端与每个所述子令牌桶模块之间呈一一对应关系,其中,所述总令牌桶模块是一个总令牌桶,包含很多小令牌桶(子令牌桶模块),对应到每个客户端,客户端产生令牌的速率总和应不大于总令牌桶的最大速率,代表子iops之和为总的iops。

其中所述子令牌桶模块对应到每个客户端上,子令牌桶模块具有提供获取令牌、请求令牌、设置最大值(桶的深度)、设置令牌的产生速率和检查io请求等功能。

所述的获取令牌为根据设置的令牌产生速度n个/t,t为单位时间,则会在经过t时间后产生n*(t/t)个令牌放入子令牌桶模块中,并保证子令牌桶模块内令牌数量不超过设置的最大值。

所述的请求令牌为处理一个io请求时,根据其io请求的大小、类型等判断出它所需的令牌数量,然后试图从子令牌桶模块中取出相应数量的令牌,若令牌数足够则取出令牌并处理该io请求;若令牌数量不足则取出剩余所有令牌并标记给该io,继续等待令牌数量足够时再处理。

所述的设置最大值即设置总令牌桶模块内最多有多少个令牌,当总令牌桶模块内令牌数量大于该最大值时,会自动调整为该最大值。

所述令牌产生速率为单位时间内桶内新增的令牌个数,即该值用来提供qos的limit保证,该值越大则limit值越大,用户所得到的最大iops就越大;反之用户的iops会被限制到某一个较小的平均值。

所述检查io请求即依次检查io请求集合队列中等待处理的io请求,若其请求令牌成功则处理并检查下一个;若失败则退出。

所述io请求集合队列为一个存放io请求的队列,每当用户有新的io请求就会添加到该队列中,等待被处理。

所述突发为意想不到的在短时间内出现比较大量的io,此算法处理突发的能力与设置的令牌产生速率v和桶深度h有关,为h/(m-v),其中m为物理机的最大处理速率。

综上所述,所述qos设置方法具体包括:参见图2,

(1)设置最大值和令牌产生速度:预设总令牌桶模块内包含的令牌数量的最大值和子令牌桶模块产生令牌的速度;

(2)产生io请求:客户端产生io请求,服务端将io请求存入相应的io请求集合队列中,其中子令牌桶模块与io请求集合队列之间呈一一对应关系;

(3)获取令牌:服务端内的子令牌桶模块根据令牌产生速度不断产生令牌并将令牌放入子令牌桶模块内,同时保证所有子令牌桶模块内包含的令牌总数量不大于总令牌桶模块内包含的令牌数量的最大值,若超出预设的最大值时,则根据预设的最大值抛弃多余的令牌;

(4)取队首io请求:判断io请求集合队列是否为空,若是,则结束,否则子令牌桶模块根据io请求集合队列中的排列顺序取出位于队首的io请求;

(5)请求令牌:子令牌桶模块根据位于队首的io请求的大小、类型和令牌产生速度设置该io请求所需要的令牌数量,若子令牌桶模块内的令牌数量大于等于该io请求所需要的令牌数量,则从子令牌桶模块内取出相同数量的令牌并处理该io请求,将该io请求退出io请求集合队列并返回执行步骤(4);若子令牌桶模块内的令牌数量小于该io请求所需要的令牌数量,则取出子令牌桶模块内剩余所有的令牌,将该io请求所需要的令牌数量减去子令牌桶模块内剩余的所有的令牌数量,将计算得到的结果标记给该io请求并将该结果更新为该io请求所需要的新的令牌数量,将该io请求重新放回io请求集合队列的队首位置,执行下一步骤;

(6)检查io请求:所述子令牌桶模块定期并依次检查io请求集合队列中位于队首的io请求所需要的新的令牌数量是否小于等于子令牌桶模块内的令牌数量,若是,则从子令牌桶模块内取出与位于队首的io请求所需要的新的令牌数量相同的令牌并处理该io请求,将该io请求退出io请求集合队列并返回执行步骤(4)和步骤(5),子令牌桶模块检查下一个io请求,否则子令牌桶模块退出检查,退出检查后,在一定的预设周期内(在此周期内,服务端内的子令牌桶模块根据令牌产生速度不断产生令牌并将令牌放入子令牌桶模块内),子令牌桶模块再次进行检查。

所述服务端将io请求存入相应的io请求集合队列中包括:

(1)服务端根据客户端发送io请求的时间顺序将io请求依次存入io请求集合队列中;

(2)服务端根据io请求集合队列中的每个io请求的调度优先级对io请求的排列顺序进行相应调整。所述io请求集合队列可以选择是优先队列,如此若io请求有不同的优先级则可按优先顺序入队列,可实现优先调度。

所述io请求集合队列包括读操作io请求集合队列和写操作io请求集合队列,所述读操作io请求集合队列用于存储io请求的读操作,所述写操作io请求集合队列用于存储io请求的写操作;如此当出现写操作阻塞时,不会影响到读操作的正常处理。

所述io请求可能是分不同类型的,如简单的分为读、写,或者是scrub(擦除)、client(来自客户)等按功能分配,io请求可能根据类型的不同拥有不同的优先级或者进入不同的子队列。io请求进入io请求集合队列后进行等待。

如图1所述,当用户(或其它结构、进程等)需要读写时产生io请求,这时io请求会进入对应的io请求集合队列中进行排队,等待服务端处理;服务端的子令牌桶模块会定时进行一系列操作(包括添加一定数量(由用户配置决定)的令牌和尽量处理io请求集合队列中的io请求),最终将处理的结果返回给客户端。供其判断做出后续操作,所述服务端的子令牌桶模块会定时进行一系列操作;所述添加令牌指会根据设定的最大值抛弃多余的令牌。所述尽量处理,意指只要有足够的令牌可以满足位于队首的io请求,则不断的处理该io请求并使其出o请求集合队列,直到io请求集合队列为空或无法满足队首io,无法满足时,将剩余令牌取出交给io请求,标记io请求所需的令牌数减去相应的数量,然后重新将该io放回队首,等待下一轮的处理。所述处理结果,包括处理成功或失败等信息,若失败,则客户考虑重新发送请求等;若成功,则将相应的信息(如读到的信息)返回给客户。

由于桶的可积累性,当桶内有一定数量的令牌时,令牌桶可以应对一定程度的突发,应对的能力与桶积累的令牌数量和桶产生令牌的速度有关。

本实例中,通过令牌桶的实施,使得ceph云存储支持了qos中的limit(限制),并且能够处理某种程度的突发io,使得ceph更加适应生产环境。

本发明的保护范围包括但不限于以上实施方式,本发明的保护范围以权利要求书为准,任何对本技术做出的本领域的技术人员容易想到的替换、变形、改进均落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1