一种处理输入输出请求的方法及设备技术

技术编号:11410743 阅读:59 留言:0更新日期:2015-05-06 10:08
本发明专利技术公开了一种处理输入输出请求的方法及设备,属于计算机领域。所述方法包括:获取多个输入输出IO请求;根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO请求的优先级和IO请求的命令描述字;将IO指令发送给存储系统,使存储系统从IO指令中解析出所述多个IO请求,并对所述多个IO请求分别进行处理。所述设备包括:获取模块、封装模块和第一发送模块。本发明专利技术减少了主机与存储系统之间的IO指令数,提高了存储系统的读写性能和吞吐量。

【技术实现步骤摘要】
一种处理输入输出请求的方法及设备
本专利技术涉及计算机领域,特别涉及一种处理输入输出请求的方法及设备。
技术介绍
随着计算机技术的快速发展,在一个主机上可以模拟出多个虚拟机。每个虚拟机上会运行多个应用程序,当该应用程序需要存储系统执行某个操作时,该应用程序向该存储系统发送一个IO(input/output,输入/输出)请求,虚拟机通过该主机上的虚拟机监视器将该IO请求发送给存储系统。其中,一个虚拟机对应多个虚拟磁盘,虚拟磁盘保存在存储系统上。由于虚拟机执行操作时以虚拟磁盘为操作粒度,而存储系统执行操作时以LUN(LogicalUnitNumber,逻辑单元号)为操作粒度,所以为了保证虚拟机的操作粒度与存储系统的操作粒度一致,存储系统为每个虚拟磁盘分配一个LUN。由于主机和存储系统之间是通过SCSI(SmallComputerSystemInterface,小型计算机系统接口)协议进行IO通信的,而SCSI协议要求一个IO指令只能对一个LUN进行操作,所以虚拟机监视器获取同一个LUN对应的IO请求,根据该LUN对应的IO请求需要访问的逻辑地址和该LUN对应的IO请求的优先级,对该LUN对应的IO请求进行IO排序和合并,将IO排序和合并之后得到的IO指令发送给存储系统。存储系统接收该IO指令,对该IO指令进行处理。由于虚拟磁盘与LUN是一一对应的关系,因此虚拟机监视器只能将一个虚拟磁盘发出的IO请求进行IO排序和合并,无法做到将一个虚拟机的IO请求进行整体IO排序和合并,更无法做到对多个虚拟机的IO请求进行整体IO排序和合并。如此,导致存储系统会面对大量的IO指令,大大降低了存储系统的读写性能和吞吐量。
技术实现思路
为了解决现有技术的问题,本专利技术实施例提供了一种处理输入输出请求的方法及设备。所述技术方案如下:第一方面,提供了一种处理输入输出请求的方法,所述方法包括:获取多个IO请求;根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO请求的优先级和IO请求的命令描述字,所述IO指令包含LUN字段、优先级字段和命令描述字字段;将所述IO指令发送给存储系统,使所述存储系统从所述IO指令中解析出所述多个IO请求,并对所述多个IO请求分别进行处理。结合第一方面,在上述第一方面的第一种可能的实现方式中,所述根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:将每个IO请求对应的LUN填充在IO指令的LUN字段中;根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的优先级填充在所述IO指令的优先级字段中;根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的命令描述字填充在所述IO指令的命令描述字字段中;将所述LUN字段、所述优先级字段和所述命令描述字字段封装成一个IO指令。结合第一方面,在上述第一方面的第二种可能的实现方式中,所述根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:将每个IO请求对应的LUN、所述每个IO请求的优先级和所述每个IO请求的命令描述字,分别填充在所述每个IO请求对应的信息字段中,所述信息字段包括LUN字段、优先级字段和命令描述字字段;将所述每个IO请求对应的信息字段封装成一个IO指令。结合第一方面、第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述IO指令中还包括所述获取的多个IO请求的数量。结合第一方面,在上述第一方面的第四种可能的实现方式中,所述根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:将所述获取的多个IO请求划分为多个IO请求组;对于所述多个IO请求组中的任一个IO请求组,为所述IO请求组选择一个主请求;将所述IO请求组中除所述主请求之外的其他IO请求确定为所述IO请求组的从请求,并将所述从请求封装在所述主请求的IO请求参数页中;根据所述主请求对应的LUN、所述主请求的优先级和所述主请求的命令描述字,将所述主请求封装成一个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请求参数页中,包括:将每个从请求对应的LUN、所述每个从请求的优先级和所述每个从请求的命令描述字分别填充在所述每个从请求对应的IO参数列表中;为所述主请求的IO请求参数页设置页码和子页码,将所述页码、所述子页码和所述每个从请求对应的IO参数列表封装在所述主请求的IO请求参数页中。结合第一方面的第四种可能的实现方式,在上述第一方面的第八种可能的实现方式中,所述根据所述主请求对应的LUN、所述主请求的优先级和所述主请求的命令描述字,将所述主请求封装成一个IO指令,所述IO指令中携带所述主请求的IO请求参数页之前,还包括:如果所述主请求的命令描述字中包括参数列表长度字段,则将所述参数列表长度字段修改为所述主请求的IO请求参数页的长度;如果所述主请求的命令描述字中不包括参数列表长度字段,则在所述主请求的命令描述字中增加参数列表长度字段,并设置所述参数列表长度字段为所述主请求的IO请求参数页的长度。第二方面,提供了一种处理输入输出请求的设备,所述设备包括:获取模块,用于获取多个IO请求;封装模块,用于根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO请求的优先级和IO请求的命令描述字,所述IO指令包含LUN字段、优先级字段和命令描述字字段;第一发送模块,用于将所述IO指令发送给存储系统,使所述存储系统从所述IO指令中解析出所述多个IO请求,并对所述多个IO请求分别进行处理。结合第二方面,在上述第二方面的第一种可能的实现方式中,所述封装模块包括:第一填充单元,用于将每个IO请求对应的LUN填充在IO指令的LUN字段中;第二填充单元,用于根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的优先级填充在所述IO指令的优先级字段中;第三填充单元,用于根据所述LUN字段中LU本文档来自技高网
...
一种处理输入输出请求的方法及设备

【技术保护点】
一种处理输入输出请求的方法,其特征在于,所述方法包括:获取多个输入输出IO请求;根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO请求的优先级和IO请求的命令描述字;将所述IO指令发送给存储系统,使所述存储系统从所述IO指令中解析出所述多个IO请求,并对所述多个IO请求分别进行处理。

【技术特征摘要】
1.一种处理输入输出请求的方法,其特征在于,所述方法包括:获取多个IO请求;根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO请求的优先级和IO请求的命令描述字,所述IO指令包含LUN字段、优先级字段和命令描述字字段;将所述IO指令发送给存储系统,使所述存储系统从所述IO指令中解析出所述多个IO请求,并对所述多个IO请求分别进行处理。2.如权利要求1所述的方法,其特征在于,所述根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:将每个IO请求对应的LUN填充在IO指令的LUN字段中;根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的优先级填充在所述IO指令的优先级字段中;根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的命令描述字填充在所述IO指令的命令描述字字段中;将所述LUN字段、所述优先级字段和所述命令描述字字段封装成一个IO指令。3.如权利要求1所述的方法,其特征在于,所述根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:将每个IO请求对应的LUN、所述每个IO请求的优先级和所述每个IO请求的命令描述字,分别填充在所述每个IO请求对应的信息字段中,所述信息字段包括LUN字段、优先级字段和命令描述字字段;将所述每个IO请求对应的信息字段封装成一个IO指令。4.如权利要求1-3任一权利要求所述的方法,其特征在于,所述IO指令中还包括所述获取的多个IO请求的数量。5.如权利要求1所述的方法,其特征在于,所述根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:将所述获取的多个IO请求划分为多个IO请求组;对于所述多个IO请求组中的任一个IO请求组,为所述IO请求组选择一个主请求;将所述IO请求组中除所述主请求之外的其他IO请求确定为所述IO请求组的从请求,并将所述从请求封装在所述主请求的IO请求参数页中;根据所述主请求对应的LUN、所述主请求的优先级和所述主请求的命令描述字,将所述主请求封装成一个IO指令,所述IO指令中携带所述主请求的IO请求参数页。6.如权利要求5所述的方法,其特征在于,将所述获取的多个IO请求划分为多个IO请求组,包括:判断获取的多个IO请求中是否存在携带参数的IO请求;如果存在,则根据携带参数的IO请求的数量,将所述获取的多个IO请求划分为多个IO请求组,使每个IO请求组中最多包括一个携带参数的IO请求;如果不存在,则将所述获取的多个IO请求划分为多个IO请求组。7.如权利要求5或6所述的方法,其特征在于,所述为所述IO请求组选择一个主请求,包括:如果所述IO请求组中包括携带参数的IO请求,则将携带参数的IO请求确定为所述IO请求组的主请求;如果所述IO请求组中没有包括携带参数的IO请求,则从所述IO请求组中随机选择一个IO请求,将选择的IO请求确定为所述IO请求组的主请求。8.如权利要求5所述的方法,其特征在于,所述将所述从请求封装在所述主请求的IO请求参数页中,包括:将每个从请求对应的LUN、所述每个从请求的优先级和所述每个从请求的命令描述字分别填充在所述每个从请求对应的IO参数列表中;为所述主请求的IO请求参数页设置页码和子页码,将所述页码、所述子页码和所述每个从请求对应的IO参数列表封装在所述主请求的IO请求参数页中。9.如权利要求5所述的方法,其特征在于,所述根据所述主请求对应的LUN、所述主请求的优先级和所述主请求的命令描述字,将所述主请求封装成一个IO指令,所述IO指令中携带所述主请求的IO请求参数页之前,还包括:如果所述主请求的命令描述字中包括参数列表长度字段,则将所述参数列表长度字段修改为所述主请求的IO请求参数页的长度;如果所述主请求的命令描述字中不包括参数列表长度字段,则在所述主请求的命令描述字中增加参数列表长度字段,并设置所述参数列表长度字段为所述主请求的IO请求参数页的长度。10.一种处理输入输出请求的设备,其特征在于,所述设备包括:获取模块,用于获取多个IO请求;封装模...

【专利技术属性】
技术研发人员:和晓艳石佳
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1