一种处理输入输出请求的方法及设备的制造方法

文档序号:8282231阅读:222来源:国知局
一种处理输入输出请求的方法及设备的制造方法
【技术领域】
[0001] 本发明涉及计算机领域,特别涉及一种处理输入输出请求的方法及设备。
【背景技术】
[0002] 随着计算机技术的快速发展,在一个主机上可以模拟出多个虚拟机。每个虚拟机 上会运行多个应用程序,当该应用程序需要存储系统执行某个操作时,该应用程序向该存 储系统发送一个IO (input/output,输入/输出)请求,虚拟机通过该主机上的虚拟机监视 器将该IO请求发送给存储系统。
[0003] 其中,一个虚拟机对应多个虚拟磁盘,虚拟磁盘保存在存储系统上。由于虚拟机执 行操作时以虚拟磁盘为操作粒度,而存储系统执行操作时以LUN(Logical Unit Number,逻 辑单元号)为操作粒度,所以为了保证虚拟机的操作粒度与存储系统的操作粒度一致,存储 系统为每个虚拟磁盘分配一个LUN。由于主机和存储系统之间是通过SCSKSmall Computer System Interface,小型计算机系统接口)协议进行IO通信的,而SCSI协议要求一个IO指 令只能对一个LUN进行操作,所以虚拟机监视器获取同一个LUN对应的IO请求,根据该LUN 对应的IO请求需要访问的逻辑地址和该LUN对应的IO请求的优先级,对该LUN对应的IO 请求进行IO排序和合并,将IO排序和合并之后得到的IO指令发送给存储系统。存储系统 接收该IO指令,对该IO指令进行处理。
[0004] 由于虚拟磁盘与LUN是一一对应的关系,因此虚拟机监视器只能将一个虚拟磁盘 发出的IO请求进行IO排序和合并,无法做到将一个虚拟机的IO请求进行整体IO排序和 合并,更无法做到对多个虚拟机的IO请求进行整体IO排序和合并。如此,导致存储系统会 面对大量的IO指令,大大降低了存储系统的读写性能和吞吐量。

【发明内容】

[0005] 为了解决现有技术的问题,本发明实施例提供了一种处理输入输出请求的方法及 设备。所述技术方案如下:
[0006] 第一方面,提供了一种处理输入输出请求的方法,所述方法包括:
[0007] 获取多个输入输出IO请求;
[0008] 根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令, 所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO请求的优先级 和IO请求的命令描述字;
[0009] 将所述IO指令发送给存储系统,使所述存储系统从所述IO指令中解析出所述多 个IO请求,并对所述多个IO请求分别进行处理。
[0010] 结合第一方面,在上述第一方面的第一种可能的实现方式中,所述根据获取的多 个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:
[0011] 将每个IO请求对应的LUN填充在IO指令的LUN字段中;
[0012] 根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的优先级填 充在所述IO指令的优先级字段中;
[0013] 根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个IO请求的命令描述 字填充在所述IO指令的命令描述字字段中;
[0014] 将所述LUN字段、所述优先级字段和所述命令描述字段封装成一个IO指令。
[0015] 结合第一方面,在上述第一方面的第二种可能的实现方式中,所述根据获取的多 个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:
[0016] 将每个IO请求对应的LUN、所述每个IO请求的优先级和所述每个IO请求的命令 描述字,分别填充在所述每个IO请求对应的信息字段中,所述信息字段包括LUN字段、优先 级字段和命令描述字字段;
[0017] 将所述每个IO请求对应的信息字段封装成一个IO指令。
[0018] 结合第一方面、第一方面的第一种可能的实现方式或第一方面的第二种可能的实 现方式,在上述第一方面的第三种可能的实现方式中,所述IO指令中还包括所述获取的多 个IO请求的数量。
[0019] 结合第一方面,在上述第一方面的第四种可能的实现方式中,所述根据获取的多 个IO请求的参数,将所述获取的多个IO请求封装成一个IO指令,包括:
[0020] 将所述获取的多个IO请求划分为多个IO请求组;
[0021] 对于所述多个IO请求组中的任一个IO请求组,为所述IO请求组选择一个主请 求;
[0022] 将所述IO请求组中除所述主请求之外的其他IO请求确定为所述IO请求组的从 请求,并将所述从请求封装在所述主请求的IO请求参数页中;
[0023] 根据所述主请求对应的LUN、所述主请求的优先级和所述主请求的命令描述字,将 所述主请求封装成一个IO指令,所述IO指令中携带所述主请求的IO请求参数页。
[0024] 结合第一方面的第四种可能的实现方式,在上述第一方面的第五种可能的实现方 式中,所述将所述获取的多个IO请求划分为多个IO请求组,包括:
[0025] 判断获取的多个IO请求中是否存在携带参数的IO请求;
[0026] 如果存在,则根据携带参数的IO请求的数量,将所述获取的多个IO请求划分为多 个IO请求组,使每个IO请求组中最多包括一个携带参数的IO请求;
[0027] 如果不存在,则将所述获取的多个IO请求划分为多个IO请求组。
[0028] 结合第一方面的第四种可能的实现方式或第一方面的第五种可能的实现方式,在 上述第一方面的第六种可能的实现方式中,所述为所述IO请求组选择一个主请求,包括:
[0029] 如果所述IO请求组中包括携带参数的IO请求,则将携带参数的IO请求确定为所 述IO请求组的主请求;
[0030] 如果所述IO请求组中没有包括携带参数的IO请求,贝U从所述IO请求组中随机选 择一个IO请求,将选择的IO请求确定为所述IO请求组的主请求。
[0031] 结合第一方面的第四种可能的实现方式,在上述第一方面的第七种可能的实现方 式中,所述将所述从请求封装在所述主请求的IO请求参数页中,包括:
[0032] 将每个从请求对应的LUN、所述每个从请求的优先级和所述每个从请求的命令描 述字分别填充在所述每个从请求对应的IO参数列表中;
[0033] 为所述主请求的IO请求参数页设置页码和子页码,将所述页码、所述子页码和所 述每个从请求对应的IO参数列表封装在所述主请求的IO请求参数页中。
[0034] 结合第一方面的第四种可能的实现方式,在上述第一方面的第八种可能的实现方 式中,所述根据所述主请求对应的LUN、所述主请求的优先级和所述主请求的命令描述字, 将所述主请求封装成一个IO指令,所述IO指令中携带所述主请求的IO请求参数页之前, 还包括:
[0035] 如果所述主请求的命令描述字中包括参数列表长度字段,则将所述参数列表长度 字段修改为所述主请求的IO请求参数页的长度;
[0036] 如果所述主请求的命令描述字中不包括参数列表长度字段,则在所述主请求的命 令描述字中增加参数列表长度字段,并设置所述参数列表长度字段为所述主请求的IO请 求参数页的长度。
[0037] 第二方面,提供了一种处理输入输出请求的设备,所述设备包括:
[0038] 获取模块,用于获取多个输入输出IO请求;
[0039] 封装模块,用于根据获取的多个IO请求的参数,将所述获取的多个IO请求封装成 一个IO指令,所述多个IO请求中的每一个IO请求的参数至少包括IO请求对应的LUN、IO 请求的优先级和IO请求的命令描述字;
[0040] 第一发送模块,用于将所述IO指令发送给存储系统,使所述存储系统从所述IO指 令中解析出所述多个IO请求,并对所述多个IO请求分别进行处理。
[0041] 结合第二方面,在上述第二方面的第一种可能的实现方式中,所述封装模块包 括:
[0042] 第一填充单元,用于将每个IO请求对应的LUN填充在IO指令的LUN字段中;
[0043] 第二填充单元,用于根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个 IO请求的优先级填充在所述IO指令的优先级字段中;
[0044] 第三填充单元,用于根据所述LUN字段中LUN对应的IO请求的顺序,将所述每个 IO请求的命令描述字填充在所述IO指令的命令描述字字段中;
[0045] 第一封装单元,用于将所述LUN字段、所述优先级字段和所述命令描述字段封装 成一个IO指令。
[0046] 结合第二方面,在上述第二方面的第二种可能的实现方式中,所述封装模块包 括:
[0047] 第四
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1