CN115766612A - 一种基于权重转换概率的调度方法及相应的装置 - Google Patents
一种基于权重转换概率的调度方法及相应的装置 Download PDFInfo
- Publication number
- CN115766612A CN115766612A CN202211089124.2A CN202211089124A CN115766612A CN 115766612 A CN115766612 A CN 115766612A CN 202211089124 A CN202211089124 A CN 202211089124A CN 115766612 A CN115766612 A CN 115766612A
- Authority
- CN
- China
- Prior art keywords
- message queue
- weight value
- queue
- target
- weight
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于权重转换概率的调度方法及相应的装置,包括:对待调度的消息队列的权重值进行求和,得到目标权重值;确定目标随机数;从待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,并获取所述第一消息队列的第一权重值;根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列。在本申请中,采用概率调度的方法,在IO压力比较大的情况,能够避免低优先级IO长时间得不到处理饿死的情况。
Description
技术领域
本发明属于分布式存储领域,更具体地,涉及一种基于权重转换概率的调度方法及相应的装置。
背景技术
在分布式存储中,读写IO(Input/Output)分为很多种类型,常见的类型包括:客户端读请求、客户端写请求、副本写请求、副本写响应、恢复读请求、恢复写请求、数据校验读请求等。不同IO类型,对IO处理的响应时间要求不一样。比如客户端读写的IO请求,优先级会相对高一些,这样对客户端的响应会更快,而内部的一些处理请求,比如内部数据校验,因为对响应时间不敏感,优先级会相对低一些,即使处理慢一点也没有影响。
在分布式存储中,客户端、存储节点之间都是通过网络进行通信的。对于每个存储服务来说,需要同时处理客户端和其他存储节点通过网络发过来的IO请求,IO请求首先会进入存储服务的IO等待队列中,然后按照一定的策略从IO等待队列中出队,分配对应的线程进行处理。从IO等待队列中出队的顺序,就决定了IO处理的先后顺序,先被处理到的IO,响应时间就更短,性能就越好;后出队的IO,性能相对就低一些。
在系统的IO压力比较大时,会同时有多种IO请求同时需要处理,优先处理哪种类型的IO,会影响系统的整体性能。目前,一般的处理方法是,将IO分别放入两个优先级不同的队列中,高优先级队列中的IO先处理,处理高优先级完之后,再处理低优先级队列中的IO。
前述处理方法具体为,将不同IO类型分为高优先级和低优先级,高优先级IO放入高优先级队列中,低优先级IO放入低优先级队列;在处理IO请求时,先从高优先级队列中取出消息进行处理,当高优先级队列中消息全部处理之后,再开始处理低优先级队列中IO。
在IO压力比较大的情况,当高优先级队列中持续存在IO时,低优先级队列中IO会长时间得不到处理,也就是会出现饿死的情况;而且,对于优先级队列中的IO无法进行区分,只能统一按照FIFO(先进先出)的方式进行处理。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于权重转换概率的调度方法及相应的装置,其目的在于采用概率调度的方法,在IO压力比较大的情况,能够避免低优先级IO长时间得不到处理的情况,由此解决高优先级队列中持续存在IO时,低优先级队列中IO会长时间得不到处理的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于权重转换概率的调度方法,包括:
对待调度的消息队列的权重值进行求和,得到目标权重值;
确定目标随机数;
从待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,并获取所述第一消息队列的第一权重值;
根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列。
进一步地,所述根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列包括:
计算所述目标权重值与所述第一权重值之间的差值,得到第二权重值;
判断所述第二权重值是否不大于所述目标随机数;
如果所述第二权重值不大于所述目标随机数,则选中所述第一消息队列作为当前调度队列,将所述第一消息队列依次出队IO请求,进行IO读写操作;
进一步地,所述判断所述第二权重值是否不大于所述目标随机数之后还包括:
如果所述第二权重值大于所述目标随机数,则不选中所述第一消息队列,并将所述第一消息队列从所述待调度的消息队列中移除;
从剩余的待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,以更新所述第一消息队列,并更新所述第一权重值;
对待调度的消息队列的权重值重新进行求和,更新所述目标权重值;
再次执行“根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列”。
进一步地,所述对待调度的消息队列的权重值进行求和,得到目标权重值之前还包括:
为不同类型的IO请求设置权重值,并基于所述权重值创建消息队列;
获取IO请求,根据所述IO请求的类型确定所述IO请求的权重值,将所述IO请求存储至与所述权重值相匹配的消息队列中。
进一步地,所述调度方法还包括:
创建第一优先级队列和第二优先级队列,其中,所述第二优先级队列包含至少一个所述消息队列,每个消息队列所对应的权重值不同;
设置权重阈值;
将权重值大于所述权重阈值的IO请求,存储至所述第一优先级队列;
将权重值不大于所述权重阈值的IO请求,存储至所述第二优先级队列,并按照所述IO请求的权重值,将所述IO请求存储至相应的消息队列中。
进一步地,所述调度方法还包括:
优先处理所述第一优先级队列中的IO请求;
当所述第一优先级队列为空时,再从所述第二优先级队列中确定待调度的消息队列,并执行所述对待调度的消息队列的权重值进行求和,得到目标权重值的步骤。
进一步地,所述确定所述目标随机数包括:
生成一个初始随机数,采用所述初始随机数对目标权重值进行求余操作,得到所述目标随机数,其中,所述目标随机数的取值范围为[0~目标权重值)。
进一步地,所述对待调度的消息队列的权重值进行求和,得到目标权重值之前还包括:
在每次执行所述调度方法之前,判断各个消息队列是否为空;
如果所述消息队列不为空,则该消息队列属于待调度的消息队列;
如果所述消息队列为空,则该消息队列不属于待调度的消息队列。
进一步地,所述调度方法还包括:
在选中当前调度队列后,从队列中出队IO请求,判断该IO请求与正在处理的IO请求是否存在冲突;
如果存在冲突,则将该IO请求临时挂起,等待前一个存在冲突的IO请求处理完成后,再处理被临时挂起的IO请求。
按照本发明的另一方面,提供了一种基于权重转换概率的调度装置,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成本申请所述的调度方法。
总体而言,通过本发明实施例所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明实施例提供一种基于权重转换概率的调度方法及相应的装置,包括:对待调度的消息队列的权重值进行求和,得到目标权重值;确定目标随机数;从待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,并获取所述第一消息队列的第一权重值;根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列。
在本申请中,采用概率调度的方法,在IO压力比较大的情况,能够避免低优先级IO长时间得不到处理饿死的情况。
附图说明
图1是本发明实施例提供的一种基于权重转换概率的调度方法的流程示意图;
图2是本发明实施例提供的一种第一优先级队列和第二优先级队列的数据结构示意图;
图3是本发明实施例提供的一种IO请求入队的流程示意图;
图4是本发明实施例提供的另一种基于权重转换概率的调度方法的流程示意图;
图5是本发明实施例提供的一种基于权重转换概率的调度装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
参阅图1,本实施例提供一种基于权重转换概率的调度方法,包括:
步骤101:对待调度的消息队列的权重值进行求和,得到目标权重值;
在实际应用场景下,系统中会存在多种IO类型的请求,例如,客户端读请求、客户端写请求、副本写请求、副本写响应、恢复读请求、恢复写请求、数据校验读请求等。前述IO请求的优先级各不相同,有些优先级高,有些优先级低。
在本实施例中,对每一种类型的IO请求定义一个用于描述优先级的权重值,其中,权重值越大,该IO请求的优先级越高,相同类型的IO请求的权重值相同,不同类型的IO请求的权重值可以相同,也可以不同。
进一步地,创建消息队列,每个消息队列对应一个权重值,该消息队列用于以FIFO(First Input First Output,先入先出)的模式存储具有相同权重值的IO请求。
其中,预先设定权重值的范围,例如,所有IO请求的权重值都在(0,100)范围内。
在此需要说明的是,目标权重值是动态变化的,每一次调度之前需要先判断各个消息队列是否为空,如果为空,则在计算目标权重值时,不纳入其权重。
具体的,在每次执行所述调度方法之前,判断各个消息队列是否为空;如果所述消息队列不为空,则该消息队列属于待调度的消息队列;如果所述消息队列为空,则该消息队列不属于待调度的消息队列。
即,在不同的调度中,目标权重值是动态变化的,取决于全部待调度的消息队列的权重值。
此外,在一次调度中,会经历多轮计算,在不同轮计算中,待调度的消息队列所指代的队列也会发生变化,则对应的目标权重值也不相同,即,在每次调度中,目标权重值也可能是动态变化的。其中,一次调度指的是从开始计算到选中某一个消息队列所历经的全部计算过程。
步骤102:确定目标随机数;
其中,所述目标随机数的取值范围为[0~目标权重值)。
在可选的实施例中,可以在[0~目标权重值)中随机选取一个随机数作为目标随机数。
在优选的实施例中,为了保证随机性,先生成一个初始随机数,该初始随机数的范围不作约定,采用所述初始随机数对所述目标权重值进行求余操作,得到所述目标随机数。
步骤103:从待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,并获取所述第一消息队列的第一权重值;
在本实施例中,会预先为不同类型的IO请求设定权重值,在接收到IO请求后,根据IO请求的类型确定IO请求的权重值,根据IO请求的权重值确定与该IO请求相匹配的消息队列,将具有相同权重值的IO请求以FIFO的模式放入同一个消息队列中,不同权重值的IO请求放入不同的消息队列中。
其中,每一个消息队列均具有权重值,每一个消息队列的权重值与该消息队列中存储的IO请求的权重值相同。
所述第一消息队列的第一权重值实质上就是第一消息队列的权重值,此处的“第一”没有特殊的限定的含义,之所以用其做描述仅仅是为了方便在一类对象中差异出不同的个体进行表述,不应当将其作为顺序或者其他方面带有特殊限定含义解释。
其中,在一次调度中,会经历多轮计算,在不同轮计算中,待调度的消息队列所指代的队列也会发生变化。
例如,在某次调度中,待调度的消息队列包括消息队列q(i)、q(j)、q(k)第一次计算时,消息队列q(k)作为第一消息队列,第一次计算的结果为:不选中所述第一消息队列,则将消息队列q(k)从所述待调度的消息队列中移除,第一次计算时,待调度的消息队列只包括消息队列q(i)、q(j),即,在一次调度中,不同轮的计算,所述待调度的消息队列也是不断更新的。
在次需要说明的是,在一次调度中,虽然所述目标权重值会动态变化,但是目标随机数不做变化。在采用取余的方式确定目标随机数时,只根据第一次计算时所对应的目标权重值进行取余操作,不会随着目标权重值更新。
步骤104:根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列。
在一具体的实施例中,首先,计算所述目标权重值与所述第一权重值之间的差值,得到第二权重值;判断所述第二权重值是否不大于所述目标随机数;如果所述第二权重值不大于所述目标随机数,则选中所述第一消息队列作为当前调度队列,将所述第一消息队列依次出队IO请求,进行IO读写操作。
如果所述第二权重值大于所述目标随机数,则不选中所述第一消息队列,并将所述第一消息队列从所述待调度的消息队列中移除,即,在本轮调度中,所述待调度的消息队列也是不断更新的。
然后,从剩余的待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,以更新所述第一消息队列,并更新所述第一权重值;对待调度的消息队列的权重值重新进行求和,更新所述目标权重值;再次执行“根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列”,再次执行的过程中,由于目标权重值和第一权重值已经被更新了,则第二权重值也会随之被更新,再根据更新后的第二权重值与所述目标随机数之间的关系,确定是否选中更新后的第一消息队列,直至选中一个消息队列作为调度队列。
在实际应用场景下,为了避免IO请求冲突,在选中当前调度队列后,从队列中出队IO请求,判断该IO请求与正在处理的IO请求是否存在冲突;如果存在冲突,则将该IO请求临时挂起,等待前一个存在冲突的IO请求处理完成后,再处理被临时挂起的IO请求。
在本实施例中,可以基于IO请求的权重值设置调度概率,将IO请求所对应的权重与调度概率相对应,按照不同的概率进行IO调度IO请求所对应的权重越高,调度概率越大,越容易被选中,IO请求所对应的权重越低,调度概率越小,越不容易被选中。采用概率调度的方法,在IO压力比较大的情况,能够避免低优先级IO长时间得不到处理饿死的情况;
进一步地,通过自定义不同类型IO请求的权重值,能够灵活的调整IO请求的调度概率;在数据恢复过程中,通过概率调度方法,在同时有大量内部IO和客户端IO时,能够优先保证优先级相对较高的客户端IO优先被处理,这样可以减少IO的响应时间,提升性能。
实施例2:
基于前述实施例1,为了保证较高优先级的IO请求一定能被优先调度,本实施例提供另一种的调度方法,结合图2~图3,具体包括:
在本实施例中,还创建第一优先级队列和第二优先级队列,其中,第一优先级队列中只包含一个消息队列,所述第二优先级队列包含至少一个消息队列,每个消息队列所对应的权重值不同。
所述第一优先级队列用于存储权重值大于设定权重阈值的IO请求,即,第一优先级队列中的消息队列中存储有不同权重值的IO请求,第一优先级队列具有绝对优先级,当第一优先级队列不为空时,优先调度第一优先级队列中的IO请求。
所述第二优先级队列用于存储权重值不大于设定权重阈值的IO请求,在第二优先级队列中,每个消息队列中存储具有相同权重值的IO请求,将每个消息队列所对应的权重值转换为调度概率,其中,权重值与调度概率相对应,IO请求所对应的权重越高,调度概率越大,越容易被选中,IO请求所对应的权重越低,调度概率越小。虽然,某些IO请求的权重较小,但是该IO请求仍然有一定概率被调度到,而不会完全无法调度到,可以避免权重值较低的IO请求一直得不到处理的情况。
针对优先级特别高的场景,设置权重阈值m,其中,0<m<最大权重值,m可以依据实际情况设置,例如,最大权重值=100,m=75;将权重值大于所述权重阈值的IO请求,存储至所述第一优先级队列;将权重值不大于所述权重阈值的IO请求,存储至所述第二优先级队列,并按照所述IO请求的权重值,将所述IO请求存储至相应的消息队列中。
具体地,在接收到IO请求后,根据IO请求的类型确定IO请求的权重值,根据IO请求的权重值确定与该IO请求相匹配的消息队列,将具有相同权重值的IO请求以FIFO的模式放入同一个消息队列中,不同权重值的IO请求放入不同的消息队列中。
前述主要描述的是如何存储IO请求,下面具体描述如何调度IO请求。
在本实施例中,首先,判断第一优先级队列是否为空,如果所述第一优先级队列不为空,则优先处理所述第一优先级队列中的IO请求;如果所述第一优先级队列为空,再从所述第二优先级队列中确定待调度的消息队列,并执行所述对待调度的消息队列的权重值进行求和,得到目标权重值的步骤。
其中,第二优先级队列中的消息按照实施例1的调度方法进行概率调度。
采用概率调度的方法,当IO请求的权重值大于权重阈值m时,采用绝对优先的方式,会从第一优先级队列中出队,这相当于保留的传统IO请求调度中高优先级的调度方式。当IO请求的权重值小于阈值m时,采用概率调度的方式,该方式能够解决第二优先级队列中IO请求会长时间得不到处理饿死的问题,同时对于多种不同权重值的IO请求,也能够根据权重值进行相应概率的调度,权重值越大,优先级越高,被优先处理的概率就越高,权重值越小,优先级越低,被优先处理的概率就越低。
其中,对于权重阈值m、每种IO请求的权重值,都可以在一定范围内灵活进行设置。一般建议阈值m的值要设置的大一些,保证只有少部分优先级很高的IO请求能够进入第二优先级队列,大部分IO请求还是进入普通队列进行概率调度。
实施例3:
下面结合图4,以具体实例说明如何进行基于权重转换概率的调度方法,该调度方法包括:
步骤201:判断第一优先级队列是否为空;
在本实施例中,首先判断第一优先级队列是否为空,如果第一优先级队列不为空,则执行步骤202a,如果第一优先级队列为空,则执行步骤202b。
步骤202a:从第一优先级队列出队;
在第一优先级队列不为空时,优先调度第一优先级队列中的IO请求,然后执行步骤207。
步骤202b:确定目标随机数prio;
在本实施例中,首先确定第二优先级队列中不为空的消息队列,前述不为空的消息队列为本次调度所对应的待调度的消息队列,计算待调度的消息队列的权重之和,得到目标权重值,根据目标权重值确定目标随机数prio。
假设,在本次调度中,在第二优先级队列中,三个消息队列不为空,具体为消息队列q(i)、q(j)、q(k),其中i,j,k代表消息队列的权重值。
计算待调度的消息队列q(i)、q(j)、q(k)的权重之和,得到目标权重值total_prio:
total_prio=i+j+k
在此需要说明的是,目标权重值total_prio是动态变化的,每一次调度之前需要先判断第二优先级队列中各个消息队列是否为空,如果为空,则在计算total_prio时,不纳入其权重。
此外,在一次调度中,目标权重值total_prio也是动态变化的,如果某个消息队列没有被选中,在计算目标权重时,不计入该不被选中的消息队列的权重值。
其中,一次调度指的是从开始计算到选中某一个消息队列所历经的全部过程。
生成一个初始随机数rand(),用这个初始随机数对目标权重值total_prio取余,取余之后会得到一个在[0~total_prio)范围内的一个目标随机数prio:
prio=rand()%total_prio
其中,每一次调度中,目标随机数prio不做变化。在采用取余的方式确定目标随机数时,只根据第一次计算时所对应的目标权重值进行取余操作,不会随着目标权重值更新。
步骤203:确定目标权重值total_prio和第一权重值current_prio;
步骤204:根据目标权重值total_prio和第一权重值current_prio计算第二权重值tp;
按照前述方式确定目标权重值total_prio,其中,在一次调度中,根据实际情况,更新目标权重值total_prio。
对消息队列q(i)、q(j)、q(k)依据权重值进行排序,首先计算权重值最大的消息队列(实施例1的第一消息队列),确定该第一消息队列的第一权重值current_prio,所述第一权重值current_prio实质上就是第一消息队列的权重值。
其中,每一个消息队列均具有权重值,每一个消息队列的权重值与该消息队列中存储的IO请求的权重值相同。
然后,计算所述目标权重值total_prio与所述第一权重值current_prio之间的差值,得到第二权重值tp:
tp=total_prio–current_prio
步骤205:判断第二权重值tp是否不大于目标随机数prio;
判断该消息队列是否从第二优先队列中出队,计算方式为:
如果tp=<prio,则表示选中了这个消息队列,执行步骤206,如果tp>prio,则表示消息队列没有被选中,返回执行步骤203,更新目标权重值、第一消息队列和第一权重值,以继续判断下一个消息队列;
下一个消息队列的判断方式还是用上面的方法,根据更新后的目标权重值和更新后的第一权重值更新第二权重值tp,判断该消息队列是否从第二优先级队列中出队;
tp=tp–current_prio
判断方法同上,如果tp=<prio,则表示选中了这个消息队列,如果tp>prio,则表示消息队列没有被选中,返回执行步骤203,继续判断下一个队列,直至选中一个消息队列;
步骤206:选中当前消息队列;
在选中了当前消息队列后,执行步骤207。
步骤207:IO读写处理。
按照前述方式计算第二优先级队列中的全部消息队列,选择出一个消息队列,从该消息队列中依次出队IO请求,进行处理;
因此,按照本实施例的调度方法,每个消息队列的出队概率与其自身的权重值相匹配,既可以保证权重值较低的IO请求不被饿死,也可以保证权重值较高的IO请求,仍然可以大概率被调度到,尽量不扰乱IO请求的调度优先级。
为了更好的阐述前述方案,下面进行举例说明:
举例一:
假设i=10,j=30,k=60;
在本次调度中,第一次计算时,目标权重值total_prio=i+j+k=100,初始随机数rand()=80;
则,目标随机数prio=rand()%total_prio=80%100=80;
第一消息队列为q(k),第一权重值current_prio=60,则第二权重值tp=total_prio–current_prio=40;
由于tp=40,prio=80,则tp=<prio,满足选中条件,则选中消息队列q(k),对消息队列q(k)中的IO请求进行出队处理。
举例二:
假设i=20,j=30,k=40;
在本次调度中,进行第一次计算时,目标权重值total_prio=i+j+k=90,初始随机数rand()=10;
则,目标随机数prio=rand()%total_prio=10%90=10;
第一消息队列为q(k),第一权重值current_prio=40,则第二权重值tp=total_prio–current_prio=50;
由于tp=50,prio=10,则tp>prio,本次计算不选中q(k);
更新目标权重值total_prio=i+j=20+30=50;
更新第一消息队列为q(j),更新第一权重值current_prio=30;
更新目标权重值tp=total_prio-current_prio=50-30=20;
由于tp=20,prio=10,则tp>prio,本次计算不选中q(j);
更新目标权重值total_prio=i=20;
继续更新第一消息队列为q(i),更新第一权重值current_prio=20;
更新目标权重值tp=total_prio-current_prio=20-20=0;
由于tp=0,prio=10,则tp=<prio,选中q(i)。
按照上面的计算方法,当q(i),q(j),q(k)都存在要处理的消息时,每次都会有的概率从队列q(i)中调度出来处理,有的概率从队列q(j)中调度出来处理,有的概率从队列q(k)中调度出来处理,其中,sum为q(i)、q(j)、q(k)的权重之和。当权重值设置的越大,则每次被选中出队列的概率就越高,而权重值设置的越低,则被选中出队列的概率就越低,但低优先级的队列,也还是有机会被选中,只是概率相对较低。
前述举例一和举例二对应不同的调度情况,用于辅助理解本实施例的方案。下面解释说明,为什么按照本实施例的调度方法可以保证调度概率与IO请求的权重值相对应。
以前述的举例一为依据进行分析,对于q(i),q(j),q(k)这三个队列,q(i)的权重值为i=10,q(j)的权重值为j=30,q(k)的权重值为k=60,以权重值确定各队列的出队概率,可知q(i)的出队概率为10%,q(j)的出队概率为30%,q(k)的出队概率为60%。
按照本实施例的调度方法,在确定是否选中q(k)的过程中,由于tp=total_prio–current_prio=40,目标随机数为[0~100),如果要选中q(k),满足目标随机数为[40~100)中的一个整数即可,则目标随机数为[40~100)中的一个整数的概率为60%。
在确定是否选中q(j)的过程中,目标随机数为[0~40)中的一个整数时,才会跳转到计算q(k)是否满足出队条件的程序中,由于tp=tp–current_prio=10,如果要选中q(k),满足目标随机数为[10~40)中的一个整数即可,则目标随机数为[10~40)中的一个整数的概率为30%。
在确定是否选中q(i)的过程中,目标随机数为[0~10)中的一个整数时,才会跳转到计算q(i)是否满足出队条件的程序中,由于tp=tp–current_prio=0,如果要选中q(i),满足目标随机数为[0~10)中的一个整数即可,则目标随机数为[0~10)中的一个整数的概率为10%。
因此,本实施例的调度方法可以保证调度概率与IO请求的权重值相对应。
本实施例的调度方法,至少具备以下几个优势:
采用概率调度的方法,在IO压力比较大的情况,能够避免低优先级IO长时间得不到处理饿死的情况;
对于普通优先级的队列(第二优先级队列)中多种权重值不同的IO类型,能够按照优先级大小进行相应概率的调度,优先级越大,被优先调度到的概率越高,相对于传统的先进先出的方式,本实施例的方案可以做到更细粒度的区分;
通过自定义不同类型IO请求的权重值,能够灵活的调整IO请求的调度概率;
在数据恢复过程中,通过概率调度方法,在同时有大量内部IO和客户端IO时,能够优先保证优先级相对较高的客户端IO优先被处理,这样可以减少IO的响应时间,提升性能。
实施例4:
在上述实施例1-实施例3提供的基于权重转换概率的调度方法的基础上,本发明还提供了一种可用于实现上述方法的基于权重转换概率的调度装置,如图5所示,是本发明实施例的装置架构示意图。本实施例的基于权重转换概率的调度装置包括一个或多个处理器21以及存储器22。其中,图5中以一个处理器21为例。
所述处理器21和所述存储器22可以通过总线或者其他方式连接,图5中以通过总线连接为例。
所述存储器22作为一种基于权重转换概率的调度方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的基于权重转换概率的调度方法。所述处理器21通过运行存储在所述存储器22中的非易失性软件程序、指令以及模块,从而执行基于权重转换概率的调度装置的各种功能应用以及数据处理,即实现实施例1-实施例3的基于权重转换概率的调度方法。
所述存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,所述存储器22可选包括相对于所述处理器21远程设置的存储器,这些远程存储器可以通过网络连接至所述处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例中的基于权重转换概率的调度方法,例如,执行以上描述的图1所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于权重转换概率的调度方法,其特征在于,包括:
对待调度的消息队列的权重值进行求和,得到目标权重值;
确定目标随机数;
从待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,并获取所述第一消息队列的第一权重值;
根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列。
2.如权利要求1所述的调度方法,其特征在于,所述根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列包括:
计算所述目标权重值与所述第一权重值之间的差值,得到第二权重值;
判断所述第二权重值是否不大于所述目标随机数;
如果所述第二权重值不大于所述目标随机数,则选中所述第一消息队列作为当前调度队列,将所述第一消息队列依次出队IO请求,进行IO读写操作。
3.如权利要求2所述的调度方法,其特征在于,所述判断所述第二权重值是否不大于所述目标随机数之后还包括:
如果所述第二权重值大于所述目标随机数,则不选中所述第一消息队列,并将所述第一消息队列从所述待调度的消息队列中移除;
从剩余的待调度的消息队列中,优先选中权重值最大的消息队列作为第一消息队列,以更新所述第一消息队列,并更新所述第一权重值;
对待调度的消息队列的权重值重新进行求和,更新所述目标权重值;
再次执行“根据所述目标权重值、所述目标随机数和所述第一权重值确定是否选中所述第一消息队列作为当前调度队列”。
4.根据权利要求1所述的调度方法,其特征在于,所述对待调度的消息队列的权重值进行求和,得到目标权重值之前还包括:
为不同类型的IO请求设置权重值,并基于所述权重值创建消息队列;
获取IO请求,根据所述IO请求的类型确定所述IO请求的权重值,将所述IO请求存储至与所述权重值相匹配的消息队列中。
5.根据权利要求4所述的调度方法,其特征在于,所述调度方法还包括:
创建第一优先级队列和第二优先级队列,其中,所述第二优先级队列包含至少一个所述消息队列,每个消息队列所对应的权重值不同;
设置权重阈值;
将权重值大于所述权重阈值的IO请求,存储至所述第一优先级队列;
将权重值不大于所述权重阈值的IO请求,存储至所述第二优先级队列,并按照所述IO请求的权重值,将所述IO请求存储至相应的消息队列中。
6.根据权利要求5所述的调度方法,其特征在于,所述调度方法还包括:
优先处理所述第一优先级队列中的IO请求;
当所述第一优先级队列为空时,再从所述第二优先级队列中确定待调度的消息队列,并执行所述对待调度的消息队列的权重值进行求和,得到目标权重值的步骤。
7.如权利要求1~6任一项所述的调度方法,其特征在于,所述确定所述目标随机数包括:
生成一个初始随机数,采用所述初始随机数对目标权重值进行求余操作,得到所述目标随机数,其中,所述目标随机数的取值范围为[0~目标权重值)。
8.如权利要求1~6任一项所述的调度方法,其特征在于,所述对待调度的消息队列的权重值进行求和,得到目标权重值之前还包括:
在每次执行所述调度方法之前,判断各个消息队列是否为空;
如果所述消息队列不为空,则该消息队列属于待调度的消息队列;
如果所述消息队列为空,则该消息队列不属于待调度的消息队列。
9.如权利要求1~6任一项所述的调度方法,其特征在于,所述调度方法还包括:
在选中当前调度队列后,从队列中出队IO请求,判断该IO请求与正在处理的IO请求是否存在冲突;
如果存在冲突,则将该IO请求临时挂起,等待前一个存在冲突的IO请求处理完成后,再处理被临时挂起的IO请求。
10.一种基于权重转换概率的调度装置,其特征在于,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9任一所述的调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211089124.2A CN115766612A (zh) | 2022-09-07 | 2022-09-07 | 一种基于权重转换概率的调度方法及相应的装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211089124.2A CN115766612A (zh) | 2022-09-07 | 2022-09-07 | 一种基于权重转换概率的调度方法及相应的装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115766612A true CN115766612A (zh) | 2023-03-07 |
Family
ID=85349908
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211089124.2A Pending CN115766612A (zh) | 2022-09-07 | 2022-09-07 | 一种基于权重转换概率的调度方法及相应的装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115766612A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521234A (zh) * | 2023-06-09 | 2023-08-01 | 芯动微电子科技(珠海)有限公司 | 一种处理器管线指令轮询调度的方法和装置 |
-
2022
- 2022-09-07 CN CN202211089124.2A patent/CN115766612A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116521234A (zh) * | 2023-06-09 | 2023-08-01 | 芯动微电子科技(珠海)有限公司 | 一种处理器管线指令轮询调度的方法和装置 |
CN116521234B (zh) * | 2023-06-09 | 2023-12-01 | 芯动微电子科技(珠海)有限公司 | 一种处理器管线指令轮询调度的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107579926B (zh) | 基于令牌桶算法的Ceph云存储系统的QoS设置方法 | |
KR102654689B1 (ko) | 트랜잭션 실패 확률을 고려한 트랜잭션 가속 처리 장치 및 그 방법 | |
CN107515781B (zh) | 一种基于多处理器的确定性任务调度及负载均衡系统 | |
CN112395067A (zh) | 任务调度方法、系统、设备及介质 | |
CN106815080B (zh) | 分布式图数据处理方法和装置 | |
CN115766612A (zh) | 一种基于权重转换概率的调度方法及相应的装置 | |
JP2020502647A (ja) | 異種イベントキュー | |
AU2017340920B2 (en) | Systems and methods for allocating antenna resources | |
WO2015185938A1 (en) | Network | |
CN115686369A (zh) | 一种存储设备多队列仲裁方法、系统、设备及介质 | |
CA2631255A1 (en) | Scalable scheduling of tasks in heterogeneous systems | |
CN112506658B (zh) | 一种服务链中动态资源分配和任务调度方法 | |
CN111190541B (zh) | 存储系统的流控方法以及计算机可读存储介质 | |
CN112579271A (zh) | 用于非实时操作系统的实时任务调度方法、模块、终端和存储介质 | |
EP2477112A1 (en) | Method for efficient scheduling in a resource-sharing system | |
US11194619B2 (en) | Information processing system and non-transitory computer readable medium storing program for multitenant service | |
CN114979022B (zh) | 远程直接数据存取的实现方法、装置、适配器和存储介质 | |
US10656967B1 (en) | Actor and thread message dispatching | |
CN116089033A (zh) | 一种基于多级异构动态队列的任务调度方法 | |
EP2413240A1 (en) | Computer micro-jobs | |
CN115269157A (zh) | 一种任务处理系统、方法、计算机设备及存储介质 | |
CN115202842A (zh) | 任务调度方法及装置 | |
CN111324438A (zh) | 请求的调度方法、装置、存储介质及电子设备 | |
CN116521234B (zh) | 一种处理器管线指令轮询调度的方法和装置 | |
CN111541623B (zh) | 一种数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |