本发明属于计算机存储技术领域,尤其涉及一种多控存储中IO管理的方法和装置。
背景技术:
存储软件系统是由多个不同的模块组成的,所有的模块整体上是以层次的方式组成一个栈的结构。在具有多个控制器的多控存储中,每个控制器中都有这样一个栈式结构,而多控系统中的存储资源都有一个属主,即这部分存储资源是由他的属主控制器所独占的,这样的目的是为了避免多个控制器对同一存储资源的竞争。但是多个控制器对外又要提供相同的存储资源,即在一个控制器中看到存储系统中有多少空间的存储资源,在另一个控制器中看到的应该是相同的。因为多控存储有多个控制器,从上层传给存储系统的IO可能到达不同的控制器,对某一特定的存储资源来说,这些控制器中只有一个可以对他进行读写,也就是他的属主控制器,所以要到达某一存储资源的IO如果是到达了非属主的控制器,非属主的控制器必须将IO转发给属主的控制器,由属主控制器进行读写。
技术实现要素:
为解决上述问题,本发明提供了一种多控存储中IO管理的方法和装置,能够将到达存储的IO转发给其属主控制器,更方便的对读写进行控制,提高工作效率,同时提供了插件注册的功能,使得存储系统的扩展性得到提高。
本发明提供的一种多控存储中IO管理的方法,包括:
接收上层发来的IO的请求;
根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;
如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;
判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理。
优选的,在上述多控存储中IO管理的方法中,所述调用所述route_IOQ队列的线程进行处理之后,还包括:
将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发。
优选的,在上述多控存储中IO管理的方法中,所述将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发包括:
从所述submmit_IOQ中取出IOE,将所述IOE转换成下层所能处理的IO单位;
根据所述IOE的读写属性,调用下层的读接口或写接口,向下层下发所述IOE中的IO;
调用IOE的回调函数,释放所述IOE的数据结构。
优选的,在上述多控存储中IO管理的方法中,所述调用所述route_IOQ队列的线程进行处理包括:
从所述route_IOQ中取出IO;
判断当前的所述IO所属的控制器是否有注册的插件,如果有,则从插件链表中按照优先级从高到低依次选取插件,将所述IO依次交给所述插件处理;
当所述IO被所有的插件处理完毕后,休眠所述route_IOQ,将IO添加到所述submmit_IOQ队列中。
优选的,在上述多控存储中IO管理的方法中,所述判断所述虚拟卷是否处于正常状态之后还包括:
如果所述虚拟卷处于挂起状态或者error状态,则返回错误并结束流程。
本发明提供的一种多控存储中IO管理的装置,包括设置于存储系统中的多个控制器,以及与多个所述控制器连接的IO管理模块,其中,所述IO管理模块包括:
接收单元,用于接收上层发来的IO;
第一判断单元,用于根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;
第二判断单元,用于如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;
第三判断单元,用于判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理。
优选的,在上述多控存储中IO管理的装置中,还包括:
下发单元,用于将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发。
优选的,在上述多控存储中IO管理的装置中,所述下发单元包括:
转换部件,用于从所述submmit_IOQ中取出IOE,将所述IOE转换成下层所能处理的IO单位;
下发部件,用于根据所述IOE的读写属性,调用下层的读接口或写接口,向下层下发所述IOE中的IO;
释放部件,用于调用IOE的回调函数,释放所述IOE的数据结构。
优选的,在上述多控存储中IO管理的装置中,所述第三判断单元包括:
取出部件,用于从所述route_IOQ中取出IO;
判断部件,用于判断当前的所述IO所属的控制器是否有注册的插件,如果有,则从插件链表中按照优先级从高到低依次选取插件,将所述IO依次交给所述插件处理;
休眠部件,用于当所述IO被所有的插件处理完毕后,休眠所述route_IOQ,将IO添加到所述submmit_IOQ队列中。
优选的,在上述多控存储中IO管理的装置中,还包括:
返回单元,用于如果所述虚拟卷处于挂起状态或者error状态,则返回错误并结束流程。
通过上述描述可知,本发明提供的多控存储中IO管理的方法和装置,由于该方法包括:接收上层发来的IO的请求;根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理,因此能够将到达存储的IO转发给其属主控制器,更方便的对读写进行控制,提高工作效率,同时提供了插件注册的功能,使得存储系统的扩展性得到提高。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的第一种多控存储中IO管理的方法的示意图;
图2为本申请实施例提供的第一种多控存储中IO管理的装置的示意图。
具体实施方式
多控存储是指在一个存储系统中包含多个相同的控制器,每个控制器是一个单独的存储管理单位,多个控制器之间又可以相互通信,当一个控制器由于某种原因失效之后,其他控制器可以接管该控制器中的IO和存储资源,保证整个存储不会宕机,达到冗余备份的目的。而每个控制器独自占有其对应的存储资源,即一个存储资源属于某一个控制器,只能由该控制器对其进行读写,只有当该控制器失效,其他控制器接管这一控制器的存储资源以后才能对这一部分存储资源进行读写。本发明的核心思想在于提供一种多控存储中IO管理的方法和装置,能够将到达存储的IO转发给其属主控制器,更方便的对读写进行控制,提高工作效率,同时提供了插件注册的功能,使得存储系统的扩展性得到提高。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请实施例提供的第一种多控存储中IO管理的方法如图1所示,图1为本申请实施例提供的第一种多控存储中IO管理的方法的示意图,该方法包括如下步骤:
S1:接收上层发来的IO的请求;
具体的,各种高级功能可以以插件的形式注册到IO管理模块中,当上层IO到来时,IO管理模块根据IO的特性确定是否需要将IO转发给其他控制器以及是否需要交由插件处理。
S2:根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;
其中,虚拟卷(VLVM)用来表示一个逻辑卷,同存储资源中的逻辑卷是一一对应的。逻辑卷是存储系统中的存储资源,所有的IO最后都是要对逻辑卷进行读写,每一个VLVM都有一个ID,在VLVM中包含一个链表,该链表链接了所有注册到该虚拟卷上的插件。当所述IO所属的虚拟卷不存在时,就不能进行相关的处理,结束流程。
S3:如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;
在该步骤中,能够确定出虚拟卷对应的控制器,利用控制器进行相应的操作。
S4:判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理。
其中,IOQ就是IO队列,用来存储IO,在将IO加入到route_IOQ队列中后,会唤醒该队列,调用该队列的处理线程进行操作。这种IO路由功能负责接收上层发来的IO,然后根据IO所属的虚拟卷判断该IO是否属于该控制器确定是否要进行IO转发,然后根据所属的虚拟卷中注册的插件,将IO依次发送到各个插件中执行。
通过上述描述可知,本申请实施例提供的上述第一种多控存储中IO管理的方法,由于包括:接收上层发来的IO的请求;根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束;如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器;判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理,因此能够将到达存储的IO转发给其属主控制器,更方便的对读写进行控制,提高工作效率,同时提供了插件注册的功能,使得存储系统的扩展性得到提高。
本申请实施例提供的第二种多控存储中IO管理的方法,是在上述第一种多控存储中IO管理的方法的基础上,还包括如下技术特征:
所述调用所述route_IOQ队列的线程进行处理之后,还包括:
将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发。
需要说明的是,存储软件系统中包含有多个模块,模块之间可能是在同一层次,也可能在不同层次。具体的,先从上层接收IO,控制IO在本层的流向,然后将本层处理完毕的IO向下层下发。submmit_IOQ也就是提交IO队列,用来向IO管理模块的下层提交在IO管理模块中处理完毕的IO。在将IO加入到submmit_IOQ队列中之后,会唤醒该队列,调用该队列的处理线程进行操作。
本申请实施例提供的第三种多控存储中IO管理的方法,是在上述第二种多控存储中IO管理的方法的基础上,还包括如下技术特征:
所述将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发包括:
从所述submmit_IOQ中取出IOE,将所述IOE转换成下层所能处理的IO单位;
根据所述IOE的读写属性,调用下层的读接口或写接口,向下层下发所述IOE中的IO;
调用IOE的回调函数,释放所述IOE的数据结构。
需要说明的是,IOE是一个IO的管理单位,用来表示一个IO,上层到来的IO都封装在这个数据结构中,IOE中有表示这个IO所属的存储资源以及读写标志等属性,包括本IO所属的卷、IO数据、读写标志、所注册的插件链表、插件数量。
本申请实施例提供的第四种多控存储中IO管理的方法,是在上述第三种多控存储中IO管理的方法的基础上,还包括如下技术特征:
所述调用所述route_IOQ队列的线程进行处理包括:
从所述route_IOQ中取出IO;
判断当前的所述IO所属的控制器是否有注册的插件,如果有,则从插件链表中按照优先级从高到低依次选取插件,将所述IO依次交给所述插件处理;
当所述IO被所有的插件处理完毕后,休眠所述route_IOQ,将IO添加到所述submmit_IOQ队列中。
需要说明的是,存储系统中的很多高级特性可以做成插件的形式,当需要使用该功能时,将该插件注册到虚拟卷中。加入IO管理模块之后,系统对IO的控制和监控就更加方便,不但可以方便的增加IO性能监控的插件,而且可以随时增加或减少高级功能,这些功能根据特定的环境可能需要也可能不需要,需要根据情况实时添加,具体的,这些高级功能可以插件的形式注册到IO管理模块中,操作方便。
本申请实施例提供的第五种多控存储中IO管理的方法,是在上述第一种至第四种多控存储中IO管理的方法中任一种的基础上,还包括如下技术特征:
所述判断所述虚拟卷是否处于正常状态之后还包括:
如果所述虚拟卷处于挂起状态或者error状态,则返回错误并结束流程。
在这种情况下,就不再对虚拟卷进行IO操作。
本申请实施例提供的第一种多控存储中IO管理的装置如图2所示,图2为本申请实施例提供的第一种多控存储中IO管理的装置的示意图,该装置包括设置于存储系统中的多个控制器,以及与多个所述控制器连接的IO管理模块,其中,所述IO管理模块包括:
接收单元201,用于接收上层发来的IO,具体的,各种高级功能可以以插件的形式注册到IO管理模块中,当上层IO到来时,IO管理模块根据IO的特性确定是否需要将IO转发给其他控制器以及是否需要交由插件处理;
第一判断单元202,用于根据所述IO的属性,判断所述IO所属的虚拟卷是否存在,如果否,则结束,其中,虚拟卷(VLVM)用来表示一个逻辑卷,同存储资源中的逻辑卷是一一对应的。逻辑卷是存储系统中的存储资源,所有的IO最后都是要对逻辑卷进行读写,每一个VLVM都有一个ID,在VLVM中包含一个链表,该链表链接了所有注册到该虚拟卷上的插件。当所述IO所属的虚拟卷不存在时,就不能进行相关的处理,结束流程;
第二判断单元203,用于如果是,则判断所述虚拟卷是否属于当前的控制器,如果否,则查询所述虚拟卷所属的控制器,并转发至与所述虚拟卷对应的控制器,这就能够确定出虚拟卷对应的控制器,利用控制器进行相应的操作;
第三判断单元204,用于判断所述虚拟卷是否处于正常状态,如果是,则将所述IO加入route_IOQ队列中,调用所述route_IOQ队列的线程进行处理,其中,IOQ就是IO队列,用来存储IO,在将IO加入到route_IOQ队列中后,会唤醒该队列,调用该队列的处理线程进行操作。这种IO路由功能负责接收上层发来的IO,然后根据IO所属的虚拟卷判断该IO是否属于该控制器确定是否要进行IO转发,然后根据所属的虚拟卷中注册的插件,将IO依次发送到各个插件中执行。
本申请实施例提供的第二种多控存储中IO管理的装置,是在上述第一种多控存储中IO管理的装置的基础上,还包括如下技术特征:
下发单元,用于将处理完毕的所述IO加入到submmit_IOQ队列中,向下层下发。
需要说明的是,存储软件系统中包含有多个模块,模块之间可能是在同一层次,也可能在不同层次。具体的,先从上层接收IO,控制IO在本层的流向,然后将本层处理完毕的IO向下层下发。submmit_IOQ也就是提交IO队列,用来向IO管理模块的下层提交在IO管理模块中处理完毕的IO。在将IO加入到submmit_IOQ队列中之后,会唤醒该队列,调用该队列的处理线程进行操作
本申请实施例提供的第三种多控存储中IO管理的装置,是在上述第二种多控存储中IO管理的装置的基础上,还包括如下技术特征:
所述下发单元包括:
转换部件,用于从所述submmit_IOQ中取出IOE,将所述IOE转换成下层所能处理的IO单位;
下发部件,用于根据所述IOE的读写属性,调用下层的读接口或写接口,向下层下发所述IOE中的IO;
释放部件,用于调用IOE的回调函数,释放所述IOE的数据结构。
需要说明的是,IOE是一个IO的管理单位,用来表示一个IO,上层到来的IO都封装在这个数据结构中,IOE中有表示这个IO所属的存储资源以及读写标志等属性,包括本IO所属的卷、IO数据、读写标志、所注册的插件链表、插件数量。
本申请实施例提供的第四种多控存储中IO管理的装置,是在上述第三种多控存储中IO管理的装置的基础上,还包括如下技术特征:
所述第三判断单元包括:
取出部件,用于从所述route_IOQ中取出IO;
判断部件,用于判断当前的所述IO所属的控制器是否有注册的插件,如果有,则从插件链表中按照优先级从高到低依次选取插件,将所述IO依次交给所述插件处理;
休眠部件,用于当所述IO被所有的插件处理完毕后,休眠所述route_IOQ,将IO添加到所述submmit_IOQ队列中。
需要说明的是,存储系统中的很多高级特性可以做成插件的形式,当需要使用该功能时,将该插件注册到虚拟卷中。加入IO管理模块之后,系统对IO的控制和监控就更加方便,不但可以方便的增加IO性能监控的插件,而且可以随时增加或减少高级功能,这些功能根据特定的环境可能需要也可能不需要,需要根据情况实时添加,具体的,这些高级功能可以插件的形式注册到IO管理模块中,操作方便。
本申请实施例提供的第五种多控存储中IO管理的装置,是在上述第一种至第四种多控存储中IO管理的装置中任一种的基础上,还包括如下技术特征:
返回单元,用于如果所述虚拟卷处于挂起状态或者error状态,则返回错误并结束流程。
在这种情况下,就不再对虚拟卷进行IO操作。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。