发明内容
本发明实施例提供一种输入输出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顺序流;
处理模块,用于若判断获知所述IO请求满足一已有类型集合的判别条件,则将所述IO请求作为一个新的元素加入到所述已有类型集合中。
结合第二方面,在第二方面的第一种可能实现的方式中,所述属性信息包括所述IO请求的时间信息和对应存储设备的位置信息;所述预设算法为欧式距离法;
相应地,所述判断模块包括:
计算单元,用于根据所述时间信息和所述位置信息,利用欧式距离法计算所述IO请求与各已有类型集合的中心之间的间距;
比较单元,用于将计算出的间距与对应的已有类型集合的距离阈值进行比较,若间距不大于距离阈值,则获知所述IO请求满足所述对应的已有类型集合的判别条件。
结合第二方面第一种可能实现的方式,在第二方面的第二种可能实现的方式中,所述比较单元还用于若间距大于距离阈值,则获知所述IO请求不满足所述类型集合的判别条件;若所述IO请求不满足所有已有类型集合的判别条件,则将所述IO请求作为唯一的元素,生成一个新的类型集合。
结合第二方面、第二方面第一种至第二种任一种可能实现的方式,在第二方面第三种可能实现的方式中,还包括:
更新模块,用于所述将所述IO请求作为一个新的元素加入到所述类型集合中之后,根据所述IO请求的属性信息,更新所述类型集合的判别条件。
结合第二方面第三种可能实现的方式,在第二方面的第四种可能实现的方式中,还包括:
删除模块,用于删除预定时间内没有新元素加入的类型集合。
本发明实施例输入输出IO类型的识别方法和装置,通过接收IO请求,根据所述IO请求的属性信息以及预设算法判断所述IO请求是否满足已有类型集合的判别条件;各已有类型集合中所包括的各IO请求属于同一个IO顺序流,若判断获知所述IO请求满足一已有类型集合的判别条件,则将所述IO请求作为一个新的元素加入到所述已有类型集合中。即根据IO请求的属性信息将IO请求划分到合适类型集合中,属于同一类型集合中的IO请求为一路顺序流,从而实现了对顺序流的识别,提升预取的命中率,大幅提高读数据的性能,解决了现有技术中当IO乱序时对顺序流识别错误的问题。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明输入输出IO类型的识别方法实施例一的流程图,如图1所示,本实施例的方法可以包括:
步骤101、接收IO请求。
其中,可以为接收主机发送的IO请求,该IO请求可以是顺序IO,也可以是随机IO。
步骤102、根据所述IO请求的属性信息以及预设算法判断所述IO请求是否满足已有类型集合的判别条件;各已有类型集合中所包括的各IO请求属于同一个IO顺序流。
其中,所述IO请求的属性信息可以包括IO请求的时间信息、IO请求的大小以及IO请求对应存储设备的位置信息等任一种属性,也可以为多种属性组合使用构成所述IO请求的属性信息,除此之外还可以根据IO请求的业务特征进行灵活的配置。
其中,所述已有类型集合判别条件可以根据所述IO请求的属性信息进行灵活设置。
步骤103、若判断获知所述IO请求满足一已有类型集合的判别条件,则将所述IO请求作为一个新的元素加入到所述已有类型集合中。
本实施例,通过接收IO请求,根据所述IO请求的属性信息以及预设算法判断所述IO请求是否满足已有类型集合的判别条件;各类型集合中所包括的各IO请求属于同一个IO顺序流,若判断获知所述IO请求满足一已有类型集合的判别条件,则将所述IO请求作为一个新的元素加入到所述已有类型集合中。即根据IO请求的属性信息将IO请求划分到合适类型集合中,属于同一类型集合中的IO请求为一路顺序流,从而实现了对顺序流的识别,提升预取的命中率,大幅提高读数据的性能,解决了现有技术中当IO乱序时对顺序流识别错误的问题。
图2为本发明IO类型的识别方法实施例二的流程图,如图2所示,本实施例的方法可以包括:
步骤201、接收IO请求。
其中,可以接收主机发送的IO请求,该IO请求可以是顺序IO也可以是随机IO。
步骤202、根据所述IO请求的属性信息以及预设算法判断所述IO请求是否满足已有类型集合的判别条件;若满足则执行步骤203,若不满足则执行步骤204。
其中,各类型集合中所包括的各IO请求属于同一个IO顺序流。
其中,所述属性信息包括所述IO请求的时间信息和对应存储设备的位置信息;所述预设算法为欧式距离法;
相应地,根据所述IO请求的属性信息以及预设算法判断所述IO请求是否满足已有的类型集合的判别条件包括:根据所述时间信息和所述位置信息,利用欧式距离法计算所述IO请求与各已有类型集合的中心之间的间距;将计算出的间距与对应的已有类型集合的距离阈值进行比较。
若间距不大于距离阈值,则获知IO请求满足所述类型集合的判别条件;若间距大于距离阈值,则获知所述IO请求不满足所述类型集合的判别条件,当所述IO请求不满足所有已有类型集合的判别条件时,则执行步骤204。
具体地,IO请求对应存储设备的位置信息为IO请求对应的数据块在磁盘中的位置信息。
步骤203、将所述IO请求作为一个新的元素加入到所述类型集合中。
步骤204、将所述IO请求作为唯一的元素,生成一个新的类型集合。
步骤205、若所述类型集合中有新的元素加入,则根据新加入的IO请求的属性信息,更新所述类型集合的判别条件。
步骤206、删除预定时间内没有新元素加入的类型集合。
本实施例通过接受IO请求,根据所述IO请求的时间信息和对应存储设备的位置判断所述IO请求是否满足已有类型集合的判别条件,若满足已有类型集合的判别条件,则将所述IO请求作为新的元素加入到所述类型集合中个,并根据新加入的IO请求的属性信息更新所述类型集合的判别条件,若不满足所有已有类型集合的判别条件,则将IO请求作为唯一的元素生成新的类型集合,进一步地,对预定时间内没有新的元素加入的类型集合进行删除,从而实现了对IO类型的识别,被划分到同一类型集合的IO请求属于同一顺序流IO,各类型集合为不同的顺序流IO,进而实现多路顺序流的识别,提升预取的命中率,大幅提高读数据的性能。
下面采用一个具体的实施例,对图2所示方法实施例的技术方案进行详细说明。图3为本发明IO类型的识别方法实施例三的流程图,图4为本发明IO类型的识别方法实施例三的结构示意图,如图3所示,本实施例的方法可以包括:
S301:存储设备接收主机发送的IO请求a。
S302:存储设备根据IO请求a的时间信息和位置信息判断其所在小段数据单元(Chunk)是否属于已有类型。
其中,时间信息为存储设备接收到主机发送的IO请求a的时间,位置信息为IO请求a对应数据块在磁盘中的位置信息。
具体地,判断是否属于已有类型过程如下:根据已有类型中一个集合中的各IO请求的时间信息和位置信息计算出该集合的平均时间信息和平均距离信息,即将各IO请求作为一个对象,将其映射到一个2维空间中,在该空间中计算出该集合的中心信息,使用相同的方法计算已有类型集合中各个集合的中心信息;当接受到IO请求a则根据其时间信息和位置信息使用欧式距离法计算IO请求a到各已有类型集合的中心的间距,将计算出的间距与对应的类型集合的距离阈值进行比较。
S303:若属于已有类型集合中任一集合则进入步骤304,若不属于已有类型集合中任一集合则进入步骤305。
具体地,在S302中计算出的IO请求a到各已有类型集合的中心间距若不大于对应的各类型集合的距离阈值,则获知IO请求a满足该类型集合的判别条件;若否,则获知IO请求a不满足该类型结合的判别条件。
S304:将IO请求a加入到合适的类型集合中,如图4所示,并根据IO请求a的属性信息更新该类型集合的判别条件,并进入S306。
具体地,每一个集合在生成之后,由于顺序IO是在一段地址空间上单向进行访问的,集合中的对象随着新到的IO请求是在不断更新的,所以集合的判别条件也应该相应的被更新,以适应对新的IO类型进行识别。
S305:将IO请求a作为唯一的元素,生成一个新的集合,如图4所示,并根据IO请求a的属性信息更新该新集合的判别条件,进入S306。
在S304和S305中,当IO请求a被划入合适集合中,根据IO请求a将主机所需数据返回给主机后,可以将IO请求a所在的Chunk保留其IO属性信息,用于维护其所属类型集合的集合信息,Chunk里其他数据信息进行清除。
S306:对在预设时间内没有新元素加入的类型集合进行删除。
具体地,由于进入存储系统的数据是在不断更新的,比如视频点播中,播放完的视频文件必须尽快淘汰而不能一直存在于内存中,所以无论是新类型集合的创建还是IO类型的识别都是动态的。
当存储设备接收到其他IO请求时,可以采用S301-S306的具体识别方法,该方法可适用于任意类型IO的识别,根据上述步骤将IO请求划分到合适类型集合中,一个类型集合中的各IO请求,对应同一顺序流,不同的类型集合对应不同顺序流,进而有效地实现了多路顺序流的识别,提升预取的命中率,大幅提高读数据的性能。进一步地,使用上述方法可以有效避免顺序流由于其他路顺序IO的存在而被误认为是随机IO,排除了多路顺序流之间的干扰,在分别识别出多路顺序流的情况下,可以对每一路顺序IO采取相应的预取/缓存措施,达到存储系统性能最优化;在多路顺序流IO和随机IO并存的情况下,排除随机IO的干扰,能够正确识别出顺序流IO,避免随机IO被误识别为顺序IO,造成预取/缓存措施错误,带来不必要的性能损耗;对于IO属性的灵活配置,在多个维度上对顺序IO和随机IO进行识别,较大程度缓和IO乱序对算法造成的影响。
图5为本发明IO类型的识别的装置实施例一的结构示意图,如图5所示,本实施例的装置可以包括:接收模块11、判断模块12以及处理模块13,其中,接收模块11用于接收IO请求,判断模块12用于根据所述IO请求的属性信息以及预设算法判断所述IO请求是否满足已有类型集合的判别条件;各已有类型集合中所包括的各IO请求属于同一个IO顺序流,处理模块13用于若判断获知所述IO请求满足一已有类型集合的判别条件,则将所述IO请求作为一个新的元素加入到所述已有类型集合中。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本发明IO类型识别的装置实施例二的结构示意图,如图6所示,本实施例的装置在图5所示装置结构的基础上,进一步地,所述属性信息包括所述IO请求的时间信息和对应存储设备的位置信息,所述预设算法为欧式距离法,判断模块12可以包括:计算单元121和比较单元122,其中,计算单元121用于根据所述时间信息和所述位置信息,利用欧式距离法计算所述IO请求与各已有类型集合的中心之间的间距,比较单元122用于将计算出的间距与对应的已有类型集合的距离阈值进行比较,若间距不大于距离阈值,则获知所述IO请求满足所述对应的已有类型集合的判别条件。
其中,所述比较单元122还用于若间距大于距离阈值,则获知所述IO请求不满足所述类型集合的判别条件;若所述IO请求不满足所有已有类型集合的判别条件,则将所述IO请求作为唯一的元素,生成一个新的类型集合。
进一步地,该装置还包括更新模块61和删除模块62,其中,更新模块61用于所述将所述IO请求作为一个新的元素加入到所述类型集合中之后,根据所述IO请求的属性信息,更新所述类型集合的判别条件,删除模块62用于删除预定时间内没有新元素加入的类型集合。
本实施例的装置,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。