IO请求的调度方法及装置转让专利
申请号 : CN202110375903.8
文献号 : CN112799606B
文献日 : 2021-07-09
发明人 : 孙坚运 , 赵裕众
申请人 : 蚂蚁金服(杭州)网络技术有限公司
摘要 :
权利要求 :
1.一种IO请求的调度方法,包括:获取待调度的目标IO请求,并确定所述目标IO请求是否属于被限流的IO请求;
当所述目标IO请求属于未被限流的第一类IO请求时,将当前时刻确定为所述目标IO请求的调度时刻;
当所述目标IO请求属于被限流的第二类IO请求时,根据当前限流资源比例确定所述目标IO请求的调度时刻,所述当前限流资源比例是当前时刻所属的当前时间周期中用于处理第二类IO请求的资源比例,所述当前限流资源比例根据前一时间周期的前一限流资源比例和前一负载信息计算得到,所述前一负载信息是前一时间周期内调度的第一类IO请求的负载信息,所述调度时刻不小于当前时刻;
将所述目标IO请求加入IO请求集合,所述IO请求集合中的若干IO请求按照调度时刻从小到大的顺序依次被发送到磁盘进行处理。
2.根据权利要求1所述的方法,其中,第一类IO请求包括前台IO请求,第二类IO请求包括后台IO请求。
3.根据权利要求1所述的方法,其中,将所述目标IO请求加入IO请求集合具体包括:将所述目标IO请求加入通过最小堆来管理的IO请求集合。
4.根据权利要求1所述的方法,其中,根据当前限流资源比例确定所述目标IO请求的调度时刻,包括:
根据当前限流资源比例以及获取的上一个第二类IO请求的调度时刻,计算所述目标IO请求的期望调度时刻,所述期望调度时刻与当前限流资源比例负相关;
将当前时刻和所述期望调度时刻的较大值确定为所述目标IO请求的调度时刻。
5.根据权利要求4所述的方法,其中,根据当前限流资源比例确定所述目标IO请求的调度时刻,还包括:根据磁盘的性能确定所述目标IO请求的请求带宽所对应的期望读写频次;
根据当前限流资源比例以及获取的上一个第二类IO请求的调度时刻,计算所述目标IO请求的期望调度时刻,具体包括:根据所述期望读写频次、当前限流资源比例,以及获取的上一个第二类IO请求的调度时刻,计算所述目标IO请求的期望调度时刻;其中,所述期望调度时刻与所述期望读写频次负相关。
6.根据权利要求1至5中任一项所述的方法,其中,当所述目标IO请求属于未被限流的第一类IO请求时,所述方法还包括:确定获取所述目标IO请求的第一时刻;
在第二时刻,从所述IO请求集合中选择所述目标IO请求,并将所述目标IO请求发送到磁盘;其中,在所述第二时刻,所述目标IO请求的调度时刻是所述IO请求集合包含的所有IO请求中的最小值;
接收磁盘返回的请求结果;
向所述目标IO请求对应的应用程序发送所述请求结果,并确定发送所述请求结果的第三时刻;
根据所述第三时刻和所述第一时刻确定所述目标IO请求的响应时间。
7.根据权利要求6所述的方法,其中,还包括:在达到当前时间周期的结束时刻时,根据当前时间周期内调度的第一类IO请求的当前负载信息,确定下一时间周期的下一限流资源比例;其中,当前负载信息具体包括,当前时间周期内调度的第一类IO请求的平均响应时间,以及当前时间周期内调度的第一类IO请求的平均请求带宽。
8.根据权利要求7所述的方法,其中,根据当前时间周期内调度的第一类IO请求的当前负载信息,确定下一时间周期的下一限流资源比例,包括:根据磁盘的性能确定所述平均请求带宽对应的期望响应时间;
当所述平均响应时间不小于所述期望响应时间时,按照预设步长减小所述当前限流资源比例,获得下一时间周期的下一限流资源比例;或者,当所述平均响应时间小于所述期望响应时间时,按照预设步长增大所述当前限流资源比例,获得下一时间周期的下一限流资源比例。
9.根据权利要求7所述的方法,其中,下一时间周期的下一限流资源比例不大于第一预设阈值且不小于第二预设阈值。
10.一种IO请求的调度方法,包括:获取IO请求集合,所述IO请求集合通过权利要求1至9中任一项所述的方法得到,所述IO请求集合中包括若干IO请求,每个IO请求具有对应的调度时刻;
从所述IO请求集合中选择调度时刻最小的IO请求作为当前IO请求;
将所述当前IO请求发送到磁盘,使磁盘处理所述当前IO请求并返回请求结果。
11.根据权利要求10所述的方法,其中,将所述当前IO请求发送到磁盘,具体包括:在所述当前IO请求对应的调度时刻小于当前时刻时,将所述当前IO请求发送到磁盘。
12.一种IO请求的调度装置,包括:请求获取单元,配置为获取待调度的目标IO请求;
分类确定单元,配置为确定所述目标IO请求是否属于被限流的IO请求;
调度时刻确定单元,配置为当所述目标IO请求属于未被限流的第一类IO请求时,将当前时刻确定为所述目标IO请求的调度时刻;当所述目标IO请求属于被限流的第二类IO请求时,根据当前限流资源比例确定所述目标IO请求的调度时刻,所述当前限流资源比例是当前时刻所属的当前时间周期中用于处理第二类IO请求的资源比例,所述当前限流资源比例根据前一时间周期的前一限流资源比例和前一负载信息计算得到,所述前一负载信息是前一时间周期内调度的第一类IO请求的负载信息,所述调度时刻不小于当前时刻;
请求调度单元,配置为将所述目标IO请求加入IO请求集合,所述IO请求集合中的若干IO请求按照调度时刻从小到大的顺序依次被发送到磁盘进行处理。
13.一种IO请求的调度装置,包括:获取单元,配置为获取IO请求集合,所述IO请求集合通过权利要求12所述的装置得到,所述IO请求集合中包括若干IO请求,每个IO请求具有对应的调度时刻;
选择单元,配置为从所述IO请求集合中选择调度时刻最小的IO请求作为当前IO请求;
发送单元,配置为将所述当前IO请求发送到磁盘,使磁盘处理所述当前IO请求并返回请求结果。
14.一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1‑9或者权利要求10‑11中任一项所述的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算设备中执行时,计算设备执行权利要求1‑9或者权利要求10‑11中任一项所述的方法。
说明书 :
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请求,并将所述目标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请求的调度时刻。
元,具体配置为根据所述期望读写频次、当前限流资源比例,以及获取的上一个第二类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资源的占用,加速第二类IO请求的执行,从而实现更好的完
成对IO请求进行调度。
附图说明
本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它
的附图。
具体实施方式
数据后将会停止写入,并且被冻结为冻结Memtable,此外还会创建新的活跃Memtable来负
责新数据的写入。接着,系统后台可以调度转储任务,通过转储任务将冻结Memtable转换格
式转储(Dump)到磁盘中生成SSTable结构文件,此后该冻结Memtable占用的内存可以被释
放以供后续的活跃Memtable使用,其中SSTable结构文件也被表述为转储SSTable。此外,还
可以在转储SSTable积累到相应数量后,由系统后台调度合并任务将相应数量的转储
SSTable合并成基线SSTable并写入磁盘。其中需要说明的是,转储任务或者合并任务将会
通过向磁盘发起若干IO请求来实现向磁盘写入转储SSTable或者基线SSTable,其中由转储
任务和/或合并任务等后台任务发起的IO请求均属于后台IO请求。
Memtable并不包含数据查询请求期望查询的目标数据,则需要向磁盘发起若干IO请求来实
现从磁盘中的SSTable读取目标数据,数据查询请求发起的IO请求属于前台IO请求。
规模数据;如果此时前台任务较多,由于后台IO请求占用过多的磁盘带宽/IO资源,将会导
致前台任务所对应的前台IO请求的响应时间增加,进而造成整个前台任务的响应时间增加
甚至超时失败。
查询请求可以被称为大查询请求。大查询请求会影响其它前台任务所发起的IO请求的响应
时间,造成其它前台任务的响应时间增加甚至超时失败。
体验。然而,如果对部分IO请求进行直接限流,可能会造成被限流的IO请求始终无法被快速
执行而带来其它问题,例如对后台IO请求进行直接限流则可能导致转储任务和合并任何执
行较慢,甚至造成内存空间不足而无法提供更多的活跃Memtable来写入新数据。
内调度的第一类IO请求的负载信息,动态调整当前时间周期内第二类IO请求的限流情况,
实现根据磁盘的负载自适应的分配IO资源。如此,既可在磁盘高负载时降低第二类IO请求
对IO资源的占用,确保未被限流的第一类IO请求能够尽快被执行,即确保系统的高效运行
以提高用户体验,还可在磁盘低负载时增加第二类IO对IO资源的占用,加速第二类IO请求
的执行,从而实现更好的完成对IO请求进行调度。
活配置。例如,可以将全部的前台IO请求划分到未被限流的第一类IO请求,将全部的后台IO
请求划分到被限流的第二类IO请求;或者,将前台IO请求中除大查询请求对应的IO请求以
外的其它前台IO请求划分到第一类IO请求,将大查询请求对应的IO请求以及全部的后台IO
请求划分到第二类IO请求。
前限流资源比例根据前一时间周期的前一限流资源比例和前一负载信息计算得到,前一负
载信息是前一时间周期内调度的第一类IO请求的负载信息,并且该目标IO请求的调度时刻
不小于当前时刻。
请求的响应时间)和样本IOPS(IO request count per second,每秒IO请求计数)。接着对
该组样本io_size、样本io_rt和样本IOPS进行存储,例如存储至配置文件io_
resource.conf中。测量并存储多组样本io_size、样本io_rt和样本IOPS之后,通常来说不
同组中的样本io_size和样本IOPS的乘积相等或者近似于相等,并且样本io_size和样本
IOPS的乘积能够用于表征磁盘提供的IO资源/带宽。因此,可以通过对多个组中的样本io_
size和样本IOPS进行线性拟合,例如进行对数线性拟合,得到样本io_size和样本IOPS之间
的第一线性关系,即得到变量io_size和变量IOPS之间的第一线性关系;以及,通过对多个
组中的样本io_size和样本io_rt进行线性拟合,例如进行简单线性拟合,得到样本io_size
和样本io_rt之间的第二线性关系,即得到变量io_size和变量io_rt之间的第二线性关系。
最后,对第一线性关系和第二线性关系进行存储,以便后续对第一线性关系和第二关系进
行使用,其中第一线性关系和第二线性关系可以用于描述磁盘的性能。
io_size对应的期望读写频次。
之,期望读写频次越大,当前限流资源比例越大,则预期会在处理上一个第二类IO请求后更
短的时间内,处理本次获取的目标IO请求,因此期望时间差越小。
望读写频次。
刻,例如前述公式1中的Expect_IOPS可以作为非必要的参数而被删除。
第二类IO请求进行限流,单位时间内能够有更多的IO资源被用于处理第一类IO请求,同时
还能确保获取的前一个第二类IO请求相比于目标IO请求能够更早的被处理。
调度时刻最小的IO请求,IO请求集合中可以按照调度时刻由小到大的顺序,对IO请求集合
中的若干IO请求进行排序以形成IO请求序列;或者,通过堆结构中的最小堆来管理IO请求
集合,最小堆是已经按照调度时刻的大小进行排序的完全二叉树,其中作为根节点的IO请
求的调度时刻是若干IO请求中的最小值。
通过最小堆来管理IO请求集合时,则可能形成如图3中所示根节点为A1的完全二叉树。其中
需要说明的是,该完全二叉树仅仅是示例性,即除了根节点为A1外,其它节点的所在位置可
能不同于如图3中所示的完全二叉树。
应时间用于确定第一类IO请求的负载信息,从而更新前述的限流资源比例。下面参考图4,
描述属于第一类IO请求的目标IO请求的处理过程。如图4所示,该处理过程在图1基础上,还
可以包括进一步的处理步骤,下面详细描述。
IO请求进行处理时,IO请求集合将会“弹出”当前调度时刻最小的IO请求。如此,随着调度时
刻更小的IO请求依次被读出,在某些时刻,该目标IO请求成为IO请求集合中调度时刻最小
的IO请求。此时,从IO请求集合中读取IO请求时,将读出上述目标IO请求。将该时刻记为第
二时刻。
的最小值。
的所有第一类IO请求的累计请求带宽和累计响应时间,以及更新已调度的所有第一类IO请
求的累计数量。
count,其中前述三个参数的初始值均可以为0。步骤406中具体根据目标IO请求的请求带宽
和响应时间,对cumulative_size以及cumulative_rt的值进行更新,并将cumulative_
count的值加1。
据确定当前时间周期内调度的第一类IO请求的当前负载信息,并基于当前负载信息获取下
一时间周期的下一限流资源比例。
取下一时间周期的下一限流资源比例。
周期的结束时刻时,cumulative_count的值为current_count、cumulative_size的值为
current_size、cumulative_rt的值为current_rt。则,
值,变量io_rt的取值即为平均请求带宽所对应的期望响应时间。
二类IO请求。如果平均响应时间不小于期望响应时间,说明磁盘负载相对较高,减小限流资
源比例,增大对第二类IO请求的限流力度,下一时间周期内能够有更多的IO资源被用于处
理第一类IO请求。
的当前限流资源比例为第一预设阈值或第二预设阈值,则将当前限流资源比例继续作为下
一时间周期的限流资源比例,不再通过步骤4083或步骤4084重新获得下一时间周期的限流
资源比例。
当前IO请求发送到磁盘的IO资源,则执行步骤602。如果当前IO请求的调度时刻不小于当前
时刻,即使存在能够用于将当前IO请求发送到磁盘的IO资源,也将再次通过步骤602从IO请
求集合中重新选择调度时刻最小的IO请求作为新的当前IO请求;对于已经选择的并且未能
被发送到磁盘的IO请求,可以在当前时刻大于该IO请求的调度时刻时,通过步骤603将该IO
请求发送到磁盘。
式均可确保当前IO请求能够尽快被发送到磁盘进行处理。
前时刻的负载可能相对较小。如果将当前IO请求直接发送到磁盘进行处理,能够增加第二
类IO请求在单位时间内占用的IO资源,加速第二类IO请求的处理;如果直到当前时刻小于
当前IO请求的调度时刻时,才将当前IO请求发送到磁盘进行处理,能够确保第二类IO请求
不会过多的占用IO资源,第一类IO请求能够尽快被发送到磁盘进行处理。
确定单元703,配置为确定所述目标IO请求是否属于被限流的IO请求;调度时刻确定单元
705,配置为当所述目标IO请求属于未被限流的第一类IO请求时,将当前时刻确定为所述目
标IO请求的调度时刻;当所述目标IO请求属于被限流的第二类IO请求时,根据当前限流资
源比例确定所述目标IO请求的调度时刻,所述当前限流资源比例是当前时刻所属的当前时
间周期中用于处理第二类IO请求的资源比例,所述当前限流资源比例根据前一时间周期的
前一限流资源比例和前一负载信息计算得到,所述前一负载信息是前一时间周期内调度的
第一类IO请求的负载信息,所述调度时刻不小于当前时刻;请求调度单元707,配置为将所
述目标IO请求加入IO请求集合,所述IO请求集合中的若干IO请求按照调度时刻从小到大的
顺序依次被发送到磁盘进行处理。
的期望调度时刻,所述期望调度时刻与当前限流资源比例负相关;第一确定子单元,配置为
将当前时刻和所述期望调度时刻的较大值确定为所述目标IO请求的调度时刻。
单元,具体配置为根据所述期望读写频次、当前限流资源比例,以及获取的上一个第二类IO
请求的调度时刻,计算所述目标IO请求的期望调度时刻;其中,所述期望调度时刻与所述期
望读写频次负相关。
刻,从所述IO请求集合中选择所述目标IO请求,并将所述目标IO请求发送到磁盘,其中在所
述第二时刻,所述目标IO请求的调度时刻是所述IO请求集合包含的所有IO请求中的最小
值;接收磁盘返回的请求结果;向所述目标IO请求对应的应用程序发送所述请求结果,并确
定发送所述请求结果的第三时刻;根据所述第三时刻和所述第一时刻确定所述目标IO请求
的响应时间。
的下一限流资源比例;其中,当前负载信息具体包括,当前时间周期内调度的第一类IO请求
的平均响应时间,以及当前时间周期内调度的第一类IO请求的平均请求带宽。
按照预设步长减小所述当前限流资源比例,获得下一时间周期的下一限流资源比例;或者,
当所述平均响应时间小于所述期望响应时间时,按照预设步长增大所述当前限流资源比
例,获得下一时间周期的下一限流资源比例。
过如图1或图4中所示方法得到,所述IO请求集合中包括若干IO请求,每个IO请求具有对应
的调度时刻;选择单元803,配置为从所述IO请求集合中选择调度时刻最小的IO请求作为当
前IO请求;发送单元805,配置为将所述当前IO请求发送到磁盘,使磁盘处理所述当前IO请
求并返回请求结果。
能所对应的计算机程序存储在计算机可读介质中或者作为计算机可读介质上的一个或多
个指令/代码进行传输,以便这些功能所对应的计算机程序被计算机执行时,通过计算机实
现本说明书任意一个实施例中所述的方法。
IO请求的调度方法。
提供的IO请求的调度方法。
实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施
例的部分说明即可。
实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才
能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有
利的。
的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应
包括在本发明的保护范围之内。