处理IO请求的方法及装置与流程

文档序号:15019682发布日期:2018-07-25 00:24阅读:282来源:国知局

本申请涉及存储领域,特别涉及处理IO请求的方法及装置。



背景技术:

在存储领域,通常用缓存技术提高处理IO请求的响应速度,进而提高存储系统的性能。

存储设备的控制器可以将LUN(Logical Unit Number,逻辑单元号)中的数据保存到缓存空间中,以便于接收到读取上述数据的读IO请求时,可以直接从缓存空间中返回上述数据,从而提高响应速度。其中,从LUN中保存到缓存空间中的数据称为有效数据,有效数据为LUN中数据的备份。

存储设备的控制器在处理写IO请求时,可以将写IO请求携带的待写入数据写入到缓存空间,然后返回写入成功,从而提高响应速度。其中,上述待写入数据写入到缓存空间中即为脏数据,脏数据会在后续写入到LUN当中。

对于双控制器系统,一般采用缓存镜像技术作为保护缓存数据的手段。其基本原理是,两个控制器的缓存空间中均保存一致的脏数据副本,当任一控制器发生故障(其缓存空间内的数据不可用),另一控制器仍能提供对应的数据访问。

然而,在现有技术中,双控制器系统的控制器管理缓存空间较为复杂,影响系统性能。

此外,在双控制器系统中,若其中一个控制器与前端发生连接故障,前端访问该控制器时,会通过与另一个控制器之间的路径发送IO请求,另一个控制器再将上述IO请求转发至上述控制器。其中,另一控制器接收并转发上述IO请求的路径为非优化路径。为将转发IO请求的过程统一调度,一般引入专用的转发模块。

然而,在处理从非优化路径接收的IO请求时,存在内部转发流程,若双控存储设备的LUN数量较多,转发模块的调度开销和自身带宽会成为整个系统的性能瓶颈。



技术实现要素:

有鉴于此,本申请提供处理IO请求的方法及装置,用以解决现有技术在管理缓存空间和内部转发过程中影响系统性能的问题。

具体地,本申请是通过如下技术方案实现的:

一种处理IO请求的方法,应用于双控存储设备,所述双控存储设备包括第一控制器和第二控制器,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址,所述第一控制器和所述第二控制器的缓存空间中的两个具有相同偏移地址的缓存块互为镜像,包括:

所述第一控制器接收到写IO请求,确定所述写IO请求中的LUN标识是否为隶属于本地的LUN标识;

如果所述写IO请求中的LUN标识不是隶属于本地的LUN标识,所述第一控制器将所述写IO请求转发至所述第二控制器,以由所述第二控制器确定目标缓存块并返回所述目标缓存块的偏移地址;

所述第一控制器基于所述偏移地址,将所述写IO请求中的待写入数据写入所述目标缓存块的镜像缓存块;

所述第一控制器将所述待写入数据写入所述目标缓存块,并发送写IO成功信息。

在所述处理IO请求的方法中,所述方法还包括:

如果所述写IO请求中的LUN标识是隶属于本地的LUN标识,所述第一控制器确定目标缓存块;

所述第一控制器将所述写IO请求中的待写入数据写入所述目标缓存块;

基于所述目标缓存块的偏移地址,将所述待写入数据写入所述目标缓存块的镜像缓存块。

在所述处理IO请求的方法中,所述方法还包括:

第一控制器将所述待写入数据写入所述目标缓存块后,为所述目标缓存块添加脏数据标识;

第一控制器将所述待写入数据写入所述目标缓存块的镜像缓存块后,为所述镜像缓存块添加脏数据标识。

在所述处理IO请求的方法中,所述方法还包括:

所述第一控制器基于互斥原则对任一一对互为镜像的缓存块进行操作;其中,所述互斥原则为所述第一控制器和所述第二控制器不能同时对互为镜像的缓存块进行操作。

一种处理IO请求的方法,应用于双控存储设备,所述双控存储设备包括第一控制器和第二控制器,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址,所述第一控制器和所述第二控制器的缓存空间中的两个具有相同偏移地址的缓存块互为镜像,包括:

所述第一控制器接收到读IO请求,确定所述读IO请求中的LUN标识是否为隶属于本地的LUN标识;

如果所述读IO请求中的LUN标识不是隶属于本地的LUN标识,所述第一控制器将所述读IO请求转发至所述第二控制器,以由所述第二控制器在确定所述第一控制器的缓存空间中存在待读取数据后返回确认信息;其中,所述确认信息携带所述待读取数据的偏移地址;

所述第一控制器基于所述偏移地址,从缓存空间中获取并发送所述待读取数据。

在所述处理IO请求的方法中,所述方法还包括:

所述第一控制器接收到所述第二控制器转发的读IO请求,确定本地的缓存空间中是否存在保存所述读IO请求的待读取数据的目标缓存块;

如果存在所述目标缓存块,所述第一控制器确定所述目标缓存块的镜像缓存块是否保存所述待读取数据;

如果所述镜像缓存块保存所述待读取数据,所述第一控制器向所述第二控制器返回所述确认信息。

在所述处理IO请求的方法中,所述方法还包括:

如果不存在所述目标缓存块,所述第一控制器从所述读IO请求中的LUN标识对应的LUN中读取所述待读取数据并写入选中的目标缓存块中;

所述第一控制器将所述待读取数据写入所述目标缓存块的镜像缓存块,并向所述第二控制器返回所述确认信息。

在所述处理IO请求的方法中,所述方法还包括:

如果所述目标缓存块的镜像缓存块未保存所述待读取数据,第一控制器将所述待读取数据写入所述镜像缓存块,并向所述第二控制器返回所述确认信息。

在所述处理IO请求的方法中,所述方法还包括:

所述第一控制器根据所述读IO请求,基于预设的预读策略从所述LUN读取数据并写入选中的若干缓存块中,并将所述若干缓存块中的数据写入所述若干缓存块的镜像缓存块中。

在所述处理IO请求的方法中,所述方法还包括:

将数据写入缓存块后,为所述缓存块添加有效数据标识;其中,所述缓存块包括所述目标缓存块、所述若干缓存块和所述镜像缓存块。

在所述处理IO请求的方法中,所述方法还包括:

所述第一控制器基于互斥原则对任一一对互为镜像的缓存块进行操作;其中,所述互斥原则为所述第一控制器和所述第二控制器不能同时对互为镜像的缓存块进行操作。

一种处理IO请求的装置,应用于双控存储设备,所述双控存储设备包括第一控制器和第二控制器,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址,所述第一控制器和所述第二控制器的缓存空间中的两个具有相同偏移地址的缓存块互为镜像,包括:

第一接收单元,用于接收到写IO请求,确定所述写IO请求中的LUN标识是否为隶属于本地的LUN标识;

第一转发单元,用于如果所述写IO请求中的LUN标识不是隶属于本地的LUN标识,将所述写IO请求转发至所述第二控制器,以由所述第二控制器确定目标缓存块并返回所述目标缓存块的偏移地址;

写入单元,用于基于所述偏移地址,将所述写IO请求中的待写入数据写入所述目标缓存块的镜像缓存块;

第一发送单元,用于将所述待写入数据写入所述目标缓存块,并发送写IO成功信息。

一种处理IO请求的装置,应用于双控存储设备,所述双控存储设备包括第一控制器和第二控制器,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址,所述第一控制器和所述第二控制器的缓存空间中的两个具有相同偏移地址的缓存块互为镜像,包括:

第二接收单元,用于接收到读IO请求,确定所述读IO请求中的LUN标识是否为隶属于本地的LUN标识;

第二转发单元,用于如果所述读IO请求中的LUN标识不是隶属于本地的LUN标识,将所述读IO请求转发至所述第二控制器,以由所述第二控制器在确定所述第一控制器的缓存空间中存在待读取数据后返回确认信息;其中,所述确认信息携带所述待读取数据的偏移地址;

第二发送单元,用于基于所述偏移地址,从缓存空间中获取并发送所述待读取数据。

在本申请技术方案中,双控存储设备包括第一控制器和第二控制器,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址,所述第一控制器和所述第二控制器的缓存空间中的两个具有相同偏移地址的缓存块互为镜像;

所述第一控制器接收到发送至所述第二控制器的写IO请求,可以将所述写IO请求发送至所述第二控制器,以由所述第二控制器确定目标缓存块并返回所述目标缓存块的偏移地址,所述第一控制器可以基于所述偏移地址将所述写IO请求中的待写入数据写入所述目标缓存块和所述目标缓存块的镜像缓存块;

所述第一控制器接收到发送至所述第二控制器的读IO请求,可以将所述读IO请求发送至所述第二控制器,以由所述第二控制器在确定所述第一控制器的缓存空间中存在待读取数据后返回确认信息;其中,所述确认信息携带所述待读取数据的偏移地址;所述第一控制器可以基于所述偏移地址,从缓存空间中获取并发送所述待读取数据;

由于所述第一控制器和所述第二控制器的缓存空间中存在具有相同偏移地址的互为镜像的缓存块,所述第一控制器可以方便地基于所述第二控制器返回的偏移地址在缓存空间中写入所述待写入数据,或者,基于所述第二控制器返回的偏移地址从缓存空间中读取所述待读取数据,减少了创建镜像缓存块以及维护镜像关系的系统开销;此外,取消了转发模块,避免转发模块的调度开销和自身带宽成为整个系统的性能瓶颈。

附图说明

图1是现有技术的一种双控存储设备处理写IO请求的示意图;

图2是现有技术的一种双控存储设备处理读IO请求的示意图;

图3是现有技术的一种双控存储设备的架构图;

图4是现有技术的一种双控存储设备处理非优化路径的IO请求的示意图;

图5是本申请示出的一种双控存储设备的架构图;

图6是本申请示出的一种处理IO请求的方法的流程图;

图7是本申请示出的另一种处理IO请求的方法的流程图;

图8是本申请示出的一种处理IO请求的装置的实施例框图;

图9是本申请示出的一种处理IO请求的装置的硬件结构图;

图10是本申请示出的另一种处理IO请求的装置的实施例框图;

图11是本申请示出的另一种处理IO请求的装置的硬件结构图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对现有技术方案和本发明实施例中的技术方案作进一步详细的说明。

双控制器系统通常可以利用PCIE(Peripheral Component Interconnect Express)非透明桥实现双控制器的内存地址映射,并进一步实现缓存数据的传输和备份。

缓存的实现原理中,对于读IO请求和写IO请求的处理有很大的区别。

对于写IO请求,缓存技术主要从三方面提供性能加速。参见图1,为现有技术的一种双控存储设备处理写IO请求的示意图。

1.双控存储设备的任一控制器接收到写IO请求后,会将上述写IO请求携带的待写入数据写入到缓存中,写入缓存中的数据即为脏数据,然后将数据写入到另一控制器的缓存中形成镜像脏数据。通过缓存技术,控制器可以在将上述写IO请求携带的数据写入到缓存中以后即返回写入成功,减少了将上述待写入数据写入磁盘空间的时延,从而提高响应速度,达到性能提升的目的;

2.控制器在将脏数据写入磁盘空间之前,可以根据数据的特点,对缓存中的脏数据进行有效地排序、合并,使得后续写入效率更高;

3.缓存中已写入脏数据的位置可能会再次写入新的数据,则之前的脏数据可以被完全覆盖。当针对磁盘空间中的同一地址反复写入数据时,则实际上只需将最后一次写IO请求中的数据写入磁盘空间。通过缓存技术,减少了此前若干次数据写入磁盘空间的操作,减轻了磁盘的压力。

对于读IO请求,缓存技术主要通过提高读IO请求的命中率来提升性能。参见图2,为现有技术的一种双控存储设备处理读IO请求的示意图。

双控存储设备的任一控制器接收针对磁盘空间中的数据的读IO请求后,可以选择最近被读取或者一段时间内被频繁读取的数据保存在缓存空间,以便再次接收到读取上述数据的读IO请求时,可以直接从缓存空间中返回上述数据。

此外,控制器还可以通过预读策略自主选择从磁盘空间读取一部分数据到缓存中,以期望稍后会发生命中,相关原理可参照现有技术,在此不再赘述。

控制器从磁盘空间保存到缓存中的数据成为有效数据。由于即便控制器发生故障,另外的控制器也可以从磁盘空间中重新获取上述数据,因此,有效数据一般不保存镜像数据。

在现有技术中,双控制器系统采用互备方式运行,单个LUN的处理逻辑优先在其中一个控制器执行。参见图3,为现有技术的一种双控存储设备的架构图,在该双控存储设备中,LUN-1归属控制器1,LUN-2归属控制器2,控制器根据对读IO请求和写IO请求不同的处理方式,将缓存空间从逻辑上划分为读缓存区域和写缓存区域。其中,只有写缓存区域存在生成镜像的操作。

如图3所示,“Valid1-1”是LUN-1的有效数据,“Dirty1-1”,“Dirty1-2”是LUN-1的脏数据,“Mirror1-1”,“Mirror1-2”是LUN-1的镜像脏数据;“Valid2-1”,“Valid2-2”,“Valid2-3”是LUN-2的有效数据,“Dirty2-1”是LUN-2的脏数据,“Mirror2-1”是LUN-2的镜像脏数据。

控制器1不需要为LUN-2分配存放有效数据的缓存空间,但要为LUN-2分配存放镜像脏数据的缓存空间;相反地,控制器2不需要为LUN-1分配存放有效数据的缓存空间,但要为LUN-1分配存放镜像脏数据的缓存空间。

当有效数据所处的缓存空间写入新的脏数据时,该缓存空间所属的控制器会通知另一控制器分配对应的镜像缓存空间以保存镜像脏数据。当脏数据被写入磁盘空间后,缓存空间中的脏数据即成为有效数据,该缓存空间所属的控制器会通知另一控制器释放对应的镜像缓存空间用以缓存其它数据。

此外,当控制器1发生故障,归属于控制器1的LUN-1会被控制器2接管,控制器2会为LUN-1分配用于存放有效数据的缓存空间。

可见,控制器在处理读IO请求和写IO请求时,如果有效数据的缓存空间被写入脏数据、或者脏数据写入磁盘后失效,需要对缓存空间进行转换,且需要维护两个控制器的缓存空间中数据的镜像关系,管理缓存空间比较复杂,影响系统性能。

参见图4,为现有技术的一种双控存储设备处理非优化路径的IO请求的示意图。当双控存储器的其中一个控制器与前端发生连接故障,则前端应用访问该控制器时,会通过与另一控制器之间的路径发送IO请求,再由另一控制器转发上述IO请求。其中,另一控制器接收并转发上述IO请求的路径为非优化路径。

为将转发过程进行统一调度,一般可以引入专用的转发模块。以处理写IO请求为例,转发模块从控制器2的前端路径接收到针对控制器1的缓存空间的访问请求,先将写IO请求写入临时内存2,再内部转发至临时内存1,进而从临时内存1中将上述写IO请求发送至控制器1的缓存空间。控制器1不感知上述写IO请求是否由非优化路径接收,可以正常处理。

然而,若双控存储设备的LUN数量较多,存在大量非优化路径接收到的IO请求时,转发模块的调度开销和自身带宽会成为整个系统的性能瓶颈。

有鉴于此,本申请提供处理IO请求的方法及装置,用以解决双控存储设备在管理缓存空间和内部转发过程中影响系统性能的问题。

参见图5,为本申请示出一种双控存储设备的架构图,参见图5,双控存储设备包括第一控制器(图中的控制器1)、第二控制器(图中控制器2)和磁盘,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址。上述第一控制器和上述第二控制器的缓存空间中两个具有相同偏移地址的缓存块互为镜像。

其中,第一控制器和第二控制器均为便于描述进行的命名,两个控制器并无差别,并不限定本申请。

如图5所示,控制器1的缓存空间中标识为1的缓存块与控制器2的缓存空间中标识为1的缓存块具有相同的偏移地址,且互为镜像。控制器1的缓存空间中标识为2的缓存块与控制器2的缓存空间中标识为2的缓存块具有相同的偏移地址,且互为镜像。以此类推,控制器1的缓存空间中的任一缓存块在控制器2的缓存空间中均存在镜像缓存块。

当互为镜像的两个缓存块中有一个缓存块写入脏数据,则另一个缓存块会写入镜像脏数据;当互为镜像的两个缓存块中有一个缓存块写入有效数据,则另一个缓存块可以写入镜像有效数据或者处于闲置状态,图中“No Data”表示未写入镜像有效数据。

通过上述划分形成的默认镜像关系,双控存储设备无需维护镜像关系,降低了管理缓存空间带来的系统开销。

需要指出的是,各缓存块存在对应的元数据(图中未示出),用以标记其中是否写入数据,以及写入的数据的性质(脏数据或有效数据)。

在示出的一种实施方式中,缓存块的每个最小存储单位对应两个标识位,其中一个标识位表征该存储单位中是否写入脏数据,另一个标识为表征该存储单位中是否写入有效数据。

比如:各缓存块为8KB(Kilobyte,千字节),最小存储单位为512B(Byte,字节)。则各缓存块可基于最小存储单位划分为16个扇区,各扇区对应脏数据标识位和有效数据标识位,若任一扇区写入有效数据,则对应的有效数据标识位为1,对应的脏数据标识位为0;若任一扇区写入脏数据,则对应的有效数据标识位为0,对应的脏数据标识位为1;若任一扇区未写入数据,则对应的有效数据标识位为0,对应的脏数据标识位为0。在这种实施方式中,各缓存块的标识位只占32比特。

需要指出的是,若任一扇区在此前已写入有效数据的情况下,写入了脏数据,则对应的脏数据标识位为1,对应的有效数据标识位仍可保持为1。在这种情况下,脏数据标识位的优先级高于有效数据标识位的优先级,控制器需先检查脏数据标识位判断扇区内是否写入脏数据,若脏数据标识位为0,继续检查有效数据标识位判断扇区内是否写入有效数据。

在本申请实施例中,双控存储设备的两个控制器可以分别为隶属于本地LUN分配对应的缓存块,并将分配结果记录在缓存块分配表中,其中,上述缓存块分配表包括LUN标识与缓存块标识(或缓存块的偏移地址)的映射关系。

需要指出的是,当双控存储设备的两个控制器在分配存储块时,基于互斥原则对任一一对互为镜像的缓存块进行操作;其中,上述互斥原则为上述第一控制器和上述第二控制器不能同时对互为镜像的缓存块进行操作。

以图5为例进行说明,控制器1为隶属于本地的LUN-1分配缓存块,控制器2为隶属于本地的LUN-2分配缓存块。当控制器1选中本地的缓存块1分配给LUN-1时,实际上同时将控制器2的缓存空间中的缓存块1分配给LUN-1。为避免控制器2再将本地的缓存块1分配给LUN-2。控制器1在为隶属于本地的LUN分配缓存块时,可以通过互斥锁锁住控制器2的缓存空间,并在分配完成后解除锁定。控制器1可以将上述缓存块分配表共享至控制器2。

控制器2基于上述缓存块分配表,选择未被分配的缓存块分配给隶属于本地的LUN。当然,控制器2在分配缓存块时也可以锁定控制器1的缓存空间,并在分配结束后共享缓存块分配表。

在控制器完成缓存块的分配后,可以基于本申请的技术方案处理IO请求。

参见图6,为本申请示出的一种处理IO请求的方法的流程图,该方法应用于双控存储设备,所述双控存储设备参照图5示出的双控存储设备,所述方法包括以下步骤:

步骤601:所述第一控制器接收到写IO请求,确定所述写IO请求中的LUN标识是否为隶属于本地的LUN标识。

步骤602:如果所述写IO请求中的LUN标识不是隶属于本地的LUN标识,所述第一控制器将所述写IO请求转发至所述第二控制器,以由所述第二控制器确定目标缓存块并返回所述目标缓存块的偏移地址。

在本申请实施例中,第一控制器从与前端连接的路径接收到写IO请求,可以首先确定上述写IO请求中的LUN标识是否为隶属于本地的LUN标识。其中,上述写IO请求携带LUN标识、数据起始地址和数据长度的映射关系,该数据起始地址为LUN标识对应的LUN中的数据起始地址。

一方面,如果上述写IO请求中的LUN标识是隶属于本地的LUN标识,则上述第一控制器可以直接确定目标缓存块。

具体地,上述第一控制器可以基于上述缓存块分配表选择与该LUN标识对应的未写入数据的缓存块作为目标缓存块。

上述第一控制器可以将上述写IO请求中的待写入数据写入上述目标缓存块。

此外,由于目标缓存块与镜像缓存块的偏移地址相同,上述第一控制器可以基于上述目标缓存块的偏移地址,将上述待写入数据写入上述目标缓存块的镜像缓存块。

在示出的一种实施方式中,上述第一控制器在将上述待写入数据写入上述目标缓存块和上述目标缓存块的镜像缓存块后,可以为上述目标缓存块和上述镜像缓存块添加脏数据标识。

另一方面,如果上述写IO请求中的LUN标识不是隶属于本地的LUN标识,则上述第一控制器可以将上述写IO请求转发至上述第二控制器。需要指出的是,为减少带宽消耗,转发至上述第二控制器的写IO请求不携带上述待写入数据。

上述第二控制器可以确定目标缓存块,并将上述目标缓存块的偏移地址发送至上述第一控制器。

此外,上述第二控制器可以锁定上述目标缓存块,不再对上述目标缓存块进行操作。

步骤603:所述第一控制器基于所述偏移地址,将所述写IO请求中的待写入数据写入所述目标缓存块的镜像缓存块。

上述第一控制器接收到上述偏移地址,可以基于上述偏移地址将上述写IO请求中的待写入数据写入上述目标缓存块的镜像缓存块。

在示出的一种实施方式中,上述第一控制器将上述待写入数据写入上述目标缓存块的镜像缓存块后,可以为上述镜像缓存块添加脏数据标识。通过该措施,控制器可以确定该缓存块已写入脏数据。

另外,如果上述镜像缓存块此前已添加有效数据标识,则上述第一控制器可以去除该有效数据标识,然后添加脏数据标识。当然,上述第一控制器也可以保留该有效数据标识。

上述第二控制器可以基于处理写IO请求的结果,更新本地缓存表。

步骤604:所述第一控制器将所述待写入数据写入所述目标缓存块,并发送写IO成功信息。

上述第一控制器可以将上述待写入数据写入上述第二控制器的缓存空间中的上述目标缓存块,然后向前端发送写IO成功信息,从而完成一次处理IO请求的过程。

在示出的一种实施方式中,上述第一控制器将上述待写入数据写入上述目标缓存块后,可以为上述目标缓存块添加脏数据标识。

另外,如果上述目标缓存块此前已添加有效数据标识,则上述第一控制器可以去除该有效数据标识,然后添加脏数据标识。

此外,上述第一控制器在将上述待写入数据写入上述目标缓存块后,可以向上述第二控制器发送写入完成信息,以由上述第二控制器解除对上述目标缓存块的锁定并在后续将上述待写入数据写入到上述LUN标识对应的LUN中。

当然,上述第一控制器还可以更新本地缓存表,以便于后续基于本地缓存表从缓存空间中获取数据。其中,上述本地缓存表包括LUN标识、数据起始地址和偏移地址(或缓存块标识)的映射关系。具体更新过程可参照现有技术,在此不再赘述。

在本申请实施中,如果上述第二控制器将本地的缓存空间中的脏数据写入到LUN当中,可以将已写入的脏数据所在的缓存块的脏数据标识更改为有效数据标识。具体可参照现有技术,在此不再赘述。

参见图7,为本申请示出的一种处理IO请求的方法的流程图,该方法应用于双控存储设备,所述双控存储设备参照图5示出的双控存储设备,所述方法包括以下步骤:

步骤701:所述第一控制器接收到读IO请求,确定所述读IO请求中的LUN标识是否为隶属于本地的LUN标识。

步骤702:如果所述读IO请求中的LUN标识不是隶属于本地的LUN标识,所述第一控制器将所述读IO请求转发至所述第二控制器,以由所述第二控制器在确定所述第一控制器的缓存空间中存在待读取数据后返回确认信息;其中,所述确认信息携带所述待读取数据的偏移地址。

在本申请实施例中,第一控制器从与前端连接的路径接收到读IO请求,可以首先确定上述读IO请求中的LUN标识是否为隶属于本地的LUN标识。其中,上述读IO请求携带LUN标识、数据起始地址和数据长度的映射关系,该数据起始地址为LUN标识对应的LUN中的数据起始地址。

一方面,如果上述读IO请求中的LUN标识是隶属于本地的LUN标识,则上述第一控制器可以确定上述读IO请求是否命中本地的缓存空间。

具体地,上述第一控制器可以基于上述读IO请求中的LUN标识、数据起始位置和数据长度查找预设的本地缓存表,确定是否存在对应的本地缓存表项。如果是,可以检查对应于本地缓存表项中的偏移地址的缓存空间中是否写入数据(是否存在脏数据标识或有效数据标识),并在写入数据的情况下,读取上述读IO请求的待读取数据;如果否,或者对应于上述偏移地址的缓存空间中未写入数据,则基于上述读IO请求中的LUN标识、数据起始位置和数据长度从LUN标识对应的LUN中读取上述待读取数据。

需要指出的是,一个读IO请求可能被拆分为多个LUN标识和数据起始位置的组合,用以查找本地缓存表。

具体可参照现有技术,本申请在此不再赘述。

另一方面,如果上述读IO请求中的LUN标识不是隶属于本地的LUN标识,则上述第一控制器可以将上述读IO请求转发至上述第二控制器。

上述第二控制器接收到上述第一控制器转发的上述读IO请求,可以在确定上述第一控制器的缓存空间中存在待读取数据后返回确认信息。

在示出的一种实施方式中,上述第二控制器接收到上述第一控制器转发的上述读IO请求,首先可以确定本地的缓存空间中是否存在保存上述读IO请求的待读取数据的目标缓存块。

具体地,上述第二控制器可以基于上述读IO请求中的LUN标识、数据起始位置和数据长度查找本地缓存表,确定是否存在对应的本地缓存表项。并在存在对应的本地缓存表项时,确定本地缓存表项中的偏移地址对应的缓存块是否写入数据,如果已写入数据(存在脏数据标识或有效数据标识),则该缓存块为目标缓存块。

如果存在上述目标缓存块,则上述第二控制器可以进一步确定上述目标缓存块的镜像缓存块是否保存上述待读取数据。

由于上述目标缓存块与上述镜像缓存块中的数据一致,作为一种实施例,上述第二控制器可以基于上述目标缓存块的偏移地址检查上述第一控制器的缓存空间,确定上述镜像缓存块是否添加脏数据标识或有效数据标识。当上述镜像缓存块添加有效数据标识或脏数据标识,说明上述镜像缓存块已经保存上述待读取数据。

在这种情况下,上述第二控制器可以向上述第一控制器发送确认信息。其中,上述确认信息携带上述待读取数据的偏移地址。

当上述镜像缓存块未保存上述待读取数据,上述第二控制器可以基于上述目标缓存块的偏移地址,将上述目标缓存块中的待读取数据写入上述镜像缓存块,并在写入完成后,向上述第一控制器发送上述确认信息。

当然,上述第二控制器在将上述待读取数据写入上述镜像缓存块后,可以为上述镜像缓存块添加有效数据标识。

如果不存在上述目标缓存块,则上述第二控制器可以从上述读IO请求中的LUN标识对应的LUN中读取上述待读取数据,并将上述待读取数据写入选中的目标缓存块中。

其中,作为一种实施例,上述第二控制器可以通过本地的缓存块分配表选择对应于LUN标识且未添加脏数据标识的缓存块作为目标缓存块。当然,若对应于LUN标识的缓存块都已添加脏数据标识,上述第二控制器可以再向该LUN标识分配新的缓存块。

进一步地,上述第二控制器还需根据选中的目标缓存块的偏移地址,将上述待读取数据写入上述目标缓存块的镜像缓存块中,然后向上述第一控制器发送上述确认信息。

当然,上述第二控制器在将上述待读取数据写入上述目标缓存块后,可以为上述目标缓存块添加有效数据标识;上述第二控制器在将上述待读取数据写入上述镜像缓存块后,可以为上述镜像缓存块添加有效数据标识。

在示出的一种实施方式中,上述第二控制器在向上述第一控制器发送上述确认信息之前,可以先锁定上述目标缓存块,以免在针对上述目标缓存块进行其它操作时更改上述目标缓存块中已写入的数据。

在本申请实施中,上述第二控制器可以基于上述第一控制器转发的上述读IO请求,基于预设的预读策略从上述读IO请求中的LUN标识对应的LUN读取数据并写入选中的若干缓存块中,并将上述若干缓存块中的数据写入上述若干缓存块的镜像缓存块中。

以图5为例进行说明,控制器1接收到控制器2转发的非优化路径的读IO请求,上述读IO请求所读取的是隶属于控制器1的LUN-1中的一段连续的数据,比如,3个读IO请求连续读取数据起始地址1、数据起始地址2和数据起始地址3中的数据。则控制器1可以将LUN-1中数据起始地址4、数据起始地址5中的数据预读到本地若干缓存块中,然后将上述数据写入上述若干缓存块的镜像缓存块。

通过该措施,上述第二控制器在后续接收到上述第一控制器转发的读IO请求后,可以更快地向上述第一控制器发送确认信息。减少了当上述第一控制器的缓存空间中尚未写入待读取数据时,上述第二控制器向上述第一控制器写入待读取数据的时延,从而提升了双控存储系统的响应速度。

当然,第二控制器在向上述若干缓存块和上述若干缓存块的镜像缓存块写入数据后,可以为上述缓存块添加有效数据标识。

步骤703:所述第一控制器基于所述偏移地址,从缓存空间中获取并发送所述待读取数据。

上述第一控制器接收到上述第二控制器返回的确认信息,可以基于上述确认信息中的偏移地址,从本地的缓存空间中获取上述读IO请求的待读取数据,然后将上述待读取数据发送至前端,从而完成一次处理IO请求的过程。

此外,上述第一控制器将上述待读取数据发送至前端后,可以向上述第二控制器发送读取完成信息,以由上述第二控制器解除对上述目标缓存块的锁定。该措施为互斥原则的一种实施例,避免了当双控存储设备处理多个IO请求时,两个控制器同时对互为镜像的缓存块进行操作,导致处理IO请求失败。

综上所述,在本申请技术方案中,双控存储设备包括第一控制器和第二控制器,各控制器对应的缓存空间分别被划分为多个缓存块,各缓存块存在对应的偏移地址,上述第一控制器和上述第二控制器的缓存空间中的两个具有相同偏移地址的缓存块互为镜像;

第一控制器接收到发送至第二控制器的写IO请求,可以将上述写IO请求发送至第二控制器;第二控制器确定出目标缓存块后向第一控制器返回上述目标缓存块的偏移地址;第一控制器可以基于上述偏移地址将上述写IO请求中的待写入数据写入上述目标缓存块和上述目标缓存块的镜像缓存块;

第一控制器接收到发送至第二控制器的读IO请求,可以将上述读IO请求发送至第二控制器;第二控制器确定上述第一控制器的缓存空间中存在待读取数据后返回确认信息;其中,上述确认信息中携带上述待读取数据的偏移地址;第一控制器可以基于上述偏移地址,从本地的缓存空间中获取并发送上述待读取数据;

由于第一控制器和第二控制器的缓存空间中存在具有相同偏移地址的互为镜像的缓存块,第一控制器和第二控制器无需管理缓存块的镜像关系,也无需创建任一缓存块的镜像缓存块,减少了性能开销;

第一控制器可以基于第二控制器返回的偏移地址在缓存空间中写入待写入数据,后者,基于第二控制器返回的偏移地址从缓存空间中读取待读取数据;

此外,本申请中的双控存储设备取消转发模块,避免转发模块的调度开销和自身带宽成为整个系统的性能瓶颈。

与前述处理IO请求的方法的实施例相对应,本申请还提供了处理IO请求的装置的实施例。

参见图8,为本申请示出的一种处理IO请求的装置的实施例框图:

如图8所示,该处理IO请求的装置80,包括:

第一接收单元810,用于接收到写IO请求,确定所述写IO请求中的LUN标识是否为隶属于本地的LUN标识。

第一转发单元820,用于如果所述写IO请求中的LUN标识不是隶属于本地的LUN标识,将所述写IO请求转发至所述第二控制器,以由所述第二控制器确定目标缓存块并返回所述目标缓存块的偏移地址。

写入单元830,用于基于所述偏移地址,将所述写IO请求中的待写入数据写入所述目标缓存块的镜像缓存块。

第一发送单元840,用于将所述待写入数据写入所述目标缓存块,并发送写IO成功信息。

在本例中,所述装置还包括:

第一确定单元850(图中未示出),用于如果所述写IO请求中的LUN标识是隶属于本地的LUN标识,确定目标缓存块。

所述写入单元830,进一步用于将所述写IO请求中的待写入数据写入所述目标缓存块;

基于所述目标缓存块的偏移地址,将所述待写入数据写入所述目标缓存块的镜像缓存块。

在本例中,所述装置还包括:

第一添加单元860(图中未示出),用于将所述待写入数据写入所述目标缓存块后,为所述目标缓存块添加脏数据标识;将所述待写入数据写入所述目标缓存块的镜像缓存块后,为所述镜像缓存块添加脏数据标识。

在本例中,所述装置还包括:

第一互斥单元870(图中未示出),用于基于互斥原则对任一一对互为镜像的缓存块进行操作;其中,所述互斥原则为所述第一控制器和所述第二控制器不能同时对互为镜像的缓存块进行操作。

本申请处理IO请求的装置的实施例可以应用在双控存储设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在双控存储设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图9所示,为本申请处理IO请求的装置所在双控存储设备的一种硬件结构图,除了图9所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的双控存储设备通常根据该处理IO请求的装置的实际功能,还可以包括其他硬件,对此不再赘述。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

参见图10,为本申请示出的另一种处理IO请求的装置的实施例框图:

如图10所示,该处理IO请求的装置100,包括:

第二接收单元110,用于接收到读IO请求,确定所述读IO请求中的LUN标识是否为隶属于本地的LUN标识。

第二转发单元120,用于如果所述读IO请求中的LUN标识不是隶属于本地的LUN标识,将所述读IO请求转发至所述第二控制器,以由所述第二控制器在确定所述第一控制器的缓存空间中存在待读取数据后返回确认信息;其中,所述确认信息携带所述待读取数据的偏移地址。

第二发送单元130,用于基于所述偏移地址,从缓存空间中获取并发送所述待读取数据。

在本例中,所述装置还包括:

第二确定单元140(图中未示出),用于接收到所述第二控制器转发的读IO请求,确定本地的缓存空间中是否存在保存所述读IO请求的待读取数据的目标缓存块;

如果存在所述目标缓存块,所述第一控制器确定所述目标缓存块的镜像缓存块是否保存所述待读取数据;

返回单元150(图中未示出),用于如果所述镜像缓存块保存所述待读取数据,向所述第二控制器返回所述确认信息。

在本例中,所述装置还包括:

读取单元160(图中未示出),用于如果不存在所述目标缓存块,从所述读IO请求中的LUN标识对应的LUN中读取所述待读取数据并写入选中的目标缓存块中。

所述返回单元150(图中未示出),进一步用于将所述待读取数据写入所述目标缓存块的镜像缓存块,并向所述第二控制器返回所述确认信息。

在本例中,所述装置还包括:

所述返回单元150(图中未示出),进一步用于如果所述目标缓存块的镜像缓存块未保存所述待读取数据,将所述待读取数据写入所述镜像缓存块,并向所述第二控制器返回所述确认信息。

在本例中,所述装置还包括:

所述读取单元160(图中未示出),进一步用于根据所述读IO请求,基于预设的预读策略从所述LUN读取数据并写入选中的若干缓存块中,并将所述若干缓存块中的数据写入所述若干缓存块的镜像缓存块中。

在本例中,所述装置还包括:

第二添加单元170(图中未示出),进一步用于将数据写入缓存块后,为所述缓存块添加有效数据标识;其中,所述缓存块包括所述目标缓存块、所述若干缓存块和所述镜像缓存块。

在本例中,所述装置还包括:

第二互斥单元180(图中未示出),用于基于互斥原则对任一一对互为镜像的缓存块进行操作;其中,所述互斥原则为所述第一控制器和所述第二控制器不能同时对互为镜像的缓存块进行操作。

本申请处理IO请求的装置的实施例可以应用在双控存储设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在双控存储设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图11所示,为本申请处理IO请求的装置所在双控存储设备的一种硬件结构图,除了图11所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的双控存储设备通常根据该处理IO请求的装置的实际功能,还可以包括其他硬件,对此不再赘述。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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