首页> 中国专利> 输入输出资源管理方法、装置、计算机设备和存储介质

输入输出资源管理方法、装置、计算机设备和存储介质

摘要

本发明公开了输入输出资源管理方法、装置、计算机设备和存储介质,可用于管理云平台的存储设备资源,可确定存储设备IO请求针对的目标存储设备,确定出存储设备IO请求所属的目标控制组,将该请求加入其所属目标控制组的请求集合中,基于目标控制组所属的管理列表可确定目标控制组的状态标识,进而确定第一目标控制组,状态标识用于表征对IO请求的当前提交速度,由目标控制组的令牌桶决定;由此,基于令牌桶和管理列表可快速、灵活地选择合适的第一目标控制组,从第一目标控制组的请求集合中选择目标存储设备IO请求;为其分配令牌,向目标存储设备提交该请求,实现对存储设备的IO资源的充分利用,提升存储设备的IO资源的利用率。

著录项

  • 公开/公告号CN111290858A

    专利类型发明专利

  • 公开/公告日2020-06-16

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN202010390011.0

  • 发明设计人 陈东东;洪志国;罗韩梅;

    申请日2020-05-11

  • 分类号

  • 代理机构深圳翼盛智成知识产权事务所(普通合伙);

  • 代理人汪阮磊

  • 地址 518057 广东省深圳市南山区高新区科技中一路腾讯大厦35层

  • 入库时间 2023-12-17 09:46:46

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-11

    授权

    授权

  • 2020-07-10

    实质审查的生效 IPC(主分类):G06F9/50 申请日:20200511

    实质审查的生效

  • 2020-06-16

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,具体涉及一种输入输出资源管理方法、装置、计算机设备和存储介质。

背景技术

目前,Linux内核提供的一种可以限制单个或多个进程所使用资源的机制,对资源进行精细化管理。

针对存储设备,控制其I/O(Input/Output,输入输出)速率的原理是根据一个时间窗口内,对比存储设备对应的已经下发的I/O资源和按照设定的速率应该下发的I/O资源。若已经下发的I/O资源多于按照设定的速率应该下发的I/O资源,说明下发I/O资源过快,需要等待一段时间,再继续下发I/O资源,但是这种方案并不能灵活管理存储设备的I/O资源,不同任务对存储设备资源的需求不同,所以相关技术中的存储设备资源管理方案,不利于保证任务的质量。

发明内容

本发明实施例提供一种输入输出资源管理方法、装置、计算机设备和存储介质,可以实现对存储设备的输入输出资源的灵活管理,有利于保证任务质量。

本发明实施例提供一种输入输出资源管理方法,该输入输出资源管理方法包括:

在获取存储设备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请求;

标识获取单元,用于:

获取所述目标控制组的第一管理列表和第二管理列表,其中,所述第一管理列表包括状态标识为第一状态标识的目标控制组,所述第二管理列表包括状态标识为第二状态标识的目标控制组;所述第一状态标识下,所述目标控制组的所述第一令牌桶中,剩余令牌数量大于0;所述第二状态标识下,所述目标控制组的所述第一令牌桶中,剩余令牌数量不大于0且所述第二令牌桶中剩余令牌数量大于0,所述第三状态标识下,所述目标控制组的所述第二令牌桶中,剩余令牌数量不大于0;

基于各所述目标控制组所属的管理列表,确定各所述目标控制组的状态标识。

在一个示例中,本实施例的装置还包括创建单元,用于在标识获取单元获取目标控制组的第一管理列表和第二管理列表前,根据所述目标控制组的第一令牌桶和第二令牌桶的剩余令牌数量,确定所述目标控制组的状态标识;其中,若所述目标控制组的第一令牌桶中,剩余令牌数量大于0,确定所述目标控制组的状态标识为所述第一状态标识;若所述目标控制组的第一令牌桶中,剩余令牌数量不大于0,且所述第二令牌桶中剩余令牌数量大于0,确定所述目标控制组的状态标识为所述第二状态标识;若所述目标控制组的第二令牌桶中,剩余令牌数量不大于0,确定所述目标控制组的状态标识为所述第三状态标识;基于所述第一状态标识下的目标控制组,创建第一管理列表;基于所述第二状态标识下的目标控制组,创建第二管理列表。

在一个示例中,请求选择单元,用于:

基于所述目标存储设备的IO资源,从所述第一管理列表中的目标控制组对应的请求集合中,选择目标存储设备IO请求,其中,所述第一管理列表中的目标控制组为所述第一目标控制组;

在所述第一管理列表对应的选择结束后,基于所述目标存储设备的剩余可用IO资源,从所述第二管理列表中的目标控制组对应的请求集合中,选择目标存储设备IO请求,其中,所述第二管理列表中的目标控制组为所述第一目标控制组。

在一个示例中,在所述第一管理列表中,所述目标控制组以链表的形式进行组织,一个链表节点代表一个所述目标控制组;

请求选择单元,用于:基于所述第一管理列表的链表结构,遍历所述第一管理列表中的所述目标控制组,在遍历至每一个所述目标控制组时,根据所述目标存储设备的IO资源,从所述目标控制组的请求集合中,选择目标存储设备IO请求。

在一个示例中,在所述第二管理列表中所述目标控制组以红黑树的形式组织,一个红黑树节点代表一个所述目标控制组,红黑树节点的key值为对应的所述目标控制组的内存地址;

请求选择单元,用于:

遍历红黑树结构的所述第二管理列表,从所述第二管理列表的所述目标控制组中确定候选目标控制组;

基于所述目标存储设备的剩余可用IO资源,从所述候选目标控制组的请求集合中,选择目标存储设备IO请求。

在一个示例中,请求选择单元,用于:获取所述第二管理列表中所述目标控制组的优先级;

获取所述第二管理列表中所述目标控制组的令牌桶容量;

根据所述令牌桶容量以及优先级,从所述第二管理列表中选择候选目标控制组。

在一个示例中,本实施例的装置还包括:第一列表管理元,用于:

获取第一等待列表,所述第一等待列表包括状态标识为所述第三状态标识的所述目标控制组,所述第一等待列表中所述目标控制组以红黑树的形式组织,一个红黑树节点表示一个所述目标控制组,红黑树节点的key值表示所述目标控制组的第一未来转变时刻,所述第一未来转变时刻为所述目标控制组的状态标识由第三状态标识转变为第二状态标识的未来时刻,红黑树的根节点的所述第一未来转变时刻与当前时刻最接近;

在所述第一等待列表的根节点的所述第一未来转变时刻到达时,删除所述第一等待列表中的所述根节点,将所述根节点对应的所述目标控制组添加至所述第二管理列表中。

在一个示例中,本实施例的装置还包括:第二列表管理元,用于:

获取第二等待列表,所述第二等待列表包括状态标识为所述第二状态标识和第三状态标识的所述目标控制组,所述第二等待列表中所述目标控制组以红黑树的形式组织,一个红黑树节点表示一个所述目标控制组,红黑树节点的key值表示所述目标控制组的第二未来转变时刻,所述第二未来转变时刻为所述目标控制组的状态标识由当前的状态标识转变为所述第一状态标识的未来时刻,红黑树的根节点的所述第二未来转变时刻与当前时刻最接近;

在所述第二等待列表的根节点的所述第二未来转变时刻到达时,删除所述第二等待列表中的所述根节点,将所述根节点对应的所述目标控制组添加至所述第一管理列表中。

在一个示例中,本实施例的装置还包括转换单元,用于:

在设备确定单元获取存储设备IO请求后,确定所述存储设备IO请求针对的目标存储设备前,接收终端发送的针对云平台的存储设备的读写操作;

基于所述读写操作的数据,将所述读写操作转换成预设格式的存储设备IO请求。

在一个示例中,所述存储设备IO请求的类型为至少两种,不同类型的存储设备IO请求对应不同的提交优先级;

所述请求选择单元,用于基于所述第一目标控制组管理的请求集合中,各存储设备IO请求对应的提交优先级,从所述请求集合中,选择提交优先级满足预设要求的存储设备IO请求作为目标存储设备IO请求。

本发明实施例还提供一种存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上所述输入输出资源管理方法的步骤。

本发明实施例还提供一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上所述输入输出资源管理方法的步骤。

本发明实施例提供了一种输入输出资源管理方法、装置、计算机设备和存储介质,可以在获取存储设备IO请求后,确定存储设备IO请求针对的目标存储设备,从管理目标存储设备的目标控制组中,确定出存储设备IO请求所属的目标控制组,将存储设备IO请求加入其所属的目标控制组的请求集合中,其中,不同目标控制组用于管理不同任务下针对目标存储设备的存储设备IO请求,对于各目标控制组,分别配置有令牌桶,基于目标控制组所属的管理列表,可以快速确定目标控制组的状态标识,其中,状态标识本身是由所述目标控制组的令牌桶的令牌状态决定的,用于表征目标控制组针对存储设备IO请求的当前提交速度;基于管理列表对同一状态标识下的目标控制组的管理功能,只需要查询少量的管理列表,就可以快速确定目标控制组的状态标识,从而快速确定目标控制组中具有IO请求提交资格的第一目标控制组;由此,基于令牌桶机制,可以准确而快速地确定各个目标控制组对于存储设备IO请求的当前提交速度,从而灵活地选择合适的目标控制组作为第一目标控制组,然后从第一目标控制组管理的请求集合中,选择目标存储设备IO请求;从目标存储设备IO请求对应的令牌桶中,为目标存储设备IO请求分配令牌,向目标存储设备提交分配有令牌的目标存储设备IO请求,实现对存储设备的IO资源的充分利用,提升存储设备的IO资源的利用率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的输入输出资源管理方法的场景示意图;

图2a是本发明实施例提供的一种输入输出资源管理方法的流程图;

图2b是本发明实施例中IO请求提交过程的描示意图;

图2c是本发明实施例提供的管理列表和等待列表的结构示意图;

图3a是本发明实施例提供的一种输入输出资源管理方法的流程示意图;

图3b是本发明实施例提供的一种输入输出资源管理装置的原理示意图;

图4是本发明实施例提供的一种输入输出资源管理装置的结构示意图;

图5是本发明实施例提供的一种计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种输入输出资源管理方法、装置、计算机设备和存储介质。具体地,本实施例提供适用于输入输出资源管理装置的输入输出资源管理方法,该输入输出资源管理装置可以集成在计算机设备中。

该计算机设备可以为终端等设备,例如可以为手机、平板电脑、笔记本电脑、台式电脑等。

该计算机设备还可以为服务器等设备,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(ContentDelivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。

其中,本实施例的输入输出资源管理方法可以应用于云平台,尤其是容器云平台,本实施例的云平台可以是基于上述的云服务器搭建的平台,该云平台允许客户在这个平台上开发、运行和管理应用程序,无需去考虑应用程序的构建和维护工作。

容器云是近两年在云计算技术中新兴的一种产品形态,容器在计算形态上是一种轻量级的虚拟化技术,不同于传统虚拟化的内核级的Guest OS(Guest Operating System,虚拟操作系统)封装,容器服务是进程级的虚拟化形态封装,容器的启动与部署迅速,能够在应用层面根据资源需求快速的部署与调度,生命周期变化速度快。容器云平台可以理解为提供云上的容器技术服务的云平台,本实施例的输入输出资源管理方法,可以由服务器实现,也可以由终端和服务器共同实现。

下面以终端和服务器共同实现该输入输出资源管理方法为例,对输入输出资源管理方法进行说明。

参考图1,本发明实施例提供的输入输出资源管理方法包括终端10和服务器20等;终端10与服务器20之间通过网络连接,比如,通过有线或无线网络连接等,在云平台场景下,终端侧的用户可以是云平台的工作人员或者客户(购买服务的用户)等等,终端侧的输入输出资源管理装置可以以客户端形式集成于终端上,或者终端侧的输入输出资源管理装置可以是服务器提供的网页。

其中,终端10,可以用于向服务器发送针对云平台的存储设备的读写操作,其中,所述服务器为所述云平台的服务器。

其中,服务器20可以用于接收终端发送的针对云平台的存储设备的读写操作;将读写操作转换成满足预设格式的存储设备IO请求,确定所述存储设备IO请求针对的目标存储设备;从管理所述目标存储设备的目标控制组中,确定出所述存储设备IO请求所属的目标控制组,将所述存储设备IO请求加入其所属的目标控制组的请求集合中,其中,不同目标控制组用于管理不同任务下针对所述目标存储设备的存储设备IO请求,对于各所述目标控制组,分别配置有令牌桶;基于所述目标控制组所属的管理列表,确定所述目标控制组对应的状态标识,其中,同一管理列表用于管理同一状态标识下的目标控制组,所述状态标识用于表征所述目标控制组针对所述存储设备IO请求的当前提交速度,所述状态标识由所述目标控制组的令牌桶的令牌状态决定;基于所述状态标识,确定所述目标控制组中具有IO请求提交资格的第一目标控制组;从所述第一目标控制组管理的请求集合中,选择目标存储设备IO请求;从所述目标存储设备IO请求对应的令牌桶中,为所述目标存储设备IO请求分配令牌,向所述目标存储设备提交分配有所述令牌的所述目标存储设备IO请求。

以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。

本发明实施例将从输入输出资源管理装置的角度进行描述,该输入输出资源管理装置具体可以集成在服务器中。该服务器可以为组成云平台的服务器,其中,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是云服务器,本实施例对此没有限制。

如图2a所示,该输入输出资源管理方法的流程可以如下:

201、在获取存储设备IO请求后,确定存储设备IO请求针对的目标存储设备。

本实施例中的存储设备是用于存储信息的设备,其可以是服务器中的存储设备,包括但不限于块设备。计算机中,能够随机访问固定大小数据片(chunk)的设备称为块设备,这些数据片就称作块。块设备包括但不限于硬盘、软盘驱动器、CD-ROM(Compact DiscRead-Only Memory,即只读光盘)驱动等等,一般地,这些块设备可以以安装文件系统的方式使用,这也是块设备通常的访问方式。

本实施例中,可以从存储设备IO请求中解析出目标存储设备的信息,例如目标存储设备的名称等等。

本实施例中存储设备的IO资源由控制组进行管理,控制组即Cgroup(ControlGroups),Cgroup是Linux内核提供的用于限制、记录、隔离单个或多个进程可以使用的资源(CPU(Central Processing Unit,中央处理器)、Memory内存、磁盘等)的一种机制。基于该Cgroup,可以实现对资源的精细化管理。如对CPU、内存,磁盘的精细化管理。对于每一种资源控制,在内核中都有对应的模块,对磁盘IO进行控制的Cgroup称为Blkio Cgroup(BlockInput/Output Cgroup,块设备输入输出控制组)。本实施例的目标存储设备为块设备,管理目标存储设备的目标控制组可以理解为该Blkio Cgroup。

本实施例结合图2b,以存储设备为磁盘为例,描述在用户态发起一个IO操作到内容落地到磁盘的流程。

参考图2b,用户发起一个write操作,该write操作对应的数据先写到内存中,后由内核线程异步写到磁盘中。其中,内核线程写到磁盘的过程包括:write操作对应的数据被传输至内核的通用块层之后,数据被转换为Bio(Block Input/Output,阻塞式I/O通信)结构的请求,通过Bio找到所属Cgroup,通用块层将Bio交给对应的Cgroup,由Cgroup按照配置的IO请求提交速率判断是否直接下发该Bio,还是等待一段时间再下发该Bio。其中,无论是直接下发,还是等待一段时间再下发,最终Cgroup都会将Bio重新交给通用块层,由通用块层交给IO调度队列,最终落地到磁盘中。

对于内核态和用户态,在用户态下:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。在内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。

图2b的VFS(Virtual File System,虚拟文件系统)层是一种软件机制,更确切的说扮演着文件系统管理者的角色,与它相关的数据结构只存在于物理内存当中。它的作用是:屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一的接口。正是因为有了这个层次,Linux中允许众多不同的文件系统共存并且对文件的操作可以跨文件系统而执行。对于Linux来说,虚拟文件系统(VFS)抽象了磁盘设备,统一称为“块设备”(blockdevice)。

本实施例中的存储设备IO请求,指的是针对存储设备的读写操作对应的存储设备IO请求,该请求可以由通用块层提交给存储设备,由存储设备进行响应。

在一个示例中,该读写操作可以由用户在服务器侧或终端侧发起,对此,本实施例没有限制,在一个示例中,本实施例的服务器可以是组成云平台的服务器,客户可以基于终端侧的客户端或者网页登录该云平台,使用该云平台提供的服务,例如在该云平台上创建任务,对云平台的存储设备进行操作。

可选的,步骤“在获取存储设备IO请求后,确定存储设备IO请求针对的目标存储设备”前,还可以包括:接收终端发送的针对云平台的存储设备的读写操作;将读写操作转换成满足预设格式的存储设备IO请求。

其中,该预设格式的存储设备IO请求,包括但不限于可在通用块层中传输的请求。

本实施例中,Bio是linux内核中通用块层的一个核心数据结构,它描述了块设备的I/O操作,联系了内存缓冲区与块设备。具体的,本申请中,存储设备IO请求可以理解为存储设备的bio。

实际中,当内核通过函数向块设备发起读写操作时,读写操作都会被转变成一个对块设备的IO请求(即本实施例中的存储设备IO请求)提交给块设备。内核使用数据结构struct bio即bio结构体来表示一个对块设备的IO请求,该bio中包括读写操作对应的数据,例如传输开始的扇区号,指向了包括了实际的IO数据结构的数组,与请求相关联的设备的数据结构等等。

本实施例中,一个存储设备可以由多个控制组控制,每个控制组对应于该存储设备均存在对应的请求集合,该请求集合包括属于该控制组的且针对存储设备的存储设备IO请求。

202、从管理目标存储设备的目标控制组中,确定出存储设备IO请求所属的目标控制组,将存储设备IO请求加入其所属的目标控制组的请求集合中,其中,不同目标控制组用于管理不同任务下针对目标存储设备的存储设备IO请求,对于各目标控制组,分别配置有令牌桶。

对于Task(任务),在linux系统中,内核本身的调度和管理并不对进程和线程进行区分,只是根据克隆时传入的参数的不同来从概念上区分进程和线程。任务可以表示系统的一个(或多个)进程或线程。

或者,一个示例中,本实施例中的任务(task),可以是云平台上基于至少一个进程完成的具有一定目的的工作,该任务可以根据用户的实际需要划分,对此没有限制,该任务可以是基于云平台完成的任意任务。例如,任务为云平台上的虚拟机的创建任务,或者,为云平台上的企业管理系统的建立或修改,或者,为云平台上的数据存储任务等等。本实施例对此没有限制。

在一个示例中,服务器上可以包括多个blkio cgroup目录,每个blkio cgroup目录可以对应一个或多个任务,其中,一个任务对应的存储设备可以有多个,即在一个任务下,可以针对多个不同的存储设备发起读写操作(也即向不同的存储设备提交存储设备IO请求)。所以对于一个存储设备而言,其可以回接收到来自不同任务的存储设备IO请求,也即来自不同控制组的存储设备IO请求。

本实施例的存储设备IO请求针对的目标存储设备,指的是需要响应该存储设备IO请求的存储设备,可选的,可以从该存储设备IO请求中获取目标存储设备的信息,例如可以基于存储设备IO请求携带的扇区信息确定目标存储设备。

本实施例中,确定存储设备IO请求所属的控制组的具体步骤可以包括:基于存储设备IO请求所属的任务,确定存储设备IO请求所属的控制组。

在控制组系统中,对于多个子系统如Blkio子系统,可以在子系统下创建资源组,通过将进程ID即进程标识加入到资源组目录下的任务文件中,可以实现将该进程加入对应资源组,所以本申请中,可以基于触发存储设备IO请求的进程ID,确定该进程所属的存储设备控制组,进而确定存储设备IO请求所属的控制组。

本实施例中的令牌桶的数量可以为一个或两个等等,本实施例对此没有限制,本实施例中,不同的目标控制组的令牌桶生产令牌的速度可以相同或不同,不同的目标控制组的令牌桶的容量可以相同或不同。其中,目标控制组的令牌桶的生产速度可以根据目标控制组对应的任务决定,例如,任务要求IO速率不能低于速度阈值,则令牌桶的令牌最低生产速度可以为该速度阈值。

203、基于目标控制组所属的管理列表,确定目标控制组对应的状态标识,其中,同一管理列表用于管理同一状态标识下的目标控制组,状态标识用于表征目标控制组针对存储设备IO请求的当前提交速度,状态标识由目标控制组的令牌桶的令牌状态决定。

本实施例中目标控制组对应的状态标识,可以基于令牌桶的令牌状态确定,该令牌状态时包括但不限于:令牌桶中当前的剩余令牌数状态,令牌消耗速度等等确定。该令牌消耗速度可以理解为目标控制组针对存储设备IO请求的当前提交速度。本实施例中,在目标控制组(通过通用块层)将存储设备IO请求提交给目标存储设备时,会从目标控制组的令牌桶中取出一定数量的令牌分配给该存储设备IO请求,所以令牌桶中令牌的消耗速度,可以体现该目标控制组提交存储设备IO请求的速度。

本实施例的同一管理列表用于对同一状态标识下的目标控制组进行管理,为了确定目标控制组对应的状态标识,可以在管理列表中查询是否存在该目标控制组,根据查询结果,确定目标控制组所属的管理列表。

可以想到的是,在使用管理列表后,目标存储设备对应有数量繁多的目标控制组的情况下,查询少量的管理列表,即可确定每个目标控制组的状态标识,有利于简化对目标控制组的管理,简化对IO请求的管理。

本实施例中,目标控制组的状态标识可以根据令牌桶中的令牌状态进行更新,在状态标识更新时,其所属的管理列表也可能发生变化。本实施例可以按照令牌状态更新规则,确定令牌桶中的令牌状态,从而更新目标控制组的状态标识,进而更新管理列表,保证管理列表的准确性和时效性。

其中,令牌状态更新规则包括但不限于根据一定时间间隔更新令牌桶状态,或者在令牌桶的每一次令牌数量变化(向令牌桶中生产令牌和/或从令牌桶中取出令牌)后,更新目标控制组的状态标识,或者在目标控制组的每一轮IO请求提交后,更新目标控制组的状态标识等等,上述更新规则可以混合使用,本实施例对此没有限制。

在一个示例中,状态标识可以为体现令牌桶中令牌消耗速度的标识,该标识可以是任意形式的标识,例如文字,颜色等等。

在本实施例中,为了保证任务的质量,每个任务对应的目标控制组可以都设置有最低IO速度(例如保证任务质量的速度),最高IO速度(可以是基于存储设备IO资源设置的速度)。本实施例可以通过令牌桶使得目标控制组提交令牌的速度基于最低IO速度和最高IO速度灵活调整。本实施例中,最低IO速度,最高IO速度和令牌桶容量可以从目标控制组的配置文件中获取。

可选的,在一个示例中,在内核中,每个目标控制组配置的令牌桶的数量可以为1个,该令牌桶的容量可以根据目标控制组的配置文件决定。该令牌桶的令牌生产速度可以为该最低IO速度,本实施例可以基于令牌桶的容量(0第一容量)计算以最低IO速度生产令牌时,令牌桶所需的令牌生产时长,基于该令牌生产时长乘以最高IO速度得到第二容量,将第一容量减去第二容量得到的差值(负数)作为令牌桶的最高负容量。

在一个示例中,可以基于令牌桶的剩余令牌数确定令牌提交速率。在一个示例中,状态标识可以包括第一状态标识,第二状态标识和第三状态标识,第一状态标识用于表征目标控制组针对存储设备IO请求的当前提交速度低于最低IO速度,第二状态标识用于表征目标控制组针对存储设备IO请求的当前提交速度不低于最低IO速度且不高于最高IO速度,第三状态标识用于表征目标控制组针对存储设备IO请求的当前提交速度高于最高IO速度。

在一个示例中,管理列表的数量和结构可以根据实际的需要设置,本实施例对此没有限制。其中,本实施例可以将第一状态标识和第二状态标识的目标控制组分别组织成第一管理列表和第二管理列表。由此,在需要获取目标控制组的状态标识时,只需要获取管理列表,即可知道所有的目标控制组的状态标识。

步骤“基于目标控制组所属的管理列表,确定目标控制组对应的状态标识”,可以包括:

获取目标控制组的第一管理列表和第二管理列表,其中,第一管理列表包括状态标识为第一状态标识的目标控制组,第二管理列表包括状态标识为第二状态标识的目标控制组;第一状态标识下,目标控制组的令牌桶中,剩余令牌数量大于0;第二状态标识下,目标控制组的令牌桶中,剩余令牌数量不大于0但是大于令牌桶的最高负容量;第三状态标识下,目标控制组的令牌桶中,剩余令牌数量不大于令牌桶的最高负容量;

基于各目标控制组所属的管理列表,确定各目标控制组的状态标识。

或者在一个示例中,对于令牌消耗速度,可以通过令牌桶中一段时间内消耗的令牌数和该段时间的比值求得,但是这种方案需要计算,耗时较多一点。

可选的,本实施例中,若不存在针对目标控制组的第一管理列表和第二管理列表,例如,在目标存储设备的控制组的初始化阶段,可以先基于令牌桶确定各目标控制组的状态标识,然后基于状态标识创建上述管理列表如第一管理列表和第二管理列表等。

在目标控制组具有一个令牌桶的示例中,步骤“获取所述目标控制组的第一管理列表和第二管理列表”前,还可以包括:

根据所述目标控制组的第一令牌桶和第二令牌桶的剩余令牌数,确定所述目标控制组的状态标识;其中,若目标控制组的令牌桶中,剩余令牌数量大于0,确定所述目标控制组的状态标识为所述第一状态标识;若目标控制组的令牌桶中,剩余令牌数量不大于0但是大于令牌桶的最高负容量,确定所述目标控制组的状态标识为所述第二状态标识;若目标控制组的令牌桶中,剩余令牌数量不大于令牌桶的最高负容量,确定所述目标控制组的状态标识为所述第三状态标识;

基于第一状态标识下的目标控制组,创建第一管理列表;

基于第二状态标识下的目标控制组,创建第二管理列表。

在另一个示例中,也可以通过两个令牌桶来控制最高IO速度和最低IO速度,可选的,对于各目标控制组,均配置第一令牌桶和第二令牌桶,第一令牌桶的令牌生产速度为第一令牌桶对应的目标控制组的最低IO速度,第二令牌桶的令牌生产速度为第二令牌桶对应的目标控制组的最高IO速度。

可选的,本实施例中,对于第一状态标识对应的目标控制组,其IO请求的提交不受限制,即若一个存储设备IO请求属于第一状态标识对应的目标控制组,则在获取该存储设备IO请求后,控制组可以将其提交给通用块层,而不需要等待。

本实施例中的每个存储设备IO请求属于一个任务,同一任务下可以针对至少一个存储设备进行操作,所以同一任务的所有存储设备IO请求针对的存储设备的数量为至少一个,对于同一任务下操作的不同存储设备而言,可以设置该任务在不同的存储设备中被允许的最高IO请求提交速度,和为了保证任务质量的需要满足的最低IO请求提交速度,其中,该最高IO请求提交速度可以作为上述方案中的最高IO速度,最低IO请求提交速度可以作为上述方案中的最低IO速度,以避免任务过多地使用存储设备的IO资源,以及保证基于目标存储设备实现的任务的质。

其中,在不同的存储设备中,同一任务对应的最高IO速度可以不同,最低IO速度也可以不同。

可选的,步骤“基于所述目标控制组所属的管理列表,确定所述目标控制组对应的状态标识”,可以包括:

获取目标控制组的第一管理列表和第二管理列表,其中,第一管理列表包括状态标识为第一状态标识的目标控制组,第二管理列表包括状态标识为第二状态标识的目标控制组;其中,第一状态标识下,目标控制组的第一令牌桶中,剩余令牌数量大于0;第二状态标识下,目标控制组的第一令牌桶中,剩余令牌数量不大于0,且所述第二令牌桶中剩余令牌数量大于0,第三状态标识下,目标控制组的所述第二令牌桶中,剩余令牌数量不大于0;

基于目标控制组所属的管理列表,确定目标控制组的状态标识。

其中,若在第一管理列表中查询到某个目标控制组,则该目标控制组的状态标识为第一状态标识,类似的,若在第二管理列表中查询到某个目标控制组,则该目标控制组的状态标识为第二状态标识,若在第一管理列表和第二管理列表中都没有查到某目标控制组,则该目标控制组的状态标识为第三状态标识。

本实施例中,还可以将第三状态标识的目标控制组也组织成第三管理列表,用于管理第三状态标识的目标控制组。

可选的,本实施例中,若不存在针对目标控制组的第一管理列表和第二管理列表,例如,在目标存储设备的控制组的初始化阶段,可以先基于令牌桶确定各目标控制组的状态标识,然后基于状态标识创建上述管理列表如第一管理列表、第二管理列表和第三管理列表等。

可选的,步骤“获取目标控制组的第一管理列表和第二管理列表”前,还可以包括:

根据目标控制组的第一令牌桶和第二令牌桶的剩余令牌数,确定目标控制组的状态标识;其中,若目标控制组的第一令牌桶中,剩余令牌数量大于0,确定目标控制组的状态标识为第一状态标识;若目标控制组的第一令牌桶中,剩余令牌数量不大于0,且第二令牌桶中剩余令牌数量大于0,确定目标控制组的状态标识为第二状态标识;若目标控制组的第二令牌桶中,剩余令牌数量不大于0,确定目标控制组的状态标识为第三状态标识;

基于第一状态标识下的目标控制组,创建第一管理列表;

基于第二状态标识下的目标控制组,创建第二管理列表。

在一个示例中,可以通过颜色表现状态标识,例如第一状态标识为绿色,第二状态标识为黄色标识,第三状态标识为红色标识。

例如,当第二令牌桶中令牌数小于0时,表明提交速率已经超过最高IO速率,设置该目标控制组的状态为红色(red),此时不能再提交IO请求;当第二令牌桶中令牌大于0,而第一令牌桶的令牌数小于0时,说明提交速率已超出最低保障速率,配置该目标控制组的状态为黄色(yellow),此时还可以继续提交IO请求;当第一令牌桶中的令牌大于0时,说明提交速率还未达到最低保障IO速率,配置给目标控制组的状态为绿色(green),更可以继续提交IO请求,且若存储设备的IO资源允许,当前提交速度可以适当提高。

在一个示例中,创建管理列表的时候,不同的管理列表可以通过不同的方式组织。

例如,在第一管理列表中,目标控制组可以以链表的形式进行组织,一个链表节点代表一个目标控制组;即基于第一状态标识下的目标控制组,创建第一管理列表,包括:将第一状态标识下的目标控制组作为链表节点,创建链表形式的第一管理列表。

又例如,在第二管理列表中目标控制组可以以红黑树的形式组织,一个红黑树节点代表一个目标控制组,红黑树节点的key值为对应的目标控制组的内存地址。即基于第二状态标识下的目标控制组,创建第二管理列表包括:将第二状态标识下的目标控制组作为红黑树节点,以目标控制组的内存地址作为红黑树节点的key值,创建红黑树形式的第二管理列表。

当然,第一管理列表中的目标控制组也可以以红黑树的形式组织(红黑树节点的key值为对应的目标控制组的内存地址),第二管理列表中的目标控制组也可以以链表的形式进行组织,本实施例对此没有限制。

例如,以磁盘为例,对于绿色状态的cgroup,磁盘是通过链表方式组织这类cgroup;对于黄色状态的cgroup,磁盘是通过红黑树的方式组织这类cgroup,其key值为cgroup的内存地址;本实施例采用红黑树可以增加黄色cgroup下发的随机性;而红色状态的cgroup,可以不需要组织。当磁盘需要下发存储设备IO请求如bio时,可以先遍历链表,选择绿色状态的cgroup提交存储设备IO请求,后遍历红黑树,选择黄色状态的cgroup提交存储设备IO请求。

204、基于状态标识,确定目标控制组中具有IO请求提交资格的第一目标控制组。

本实施例中,具有IO请求提交资格的第一目标控制组,可以为IO请求当前提交速度没有超过该控制组对应的最高IO速度的控制组,在一个示例中,可以为上述第一状态标识和第二状态标识的控制组。

可选的,步骤“基于状态标识,确定目标控制组中具有IO请求提交资格的第一目标控制组”,可以包括:

若目标控制组的状态标识为第一状态标识或第二状态标识,确定目标控制组为具有IO请求提交资格的第一目标控制组;

若目标控制组的状态标识为第三状态标识,确定目标控制组为不具有IO请求提交资格的第二目标控制组。

本实施例中,具有IO请求提交资格不代表一定可以提交IO请求,还需要根据存储设备IO资源确定。

205、从第一目标控制组管理的请求集合中,选择目标存储设备IO请求。

本实施例中,从第一目标控制组管理的请求集合中,选择目标存储设备IO请求,可以先满足第一标识状态的控制组,再基于剩余的存储设备IO资源满足第二标识状态的控制组。

可选的,步骤“从第一目标控制组管理的请求集合中,选择目标存储设备IO请求”,可以包括:

基于目标存储设备的IO资源,从第一管理列表的目标控制组对应的请求集合中,选择目标存储设备IO请求,其中,所述第一管理列表中的目标控制组为所述第一目标控制组;

在第一管理列表对应的选择结束后,基于目标存储设备的剩余可用IO资源,从第二管理列表的目标控制组对应的请求集合中,选择目标存储设备IO请求,其中,所述第二管理列表中的目标控制组为所述第一目标控制组。

基于前述描述可知,第一管理列表中的目标控制组的当前提交速度没有超过该控制组对应的最低IO速度,所以可以优先保证第一管理列表中的目标控制组的IO请求提交,在一个示例中,可以基于存储设备IO资源从第一管理列表的目标控制组中选择待提交控制组(可以提交IO请求的目标控制组),若资源充足,则再基于剩余IO资源从第二管理列表中选择待提交控制组。若存储设备IO资源不充足,则可以只为第一管理列表的目标控制组分配资源,即只从第一管理列表的目标控制组对应的请求集合中,选择目标存储设备IO请求。

可选的,在第一管理列表为链表形式组织时,步骤“基于目标存储设备的IO资源,从第一管理列表的目标控制组对应的请求集合中,选择目标存储设备IO请求”,可以包括:

基于第一管理列表的链表结构,遍历第一管理列表中的目标控制组,在遍历至每一个目标控制组时,根据目标存储设备的IO资源,从目标控制组的请求集合中,选择目标存储设备IO请求。

例如,参考图2c,图2c中以存储设备为磁盘为例,示出了第一管理列表和第二管理列表的数据结构。

参考图2c中Green list的结构,该Green list即为第一管理列表,其以链表形式组织了绿色状态的cgroup(即第一状态标识对应的目标控制组),包括第一状态标识下的目标控制组blkcg_1,blkcg_2,和blkcg_3。

可选的,在第二管理列表中目标控制组以红黑树的形式组织时,步骤“基于目标存储设备的剩余可用IO资源,从第二管理列表的目标控制组对应的请求集合中,选择目标存储设备IO请求”,可以包括:

遍历红黑树结构的第二管理列表,从第二管理列表的目标控制组中确定候选目标控制组;

基于目标存储设备的剩余可用IO资源,从候选目标控制组的请求集合中,选择目标存储设备IO请求。

本实施例中,遍历红黑树的时候,可以随机选取红黑树节点对应的目标控制组作为候选目标控制组,或者遍历红黑树的时候,还可以获取红黑树节点对应的目标控制组的优先级,令牌桶容量,最高IO速度,任务类型(是否涉及金融等等),任务对应的发起方(客户)的等级等等参数,然后综合这些参数确定候选目标控制组。

例如,还是参考图2c,图2c中以存储设备为磁盘为例,示出了第二管理列表的数据结构。

参考图2c中Yellow list的结构,该Yellow list即为第二管理列表,其以红黑树形式组织了黄色状态的cgroup(即第二状态标识对应的目标控制组),包括第二状态标识下的目标控制组blkcg_4,blkcg_5,和blkcg_6以及一些未标号的目标控制组。

可选的,步骤“从第二管理列表的目标控制组中确定候选目标控制组”,可以包括:

获取第二管理列表中目标控制组的优先级;

获取第二管理列表中目标控制组的令牌桶容量;

根据令牌桶容量以及优先级,从第二管理列表中选择候选目标控制组。

例如,设置优先级最低阈值和令牌桶容量最低阈值,挑选满足这两个阈值的目标控制组,然后从这些控制组中选择优先级在前的一定数量的目标控制组作为候选目标控制组。或者,还可以基于优先级和令牌桶容量,采用预设算法挑选候选目标控制组,例如采用DRR(Deficit Round Robin,亏空轮循)算法等等。

206、从目标存储设备IO请求对应的令牌桶中,为目标存储设备IO请求分配令牌,向目标存储设备提交分配有令牌的目标存储设备IO请求。

本实施例中,若目标控制组的令牌桶的数量为两个,则在目标控制组提交目标存储设备IO请求前,需要从两个令牌桶中分别拿出一个令牌分配给该目标存储设备IO请求,由此,基于两个令牌桶中令牌数可以划分目标控制组提交目标存储设备IO请求的速度范围,进而确定目标控制组的状态标识。

本实施例中,接收到针对目标存储设备的存储设备IO请求后,可以对该目标存储设备对应的目标控制组进行属性更新,更新的属性参数包括但不限于:请求集合,令牌桶中的令牌、控制组的颜色状态标识等等。

本实施例中,以存储设备为磁盘为例,用户发起读写操作到对应的IO请求最终提交给磁盘,中间过程会将IO请求交给blkio cgroup,由该blkio cgroup判断IO请求是否可以直接提交(绿色控制组可以直接提交请求,资源充足,黄色控制组中的一部分也可以提交请求),还是等待一段时间(黄色或红色控制组)。若IO请求所属cgroup为红色状态,则表明该控制组当前超发,需要在cgroup系统中等待一段时间,时间达到后,由cgroup将IO请求重新交给通用块层,再落地到磁盘中。所以,每个磁盘还可以进一步维护cgroup下发时刻。

可选的,本实施例中,可以设置两个等待列表,第一等待列表和第二等待列表,该列表的形式不限,可以是表格形式,链表形式,红黑树形式等等,本实施例对此没有限制。

可选的,等待列表可以在生成管理列表的同时或之后生成,该等待列表包括第一等待列表和第二等待列表。其中,第一等待列表中的目标控制组可以包括第三状态标识的控制组。第二等待列表中的目标控制组可以包括第二状态标识和第三状态标识的控制组。

可选的,在生成第一等待列表(或在该列表中添加目标控制组时)时,可以先计算目标控制组的第一未来转变时刻,该第一未来转变时刻为目标控制组的状态标识由第三状态标识转变为第二状态标识的未来时刻,生成第一等待列表时,将该第一未来转变时刻添加进该第一等待列表中。

其中,第一未来转变时刻,可以基于当前时刻,以及目标控制组的第二令牌桶的令牌生产速度和第二令牌桶的剩余令牌数量确定,例如,第一未来转变时刻,为当前时刻,加上第一状态转变时间段得到,第一状态转变时间段为第二令牌桶的剩余令牌数量的绝对值,除以第二令牌桶的令牌生产速度得到。

在需要的时候,获取该第一等待列表,基于该第一等待列表在目标控制组的第一未来转变时刻到达时,将该目标控制组添加至上述第二管理列表中。

进一步的,该第一等待列表中的目标控制组可以以红黑树的形式组织,一个红黑树节点表示一个目标控制组,红黑树节点的key值表示目标控制组对应的第一未来转变时刻,红黑树的根节点的第一未来转变时刻与当前时刻最接近。可选的,本实施例的方法还可以包括;获取第一等待列表;在第一等待列表的根节点的第一未来转变时刻到达时,删除第一等待列表中的根节点,将根节点对应的目标控制组添加至第二管理列表中。

由此,该目标控制组添加到第一管理列表中后,该目标控制组中的IO请求可以开始提交,无需进行等待。通过该第一等待列表,可以很好地管理第二状态标识的目标控制组。

其中,在创建第一等待列表时,可以计算第三状态标识下的目标控制组的第一未来转变时刻,以这些目标控制组作为红黑树节点,以目标控制组的第一未来转变时刻作为红黑树节点的key值,创建红黑树形式的第一等待列表。

例如,还是参考图2c,本实施例的红黑树结构的第一等待列表可以参考图2c中的Expire Yellow list树状结构,目标控制组blkcg_7,blkcg_8,和blkcg_9为第三状态标识的目标控制组,假设其中blkcg_7的第一未来转变时刻最接近当前时刻,该blkcg_7为根节点,blkcg_7的第一未来转变时刻到达时,该目标控制组blkcg_7从Expire Yellow list即第一等待列表中被删除,被添加至Yellow list即第二管理列表中,之后,该目标控制组blkcg_7可以按照Yellow list中控制组的IO资源提交规则提交请求,如立即下发请求。

对于包括第二状态标识和第三状态标识的目标控制组的第二等待列表,类似的,在生成第二等待列表(或在该列表中添加目标控制组时)时,可以先计算目标控制组的第二未来转变时刻,该第二未来转变时刻为目标控制组的状态标识由当前状态标识转变为第一状态标识的未来时刻,生成第二等待列表时,将该第二未来转变时刻添加进该第二等待列表中。

其中,第二未来转变时刻,可以基于当前时刻,以及目标控制组的第一令牌桶的令牌生产速度和第一令牌桶的剩余令牌数量(为负数)确定,例如,第二未来转变时刻,可以为当前时刻,加上第二状态转变时间段得到,第二状态转变时间段为第一令牌桶的剩余令牌数量的绝对值,除以第一令牌桶的令牌生产速度得到。

其中,在创建第二等待列表时,可以计算第三状态标识和第二状态标识下的目标控制组的第二未来转变时刻,以这些目标控制组作为红黑树节点,以目标控制组的第二未来转变时刻作为红黑树节点的key值,创建红黑树形式的第二等待列表。

生成之后,在需要的时候,可以获取该第二等待列表,基于该第二等待列表在目标控制组的第二未来转变时刻到达时,将该目标控制组添加至上述第一管理列表中。

进一步的,该第二等待列表中的目标控制组可以以红黑树的形式组织,一个红黑树节点表示一个目标控制组,红黑树节点的key值表示目标控制组对应的第二未来转变时刻,红黑树的根节点的第二未来转变时刻与当前时刻最接近。本实施例的方法还可以包括:获取第二等待列表;在第二等待列表的根节点的第二未来转变时刻到达时,删除第二等待列表中的根节点,将根节点对应的目标控制组添加至第一管理列表中。

可以理解的是,删除第一等待列表或第二等待列表中的根节点后,该红黑树结构的等待列表会进行相应的变化,产生新的根节点,该根节点的第一未来转变时刻与当前时刻还是最接近的。

由此,该目标控制组添加到第一管理列表中后,该目标控制组中的IO请求可以开始提交,无需进行等待。

例如,还是参考图2c,本实施例的红黑树结构的第二等待列表可以参考图2c中的Expire Green list树状结构,目标控制组blkcg_4,blkcg_5,和blkcg_6为第二状态标识或第三状态标识的目标控制组,假设其中blkcg_4的第二未来转变时刻最接近当前时刻,该blkcg_4为根节点,blkcg_4的第二未来转变时刻到达时,该目标控制组blkcg_4从ExpireGreen list即第二等待列表中被删除,被添加至Green list即第一管理列表中,之后,该目标控制组blkcg_4可以按照Green list中控制组的IO资源提交规则提交请求,如立即下发请求。当然可以理解的是,第二未来转变时刻到达前,若该目标控制组blkcg_4存在于Yellow list即第二管理列表中,第二未来转变时刻到达时,还将Yellow list中的该目标控制组blkcg_4删除。

进一步的,还可以为第三状态标识的控制组单独设置一个第三等待列表,用以管理其进入第一状态标识。类似的,在生成第三等待列表(或在该列表中添加目标控制组时)时,可以先计算目标控制组的第三未来转变时刻,该第三未来转变时刻为目标控制组的状态标识由第三状态标识转变为第一状态标识的未来时刻,生成第三等待列表时,将该第三未来转变时刻添加进该第三等待列表中。

其中,第三未来转变时刻,可以基于当前时刻,以及第三状态标识的目标控制组,所对应的第一令牌桶的令牌生产速度和剩余令牌数量(为负数)确定,例如,第三未来转变时刻,可以为当前时刻,加上第三状态转变时间段得到,其中,第三状态转变时间段为第一令牌桶的剩余令牌数量的绝对值,除以第一令牌桶的令牌生产速度得到。

其中,第三等待列表的创建与上述第一等待列表和第二等待列表的创建类似,在此不进行赘述。

在第三等待列表生成之后,在需要的时候,可以获取该第三等待列表,基于该第三等待列表在目标控制组的第三未来转变时刻到达时,将该目标控制组添加至上述第一管理列表中。

进一步的,该第三等待列表中的目标控制组可以以红黑树的形式组织,一个红黑树节点表示一个目标控制组,红黑树节点的key值表示目标控制组对应的第三未来转变时刻,红黑树的根节点的第三未来转变时刻与当前时刻最接近。本实施例的方法还可以包括:获取第三等待列表;在第三等待列表的根节点的第三未来转变时刻到达时,删除第三等待列表中的根节点,将根节点对应的目标控制组添加至第一管理列表中。

该第三等待列表的红黑树结构可以参考图2c中的红黑树结构。

在一个实施例中,第二等待列表可以只包括第二状态标识的目标控制组。

可选的,在一个可选的示例中,第二等待列表包括状态标识为第二状态标识的目标控制组,第二等待列表中目标控制组以红黑树的形式组织,一个红黑树节点表示一个目标控制组,红黑树节点的key值表示目标控制组的第四未来转变时刻,第四未来转变时刻为目标控制组的状态标识由第二状态标识转变为第一状态标识的未来时刻,红黑树的根节点的第四未来转变时刻与当前时刻最接近。本实施例的方法还包括:获取第二等待列表,在第二等待列表的根节点的第四未来转变时刻到达时,删除第二等待列表中的根节点,将根节点对应的目标控制组添加至第一管理列表中。

其中,第四未来转变时刻,可以基于当前时刻,以及第二状态标识的目标控制组,所对应的第一令牌桶的令牌生产速度和剩余令牌数量(为负数)确定,例如,第四未来转变时刻,可以为当前时刻,加上第四状态转变时间段得到,第四状态转变时间段为第一令牌桶的剩余令牌数量的绝对值,除以第一令牌桶的令牌生产速度得到。

其中,第四等待列表的创建与上述第一等待列表和第二等待列表的创建类似,在此不进行赘述。

本实施例中,对于第二状态标识的目标控制组而言,在目标存储设备具有充足的IO资源的情况下,其可能会被允许提交IO请求至目标存储设备,在第二状态标识的目标控制组提交IO请求后,其令牌桶中的令牌数量会发生变化,在一个示例中,可以在第二状态标识的目标控制组每一次提交IO请求后,重新确定其状态标识以及计算其对应的未来转变时刻,例如上述的第二未来转变时刻和第四未来转变时刻,以更新对应的等待列表。

当然,在重新确定状态标识后,可能会出现目标控制组的状态标识由第二状态标识变为第三状态标识的情况,此时,需要将其从第二管理列表和第二等待列表中移除,计算其第一未来转变时刻和第二未来转变时刻,将其加入第一等待列表和第二等待列表中。

类似的,对于第一状态标识的目标控制组,在更新状态标识时,若其状态标识从第一状态标识变为第二状态标识,则需要将其从第一管理列表中移除,并加入第二管理列表,计算其第二未来转变时刻,将其加入第二等待列表中。

本实施例基于等待列表,可以快速而准确地更新管理列表,保证目标存储设备的管理列表中,目标控制组的状态标识的准确性和实时性,实现对目标控制组的IO请求的合理提交。

本实施例基于两个红黑树结构的等待列表,如expire green list和expireyellow list,可以管理第二状态标识和第三状态标识的目标控制组的IO请求的下发时刻。当cgroup为第三状态标识时,本实施例计算到达第二状态标识的第一未来转变时刻,以该第一未来转变时刻值为key,将该cgroup插入到expire yellow list红黑树中。当cgroup为第二状态标识,计算到达第一状态标识的第二未来转变时刻,并以该第二未来转变时刻值为key,将cgroup插入到expire green list红黑树中。同时在cgroup模块中启动异步线程,等待红黑树中root根节点的时刻到来,在该时刻到来时,可以开始提交IO资源。

本实施例中,存储设备IO请求的类型为至少两种,其类型包括但不限于read读取操作请求、write写入操作请求和sync(Synchronize,同步)请求等等,其中,不同类型的存储设备IO请求可以对应不同的提交优先级;例如,read读操作请求提交优先级最高,其次是sync请求,最后是write写操作请求,或者read和sync请求最高,write请求最低。

可选的,步骤“从第一目标控制组管理的请求集合中,选择目标存储设备IO请求”,可以包括:基于第一目标控制组管理的请求集合中,各存储设备IO请求对应的提交优先级,从请求集合中,选择提交优先级满足预设要求的存储设备IO请求作为目标存储设备IO请求。

例如,当在第一状态标识或第二状态标识的目标控制组中选择提交的IO请求时,先选择read和sync IO请求进行提交。

可以理解的是,本实施例中,每次提交时,目标控制组的IO请求提交数量是有一定限制的,例如目标控制组的IO请求提交数量不超过最高IO数量提交阈值,避免某个任务短时间内大量占用存储设备的IO资源。其中,不同目标控制组可以设置不同的最高IO数量提交阈值。

本实施例中,结合图3a和图3b,以存储设备为磁盘设备为例,对磁盘的IO资源管理方法进行示例描述。

参考图3a的流程图,一个磁盘IO请求(下文称为bio)到达控制组系统时,首先找到其所属的目标cgroup(每个bio都对应属于自己的目标cgroup,该cgroup是用户态进程所属的cgroup,可通过/proc/pid/cgroup查看)。然后判断该cgroup是否可以直接下发bio。可以直接下发的条件包括:该cgroup未配置速率限制;cgroup中的两个令牌桶都有剩余令牌(即cgroup为绿色状态(第一状态标识),也即位于Green list中)。若满足该条件,该bio便不需要等待,可以直接通过通用块层下发到磁盘。

其中,若bio直接下发,则该bio会被分配两个令牌即图3b中的第一令牌桶的Assured token即速度保障令牌以及第二令牌桶的Ceil token即速度限制令牌,分配令牌后,目标控制组的属性如令牌桶中剩余令牌数,以及目标控制组的状态标识如颜色状态可能会更新,所以需要计算颜色状态,然后基于颜色状态更新管理列表如图3b中的Greenlist和Yellow list,以及更新等待列表。当然,也需要更新令牌桶中的剩余令牌数量。

若本实施例中,上述bio所属的目标cgroup不能直接下发bio请求。该bio就需要在cgroup中等待。

本实施例中,可以在bio进入目标cgroup后,更新目标cgroup的属性,然后基于该目标控制组的状态标识,控制目标控制组的资源的下发。

若目标cgroup属于Red list,则可以计算出两个未来转变时刻值,即何时会变成green状态和yellow状态,根据这两个未来转变时刻值,分别进入expire green list和expire yellow list。若目标cgroup状态为yellow,则可以只计算出一个未来时刻值,即何时会变成green状态,并进入expire green list。

内核cgroup中异步等待队列随时等待两个expire红黑树即等待列表中的root节点,在该节点的未来转变时刻为当前时刻时进行响应。

例如,若cgroup在等待列表中的未来转变时刻到达,会进行管理列表的更新,唤醒磁盘的异步队列queue,向该磁盘提交bio。首先是提交green list中的cgroup管理的bio请求,接着是提交yellow list中的cgroup管理的bio请求。

本实施例中,针对每个cgroup下发bio请求的数目是有限制的,防止某个cgroup长时间占用大量IO资源。对于yellow状态的cgroup,本实施例可以通过DRR算法挑选cgroup,其中,DRR可以是通过cgroup的优先级和配置的令牌桶大小来确定的。优先级越高,被挑中的几率越多,提交的bio请求越多。

采用本实施例,可以基于两个令牌桶弹性控制控制各个目标控制组对于存储设备的IO请求当前提交速度,从而灵活地选择合适的目标控制组作为第一目标控制组,然后从第一目标控制组管理的请求集合中,选择目标存储设备IO请求;从目标存储设备IO请求对应的令牌桶中,为目标存储设备IO请求分配令牌,向目标存储设备提交分配有令牌的目标存储设备IO请求,实现对存储设备的IO资源的充分利用,提升存储设备的IO资源的利用率。

为了更好地实施以上方法,相应的,本发明实施例还提供一种输入输出资源管理装置,该输入输出资源管理装置具体可以集成在服务器或终端中。

参考图4,该装置包括:

设备确定单元401,用于在获取存储设备IO请求后,确定所述存储设备IO请求针对的目标存储设备;

请求处理单元402,用于从管理所述目标存储设备的目标控制组中,确定出所述存储设备IO请求所属的目标控制组,将所述存储设备IO请求加入其所属的目标控制组的请求集合中,其中,不同目标控制组用于管理不同任务下针对所述目标存储设备的存储设备IO请求,对于各所述目标控制组,分别配置有令牌桶;

标识获取单元403,用于基于所述目标控制组所属的管理列表,确定所述目标控制组对应的状态标识,其中,同一管理列表用于管理同一状态标识下的目标控制组,所述状态标识用于表征所述目标控制组针对所述存储设备IO请求的当前提交速度,所述状态标识由所述目标控制组的令牌桶的令牌状态决定;

控制组选择单元404,用于基于所述状态标识,确定所述目标控制组中具有IO请求提交资格的第一目标控制组;

请求选择单元405,用于从所述第一目标控制组管理的请求集合中,选择目标存储设备IO请求;

请求提交单元406,用于从所述目标存储设备IO请求对应的令牌桶中,为所述目标存储设备IO请求分配令牌,向所述目标存储设备提交分配有所述令牌的所述目标存储设备IO请求。

在一个示例中,所述状态标识包括第一状态标识,第二状态标识和第三状态标识;所述第一状态标识用于表征所述目标控制组针对所述存储设备IO请求的当前提交速度低于最低IO速度,所述第二状态标识用于表征所述目标控制组针对所述存储设备IO请求的当前提交速度不低于所述最低IO速度且不高于最高IO速度,所述第三状态标识用于表征所述目标控制组针对所述存储设备IO请求的当前提交速度高于所述最高IO速度。

该示例中,控制组选择单元,用于若所述目标控制组的状态标识为所述第一状态标识或所述第二状态标识,确定所述目标控制组为具有IO请求提交资格的第一目标控制组;若所述目标控制组的状态标识为所述第三状态标识,确定所述目标控制组为不具有IO请求提交资格的第二目标控制组。

在一个示例中,对于各目标控制组,均配置第一令牌桶和第二令牌桶,第一令牌桶的令牌生产速度为第一令牌桶对应的目标控制组的最低IO速度,第二令牌桶的令牌生产速度为第二令牌桶对应的目标控制组的最高IO速度。

该示例中,请求提交单元,用于从目标存储设备IO请求所属的第一目标控制组,所对应的第一令牌桶和第二令牌桶中,分别取出一枚令牌分配给目标存储设备IO请求。

该示例中,标识获取单元,用于获取目标控制组的第一管理列表和第二管理列表,其中,第一管理列表包括状态标识为第一状态标识的目标控制组,第二管理列表包括状态标识为第二状态标识的目标控制组;第一状态标识下,目标控制组的第一令牌桶中,剩余令牌数量大于0;第二状态标识下,目标控制组的第一令牌桶中,剩余令牌数量不大于0且第二令牌桶中剩余令牌数量大于0,第三状态标识下,目标控制组的第二令牌桶中,剩余令牌数量不大于0;基于各目标控制组所属的管理列表,确定各目标控制组的状态标识。

在一个示例中,请求选择单元,用于基于目标存储设备的IO资源,从第一管理列表中的目标控制组对应的请求集合中,选择目标存储设备IO请求,其中,第一管理列表中的目标控制组为第一目标控制组;在第一管理列表对应的选择结束后,基于目标存储设备的剩余可用IO资源,从第二管理列表中的目标控制组对应的请求集合中,选择目标存储设备IO请求,其中,第二管理列表中的目标控制组为第一目标控制组。

在一个示例中,输入输出资源管理装置还包括创建单元,用于在标识获取单元获取目标控制组的第一管理列表和第二管理列表前,根据所述目标控制组的第一令牌桶和第二令牌桶的剩余令牌数,确定所述目标控制组的状态标识;其中,若所述目标控制组的第一令牌桶中,剩余令牌数量大于0,确定所述目标控制组的状态标识为所述第一状态标识;若所述目标控制组的第一令牌桶中,剩余令牌数量不大于0,且所述第二令牌桶中剩余令牌数量大于0,确定所述目标控制组的状态标识为所述第二状态标识;若所述目标控制组的第二令牌桶中,剩余令牌数量不大于0,确定所述目标控制组的状态标识为所述第三状态标识;基于所述第一状态标识下的目标控制组,创建第一管理列表;基于所述第二状态标识下的目标控制组,创建第二管理列表。

在一个示例中,在第一管理列表中,目标控制组以链表的形式进行组织,一个链表节点代表一个目标控制组。

该示例中,请求选择单元,用于:基于第一管理列表的链表结构,遍历第一管理列表中的目标控制组,在遍历至每一个目标控制组时,根据目标存储设备的IO资源,从目标控制组的请求集合中,选择目标存储设备IO请求。

在一个示例中,在第二管理列表中目标控制组以红黑树的形式组织,一个红黑树节点代表一个目标控制组,红黑树节点的key值为对应的目标控制组的内存地址。

该示例中,请求选择单元,用于遍历红黑树结构的第二管理列表,从第二管理列表的目标控制组中确定候选目标控制组;基于目标存储设备的剩余可用IO资源,从候选目标控制组的请求集合中,选择目标存储设备IO请求。

在一个示例中,请求选择单元,用于获取第二管理列表中目标控制组的优先级;获取第二管理列表中目标控制组的令牌桶容量;根据令牌桶容量以及优先级,从第二管理列表中选择候选目标控制组。

在一个示例中,本实施例的装置还包括:第一列表管理元,用于:获取第一等待列表,第一等待列表包括状态标识为第三状态标识的目标控制组,第一等待列表中目标控制组以红黑树的形式组织,一个红黑树节点表示一个目标控制组,红黑树节点的key值表示目标控制组的第一未来转变时刻,第一未来转变时刻为目标控制组的状态标识由第三状态标识转变为第二状态标识的未来时刻,红黑树的根节点的第一未来转变时刻与当前时刻最接近;在第一等待列表的根节点的第一未来转变时刻到达时,删除第一等待列表中的根节点,将根节点对应的目标控制组添加至第二管理列表中。

在一个示例中,本实施例的装置还包括:第二列表管理元,用于获取第二等待列表,第二等待列表包括状态标识为第二状态标识和第三状态标识的目标控制组,第二等待列表中目标控制组以红黑树的形式组织,一个红黑树节点表示一个目标控制组,红黑树节点的key值表示目标控制组的第二未来转变时刻,第二未来转变时刻为目标控制组的状态标识由当前的状态标识转变为第一状态标识的未来时刻,红黑树的根节点的第二未来转变时刻与当前时刻最接近;在第二等待列表的根节点的第二未来转变时刻到达时,删除第二等待列表中的根节点,将根节点对应的目标控制组添加至第一管理列表中。

在一个示例中,本实施例的装置还包括转换单元,用于在设备确定单元获取存储设备IO请求后,确定存储设备IO请求针对的目标存储设备前,接收终端发送的针对云平台的存储设备的读写操作;基于读写操作的数据,将读写操作转换成预设格式的存储设备IO请求。

在一个示例中,存储设备IO请求的类型为至少两种,不同类型的存储设备IO请求对应不同的提交优先级;请求选择单元,用于基于第一目标控制组管理的请求集合中,各存储设备IO请求对应的提交优先级,从请求集合中,选择提交优先级满足预设要求的存储设备IO请求作为目标存储设备IO请求。

采用本实施例,可以基于两个令牌桶弹性控制控制各个目标控制组对于存储设备的IO请求当前提交速度,从而灵活地选择合适的目标控制组作为第一目标控制组,然后从第一目标控制组管理的请求集合中,选择目标存储设备IO请求;从目标存储设备IO请求对应的令牌桶中,为目标存储设备IO请求分配令牌,向目标存储设备提交分配有令牌的目标存储设备IO请求,实现对存储设备的IO资源的充分利用,提升存储设备的IO资源的利用率。

此外,本发明实施例还提供一种计算机设备,该计算机设备可以为终端或者服务器,如图5所示,其示出了本发明实施例所涉及的计算机设备的结构示意图,具体来讲:

该计算机设备可以包括一个或者一个以上处理核心的处理器501、一个或一个以上计算机可读存储介质的存储器502、电源503和输入单元504等部件。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器501是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器501可包括一个或多个处理核心;优选的,处理器501可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器501中。

存储器502可用于存储软件程序以及模块,处理器501通过运行存储在存储器502的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器502还可以包括存储器控制器,以提供处理器501对存储器502的访问。

计算机设备还包括给各个部件供电的电源503,优选的,电源503可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源503还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该计算机设备还可包括输入单元504,该输入单元504可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能,如下:

在获取存储设备IO请求后,确定所述存储设备IO请求针对的目标存储设备;

从管理所述目标存储设备的目标控制组中,确定出所述存储设备IO请求所属的目标控制组,将所述存储设备IO请求加入其所属的目标控制组的请求集合中,其中,不同目标控制组用于管理不同任务下针对所述目标存储设备的存储设备IO请求,对于各所述目标控制组,分别配置有令牌桶;

基于所述目标控制组所属的管理列表,确定所述目标控制组对应的状态标识,其中,同一管理列表用于管理同一状态标识下的目标控制组,所述状态标识用于表征所述目标控制组针对所述存储设备IO请求的当前提交速度,所述状态标识由所述目标控制组的令牌桶的令牌状态决定;

基于所述状态标识,确定所述目标控制组中具有IO请求提交资格的第一目标控制组;

从所述第一目标控制组管理的请求集合中,选择目标存储设备IO请求;

从所述目标存储设备IO请求对应的令牌桶中,为所述目标存储设备IO请求分配令牌,向所述目标存储设备提交分配有所述令牌的所述目标存储设备IO请求。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本发明实施例还提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的输入输出资源管理方法。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。

由于该存储介质中所存储的指令,可以执行本发明实施例所提供的输入输出资源管理方法中的步骤,因此,可以实现本发明实施例所提供的输入输出资源管理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本发明实施例所提供的一种输入输出资源管理方法、装置、计算机设备和存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号