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

文档序号:8282231阅读:来源:国知局
,贝U从该IO请求组中随机选择一 个IO请求,将选择的IO请求确定为该IO请求组的主请求。
[0105] 其中,将该从请求封装在该主请求的IO请求参数页中,包括:
[0106] 将每个从请求对应的LUN、每个从请求的优先级和每个从请求的命令描述字分别 填充在每个从请求对应的IO参数列表中;
[0107] 为该主请求的IO请求参数页设置页码和子页码,将设置的页码、子页码和每个从 请求对应的参数封装在该主请求的IO请求参数页中。
[0108] 进一步地,根据该主请求对应的LUN、该主请求的优先级和该主请求的命令描述 字,将该主请求封装成一个IO指令,该IO指令中携带该主请求的IO请求参数页之前,还包 括:
[0109] 如果该主请求的命令描述字中包括参数列表长度字段,则将该参数列表长度字段 修改为该主请求的IO请求参数页的长度;
[0110] 如果该主请求的命令描述字中不包括参数列表长度字段,则在该主请求的命令描 述字中增加参数列表长度字段,并设置该参数列表长度字段为该主请求的IO请求参数页 的长度。
[0111] 在本发明实施例中,当虚拟机发出的IO请求时,获取多个IO请求;根据每个IO请 求对应的LUN、每个IO请求的优先级和每个IO请求的命令描述字,将获取的多个IO请求封 装成一个IO指令,避免了将每个LUN对应的IO请求封装成一个IO指令,减少了主机与存 储系统之间的IO指令数,从而避免了为大量IO指令建立连接和断开连接,提高了存储系统 的读写性能和吞吐量。
[0112] 实施例二
[0113] 本发明实施例提供了一种处理输入输出请求的方法。其中,参见图2所示的处理 输入输出请求的结构示意图,该系统包括虚拟机、虚拟机监视器和存储系统,虚拟机监视器 和存储系统分别包括SCSI驱动模块,且存储系统还包括多个LUN。其中,一个虚拟机对应一 个或多个LUN。
[0114] 参见图3,该方法包括:
[0115] 步骤201 :当虚拟机发出IO请求时,虚拟机监视器获取多个IO请求;
[0116] 进一步地,当该虚拟机发出IO请求时,该虚拟机监视器可以获取预设时间段内的 多个IO请求。
[0117] 其中,虚拟机监视器获取的预设时间段内的IO请求可以是一个虚拟机发出的请 求,也可以是多个虚拟机发出的请求。
[0118] 由于一个虚拟机对应一个或多个LUN,所以虚拟机发出的IO请求可以是发向多个 LUN的请求,也可以是发向同一个LUN请求的。
[0119] 其中,在本发明实施例中,IO请求可以是虚拟机发出的,也可以是个人计算机,还 可以是集群式服务器系统,所以本发明实施例对发出IO请求的主体不做具体限定。
[0120] 步骤202 :虚拟机监视器根据每个LUN对应的IO请求需要访问的逻辑地址和每个 LUN对应的IO请求的优先级,分别对每个LUN对应的IO请求进行IO排序和合并,得到多个 合并后的IO请求;
[0121] 具体地,虚拟机监视器获取同一个LUN对应的IO请求,根据该LUN对应的IO请求 需要访问的逻辑地址,对该LUN对应的IO请求进行IO排序,得到该LUN对应的IO请求的顺 序。根据该LUN对应的IO请求的顺序、该LUN对应的IO请求对应的操作类型和该LUN对 应的IO请求的优先级,对该LUN对应的IO请求进行合并,得到一个或多个合并后的IO请 求。
[0122] 其中,针对其他的LUN也根据上述步骤得到一个或多个合并后的IO请求。
[0123] 其中,根据该LUN对应的IO请求的顺序、该LUN对应的IO请求对应的操作类型和 该LUN对应的IO请求的优先级,对该LUN对应的IO请求进行合并,具体操作为:将IO请 求对应的操作类型相同且IO请求的顺序相连的IO请求进行合并,得到一个合并后的IO请 求;以及将IO请求需要访问的逻辑地址相同、IO请求对应的操作类型不同且IO请求的顺 序相连的IO请求进行合并,得到一个合并后的IO请求。
[0124] 比如,IO请求的顺序相连的3个IO请求对应的操作类型均为读操作或者写操作, 则将这3个IO请求进行合并后得到一个合并后的IO请求。当对该存储系统进行操作时, 可以一次性地读取或者写入这3个IO请求访问的逻辑地址中的数据,如此降低了对该存储 系统进行读操作和写操作的次数,提高了该存储系统的寿命。
[0125] 再比如,IO请求的顺序相连的2个IO请求需要访问的逻辑地址相同,顺序在先的 IO请求对应的操作类型为写操作,顺序在后的IO请求对应的操作类型为读操作,则将这2 个IO请求进行合并后得到一个合并后的IO请求。当对该存储系统进行操作时,可以直接 将写操作需要写入的数据直接作为读操作读出的数据,如此降低了对该存储系统进行读操 作和写操作的次数,提高了该存储系统的寿命。
[0126] 其中,在本发明实施例中,步骤202为可选步骤,本发明实施例可以对获取的多个 IO请求进行排序和合并后,对合并后的IO请求按照如下的方法进行封装,也可以不对获取 的多个IO请求进行排序和合并,直接对获取的多个IO请求按照如下的方法进行封装。
[0127] 步骤203 :虚拟机监视器每个IO请求对应的LUN、每个IO请求的优先级和每个IO 请求的命令描述字,将获取的多个IO请求封装成一个IO指令;
[0128] 具体地,本步骤可以通过如下(1) - (5)的步骤来实现,包括:
[0129] (1)、虚拟机监视器将每个IO请求对应的LUN、每个IO请求的优先级和每个IO请 求的命令描述字发送给该虚拟机监视器包括的SCSI驱动模块;
[0130] (2)、该虚拟机监视器包括的SCSI驱动模块将该多个IO请求对应的LUN填充在 LUN字段中;
[0131] 进一步地,该虚拟机监视器包括的SCSI驱动模块获取IO请求的数量,将该IO请 求的数量填充在该IO指令的IO请求数量字段中。
[0132] (3)、根据LUN字段中LUN对应的IO请求的顺序,将每个IO请求的优先级填充在 该IO指令的优先级字段中;
[0133] (4)、根据LUN字段中LUN对应的IO请求的顺序,将每个IO请求的命令描述字填 充在该IO指令的命令描述字字段中;
[0134] 其中,命令描述字中包括该IO请求对应的操作类型和该IO请求需要访问的逻辑 地址。比如,该操作类型为读、写和格式化等操作类型,逻辑地址包括起始逻辑地址和终止 逻辑地址。
[0135] (5)、将LUN字段、优先级字段和命令描述字字段封装成一个IO指令。
[0136] 进一步地,将IO请求数量字段、LUN字段、优先级字段和命令描述字字段封装成一 个IO指令。
[0137] 其中,LUN字段、优先级字段和命令描述字字段中对应的IO请求的顺序相同。
[0138] 例如,IO请求的数量为3, IO请求1对应的LUN为LUN1,IO请求1的优先级为优 先级I,IO请求1的命令描述字为命令描述字I ; IO请求2对应的LUN为LUN2, IO请求2的 优先级为优先级2, IO请求2的命令描述字为命令描述字2 ; IO请求3对应的LUN为LUN3, IO请求3的优先级为优先级3, IO请求3的命令描述字为命令描述字3。将IO请求的数量 3填充在如下表1所示的IO请求数量字段中,将IO请求1、IO请求2和IO请求3对应的 LUN分别填充在如下表1中的LUN字段中;根据LUN字段中该3个IO请求对应的LUN的顺 序,将该3个IO请求的优先级填充在如下表1的优先级字段中;根据LUN字段中该3个IO 请求对应的LUN的顺序,将该3个IO请求的命令描述字填充在如下表1的命令描述字字段 中,将IO请求数量字段、LUN字段、优先级字段和命令描述字字段封装成一个IO指令。
[0139] 表 1
【主权项】
1. 一种处理输入输出请求的方法,其特征在于,所述方法包括: 获取多个输入输出10请求; 根据获取的多个10请求的参数,将所述获取的多个10请求封装成一个10指令,所述 多个10请求中的每一个10请求的参数至少包括10请求对应的LUN、10请求的优先级和10 请求的命令描述字; 将所述10指令发送给存储系统,使所述存储系统从所述10指令中解析出所述多个10 请求,并对所述多个10请求分别进行处理。
2. 如权利要求1所述的方法,其特征在于,所述根据获取的多个10请求的参数,将所述 获取的多个10请求封装成一个10指令,包括: 将每个10请求对应的LUN填充在10指令的LUN字段中; 根据所述LUN字段中LUN对应的10请求的顺序,将所述每个10请求的优先级填充在 所述10指令的优先级字段中; 根据所述LUN
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1