一种读写请求的处理方法及装置与流程

文档序号:11653893阅读:206来源:国知局
一种读写请求的处理方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种读写请求的处理方法及装置。



背景技术:

在计算机技术快速发展的今天,存储设备作为用以与计算机进行数据交互的重要设备,其可读写能力在与计算机的数据交互中发挥着至关重要的作用。raid(redundantarraysofindependentdisks,磁盘阵列)技术通过将多块磁盘利用数组的原理整合为一磁盘组的方式,可以使得计算机具备同时对多块磁盘执行读写操作的能力,从而大幅提高了计算机的磁盘读写速度。在对raid的实际应用中,计算机具体通过操作系统内核中相关子系统间的交互等来实现用户对于raid的每一次读写操作,这些相关子系统均为软件实现,包括:块io(inputoutput,输入输出)子系统、scsi(smallcomputersysteminterface,小型计算机系统接口)子系统、以及sas(serialattachedscsi,串行连接scsi接口)子系统。

在现有技术中,操作系统内核中位于块io子系统中的raid模块将含有用户读写请求参数的bio(blockinputoutput,块输入输出)请求发送至scsi子系统;在scsi子系统中,上述bio请求将被构造为同样包含用户读写请求参数的读写控制命令发送至sas子系统,并最终由sas子系统根据上述读写控制命令主导实施用户的读写操作。然而,由于读写控制命令由scsi子系统构造并发送,因此,每次当sas子系统在读写控制命令的处理过程中出现问题时,则会向scsi子系统返回用于请求重新发送读写控制命令的错误状态信息,并根据接收到的读写控制命令再次实施用户读写操作。但是,sas子系统与复杂scsi子系统间的频繁交互,将大幅减小计算机对于每一次raid读写操作的实现速度。



技术实现要素:

有鉴于此,本申请提供一种读写请求处理方法,以增大计算机对每一次raid读写操作的实现速度。

根据本申请实施例的第一方面,提供一种读写请求处理方法,所述方法涉及块io子系统和sas子系统,具体涉及所述块io子系统中的raid模块、所述sas子系统中的sas驱动模块、fpga模块以及sas协议模块,其中,io是指输入输出、sas是指串行连接的小型计算机系统接口、raid是指磁盘阵列、fpga是指现场可编程门阵列,所述方法包括:

raid模块接收包含用户读写请求参数的bio请求,所述bio请求是指块输入输出请求;

根据bio请求中的用户读写请求参数构造读写控制命令,并将构造出的读写控制命令通过所述sas驱动模块发送至fpga模块;

fpga模块接收并保存所述读写控制命令,并将所述读写控制命令发送至sas协议模块,以使所述sas协议模块根据所述读写控制命令对raid实施读写操作;

判断是否接收到sas协议模块返回的对应所述读写控制命令的重传命令;

如果是,则基于所述重传命令和所保存的读写控制命令构造待重传的读写控制命令,并将构造出的待重传的读写控制命令发送至sas协议模块,以使所述sas协议模块根据该读写控制命令对raid实施读写操作。

根据本申请实施例的第二方面,提供一种读写请求处理装置,所述装置包括:

raid模块,用于接收包含用户读写请求参数的bio请求;

以及用于根据bio请求中的用户读写请求参数构造读写控制命令,并将构造出的读写控制命令通过所述sas驱动模块发送至fpga模块;

sas驱动模块,用于将接收到的raid模块构造出的读写控制命令发送至fpga模块;

fpga模块,用于接收并保存所述读写控制命令,并将所述读写控制命令发送至sas协议模块;

用于判断是否接收到sas协议模块返回的对应所述读写控制命令的重传命令;

以及用于在接收到所述重传命令后,基于所述重传命令和所保存的读写控制命令构造待重传的读写控制命令,并将构造出的待重传的读写控制命令发送至sas协议模块;

sas协议模块,用于根据所述fpga模块发送的读写控制命令对raid实施读写操作;

以及用于在根据接收到的读写控制命令对raid实施读写操作失败时,向所述fpga模块返回对应所述读写控制命令的重传命令;

其中,raid是指磁盘阵列、bio请求是指块输入输出请求、fpga是指现场可编程门阵列、sas是指串行连接的小型计算机系统接口;

其中,raid模块位于块io子系统;sas驱动模块、fpga模块、sas协议模块位于sas子系统。

本申请中,通过使用raid模块替代scsi子系统来完成读写控制命令的构造,并将基于重传命令对读写控制命令进行再构造的任务,从scsi子系统转移至sas子系统内新配置的fpga模块来完成,本申请方法不仅省去了现用技术中复杂scsi子系统参与用户读写请求处理的环节,而且实现了基于sas子系统内部的错误状态下读写控制命令的重传机制,从而大幅提升了计算机对每一次raid读写操作的实现速度。

附图说明

图1是本申请一种读写请求处理方法的流程图;

图2是本申请一种读写请求处理装置的第一种结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

raid技术通过将多块磁盘利用数组的原理整合为一磁盘组的方式,可以使得计算机具备同时对多块磁盘执行读写操作的能力,从而大幅提高了计算机的磁盘读写速度。在对raid的实际应用中,计算机具体通过操作系统内核中相关子系统间的交互等来实现用户对于raid的每一次读写操作,这些相关子系统均为软件实现,包括:块io子系统、scsi子系统、以及sas子系统。具体的,块io子系统是指linux内核中主要用于处理基于块设备的io请求的子系统;scsi子系统是指linux内核中主要用于处理基于scsi接口设备或者sata(serialadvancedtechnologyattachment,串行高级技术附件)接口设备的io请求的子系统;sas子系统是指linux内核中主要用于处理更接近于scsi接口设备或者sata接口设备底层的io请求的子系统,其中,io请求即为读写请求。需要指出的是,本文所提到的“读写”一般是指读/写。

在现有技术中,操作系统内核中位于块io子系统内的raid模块将含有用户读写请求参数的bio请求发送至scsi子系统;在scsi子系统中,上述bio请求将被构造为同样包含用户读写请求参数的读写控制命令发送至sas子系统,并最终由sas子系统根据上述读写控制命令主导实施用户的读写操作。然而,由于读写控制命令由scsi子系统构造并发送,因此,每次当sas子系统在读写控制命令的处理过程中出现问题时,则会向scsi子系统返回用于请求重新发送读写控制命令的错

误状态信息,并根据接收到的读写控制命令再次实施用户读写操作。但是,sas子系统与复杂scsi子系统间的频繁交互,将大幅减小计算机对于每一次raid读写操作的实现速度。其中,raid模块是指位于块io子系统中的块设备驱动层内用以支持物理raid的软件实现,负责执行基于raid的io请求的接收、处理以及下发等操作。

有鉴于此,本申请提供一种读写请求处理方法,以增大计算机对每一次raid读写操作的实现速度。

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

参见图1,图1是本申请一种读写请求处理方法的流程图,该流程图可以包括以下步骤:

步骤101:raid模块接收包含用户读写请求参数的bio请求,上述bio请求是指块输入输出请求。

本方法实施例涉及块io子系统和sas子系统,具体涉及上述块io子系统中的raid模块、上述sas子系统中的sas驱动模块、fpga模块以及sas协议模块,其中,io是指输入输出、sas是指串行连接的小型计算机系统接口、raid是指磁盘阵列、fpga是指现场可编程门阵列。

本方法实施例中,上述用户读写请求参数可以包括:待读写的磁盘的标识、读操作/写操作、以及待读写的块的地址,其中,上述块位于每一磁盘中,为构成raid的最小存储单元。

本方法实施例中,有关上述bio请求的内容将在以下实施例中加以说明,在此不再赘述。

步骤102:raid模块根据bio请求中的用户读写请求参数构造读写控制命令,并将构造出的读写控制命令通过上述sas驱动模块发送至fpga模块。

本方法实施例中,有关上述读写控制命令和sas驱动模块的内容将在以下实施例中加以说明,在此不再赘述。

步骤103:fpga模块接收并保存上述读写控制命令,并将上述读写控制命令发送至sas协议模块,以使上述sas协议模块根据上述读写控制命令对raid实施读写操作。

本实施例中,在接收到raid模块发送的读写控制命令后,fpga模块可以对该接收到的读写控制命令进行保存,以在接收到sas协议模块返回的重传命令后,基于该保存的读写控制命令和重传命令替代raid模块进行读写控制命令构造,从而在sas子系统内构建了一错误状态下读写控制命令的重传机制。

本方法实施例中,raid模块在发送一读写控制命令后,可实时判断是否接收到针对sas协议模块所实施的raid读写操作而返回的、对应于该读写控制命令的操作结果,并在接收到上述操作结果后,将所返回的操作结果反馈给用户,以使用户获悉该操作结果。具体的,当对raid实施读操作时,上述操作结果可以为读操作失败消息或从raid所读取的数据;当对raid实施写操作时,上述操作结果可以为写操作失败消息或写操作成功消息。

步骤104:fpga模块判断是否接收到sas协议模块返回的对应上述读写控制命令的重传命令,并在接收到上述重传命令后,执行步骤105。

本方法实施例中,关于上述重传命令将在以下实施例中加以说明,在此不再赘述。

步骤105:fpga模块基于上述重传命令和所保存的读写控制命令构造待重传的读写控制命令,并将构造出的待重传的读写控制命令发送至sas协议模块,以使上述sas协议模块根据该读写控制命令对raid实施读写操作。

通过以上方法实施例可以看出,通过使用raid模块替代scsi子系统来完成读写控制命令的构造,并将基于重传命令对读写控制命令进行再构造的任务,从scsi子系统转移至sas子系统内新配置的fpga模块来完成,本申请方法不仅省去了现用技术中复杂scsi子系统参与用户读写请求处理的环节,而且实现了基于sas子系统内部的错误状态下读写控制命令的重传机制,从而大幅提升了计算机对每一次raid读写操作的实现速度。

以下将通过一个实施例对申请方法进行详细描述,与上述方法实施例不同的是,本实施例将结合具体示例对部分步骤进行说明,具有较强的实际操作意义,具体的,本实施例可以包括以下步骤:

步骤1:raid模块接收包含用户读写请求参数的bio请求,上述bio请求是指块输入输出请求。

本实施例中,当用户发出一个raid读写请求后,计算机将通过操作系统内核中各子系统间的交互等,来逐步实现最终基于raid的读写操作。事实上,在每一不同的子系统中,甚至同一子系统中的不同模块中,上述raid读写请求都将会以不同的形式表示,每一子系统或每一模块对这一raid读写请求的处理,都将以可以使其下层子系统或模块能够识别且能够处理为准。

比如,在本步骤中,raid模块将从位于其上层的io调度模块中接收到上述bio请求-raid读写请求的一种表现形式,并进一步获取该bio请求中待执行读写操作的连续的块地址段。此时,raid模块将基于该连续块地址段中的每一地址所对应的块在物理raid中实际的磁盘位置,将这一块地址段切分成不同的块地址,以便其下层的子系统或模块可以根据这些已经切分好的块地址同时对这些分立的块实施读写操作。事实上,正是因为这一切分动作的存在,才使得计算机具备对于raid中多块磁盘同时进行读写操作的能力。

步骤2:raid模块根据bio请求中的用户读写请求参数构造读写控制命令,并将构造出的读写控制命令通过上述sas驱动模块发送至fpga模块。

在本实施例的第一种实现方式中,上述读写控制命令除包含上述用户读写请求参数之外,还可以包括一命令标识,以方便对于该控制命令的查询和与下述重传命令的匹配。

本实施例中,上述将构造出的读写控制命令发送至fpga模块,事实上可以以参数传递的方式实现。具体的,在本实施例的第一种实现方式中,raid模块可以与sas子系统中的fpga模块预先协商所要传递的参数的类型,以保证参数信息的准确传递;在本实施例的第二种实现方式中,上述实现方式中参与协商的fpga模块也可以由步骤102中所提到的sas驱动模块来替代。需要指出的是,上述所传递的参数不仅可以包括上述用户读写请求参数、命令标签,还可以包括其它一些必要信息,但由于这些必要信息并不在本申请所要求保护的范围之内,故不予赘述。

本实施例中,sas驱动模块会将接收到的读写控制命令转换为sas帧这一表现形式,以便于fpga模块对所接收到的读写控制命令进行识别和处理。

步骤3:fpga模块接收并保存上述读写控制命令,并将上述读写控制命令发送至sas协议模块,以使上述sas协议模块根据上述读写控制命令对raid实施读写操作。

本实施例中,fpga模块为sas子系统内对应于物理fpga的软件实现,且该软件实现所使用的程序指令十分接近于硬件层面。

本实施例中,在对应于步骤2中第一种实现方式的第二种实现方式中,上述命令标识也可以由fpga模块生成。具体的,fpga模块可以在保存上述读写控制命令之前,为该读写控制命令设置一命令标识,以方便对于该控制命令的查询和与下述重传命令的匹配。

本实施例中,sas协议模块可以对接收到的读写控制命令进行相应的处理,并最终由sas扩展器执行对raid的读写操作。由于该过程并不在本申请所要求保护的范围之内,故不予赘述。

步骤4:fpga模块判断是否接收到sas协议模块返回的对应上述读写控制命令的重传命令,并在接收到上述重传命令后,执行步骤105。

步骤5:fpga模块基于上述重传命令和所保存的读写控制命令构造待重传的读写控制命令,并将构造出的待重传的读写控制命令发送至sas协议模块,以使上述sas协议模块根据该读写控制命令对raid实施读写操作。

本实施例中,fpga模块可以对接收到的重传命令进行解析,已通过解析获取该重传命令中用于与上述读写控制命令进行匹配的命令标识,并在根据该命令标识找到所保存的读写控制命令后,基于上述重传命令和所保存的读写控制命令构造待重传的读写控制命令。

通过以上实施例可以看出,通过使用raid模块替代scsi子系统来完成读写控制命令的构造,并将基于重传命令对读写控制命令进行再构造的任务,从scsi子系统转移至sas子系统内新配置的fpga模块来完成,本申请方法不仅省去了现用技术中复杂scsi子系统参与用户读写请求处理的环节,而且实现了基于sas子系统内部的错误状态下读写控制命令的重传机制,从而大幅提升了计算机对每一次raid读写操作的实现速度。

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

参见图2,图2是本申请一种读写请求处理装置的第一种结构图。该装置可以包括:raid模块210、sas驱动模块220、fpga模块230以及sas协议模块240。

其中,raid模块210,用于接收包含用户读写请求参数的bio请求;

以及用于根据bio请求中的用户读写请求参数构造读写控制命令,并将构造出的读写控制命令发送至fpga模块230;

sas驱动模块220,用于将接收到的raid模块210构造出的读写控制命令发送至fpga模块230;

fpga模块230,用于接收并保存上述读写控制命令,并将上述读写控制命令发送至sas协议模块240;

用于判断是否接收到sas协议模块240返回的对应上述读写控制命令的重传命令;

以及用于在接收到上述重传命令后,基于上述重传命令和所保存的读写控制命令构造待重传的读写控制命令,并将构造出的待重传的读写控制命令发送至sas协议模块240;

sas协议模块240,用于根据fpga模块230发送的读写控制命令对raid实施读写操作;

以及用于在根据接收到的读写控制命令对raid实施读写操作失败时,向fpga模块230返回对应上述读写控制命令的重传命令;

其中,raid是指磁盘阵列、bio请求是指块输入输出请求、fpga是指现场可编程门阵列、sas是指串行连接的小型计算机系统接口;

其中,raid模块位于块io子系统;sas驱动模块、fpga模块、sas协议模块位于sas子系统。

在本实施例的第一种实现方式中,上述用户读写请求参数可以包括:

待读写的磁盘的标识、读操作/写操作、以及待读写的块的地址,其中,上述块位于每一磁盘中,为构成raid的最小存储单元。

在本实施例的第二种实现方式中,上述raid模块210,

还用于判断是否接收到针对sas协议模块240所实施的raid读写操作而返回的操作结果;

以及在接收到所返回的操作结果后,将所返回的操作结果反馈给用户,以使用户获悉上述操作结果。

在本实施例的第三种实现方式中,当对raid实施读操作时,上述操作结果为读操作失败消息或从raid所读取的数据;

当对raid实施写操作时,上述操作结果为写操作失败消息或写操作成功消息。

从以上装置实施例可以看出,通过使用raid模块替代scsi子系统来完成读写控制命令的构造,并将基于重传命令对读写控制命令进行再构造的任务,从scsi子系统转移至sas子系统内新配置的fpga模块来完成,本申请方法不仅省去了现用技术中复杂scsi子系统参与用户读写请求处理的环节,而且实现了基于sas子系统内部的错误状态下读写控制命令的重传机制,从而大幅提升了计算机对每一次raid读写操作的实现速度。

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

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

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

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