CN107305473A - 一种io请求的调度方法及装置 - Google Patents
一种io请求的调度方法及装置 Download PDFInfo
- Publication number
- CN107305473A CN107305473A CN201610252188.8A CN201610252188A CN107305473A CN 107305473 A CN107305473 A CN 107305473A CN 201610252188 A CN201610252188 A CN 201610252188A CN 107305473 A CN107305473 A CN 107305473A
- Authority
- CN
- China
- Prior art keywords
- request
- time
- hard disk
- requirement
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例公开了一种IO请求的调度方法及装置,涉及计算机领域,可以在提升硬盘性能的同时,避免IO请求的超时,保证IO请求对应业务的成功率。具体方案为:接收IO请求,记录接收IO请求的时间;按照IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将IO请求插入到IO地址队列;按照IO地址队列中IO请求的排序,依次向硬盘设备提交IO地址队列中的IO请求,并在根据IO地址队列中的任一IO请求的时延要求、任一IO请求要求访问的数据的大小和接收任一IO请求的时间计算得到的要求提交时间在预设时间内时,优先向硬盘设备提交任一IO请求。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种输入输出IO请求的调度方法及装置。
背景技术
硬盘由一个或多个圆形的“盘片”组成,该盘片表层分为由同心圆组成的若干个磁道,这些磁道又依次分为若干个扇区。其中,盘片可以围绕着一个普通的轴旋转,并且磁头可以沿盘片半径移动,如此磁头便可以随着盘片的旋转对磁盘的任一磁道上的数据进行读写操作。
但是,在对硬盘上存储的一个数据进行读写操作时,需要控制磁头移动到该数据所在的磁道上,该过程需要花费较长的时间。由此,若连续读写的多个数据分布在不同的磁道,那么则需要控制磁头在硬盘的不同磁道来回移动,磁头移动的总距离越大所需时间则越长,硬盘的性能则越差。
现有技术中,为了减少磁头在硬盘上的来回移动对硬盘性能的影响,可以为每一个输入输出(input/output,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请求要求访问的数据在硬盘中的物理地址,将该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的时间为2016年4月11日9:00,接收IO请求2的时间为2016年4月11日9:02,则可以在从请求缓存池中将IO请求1插入IO地址队列后,再将IO请求2插入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时延队列中,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请求要求访问的数据所在硬盘的标识。如,上述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请求进行分流,然后再对访问各个硬盘的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请求要求访问的数据的大小和接收该任一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时延队列的队首的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请求的调度系统的结构组成示意图;
图2为本发明实施例提供的另一种IO请求的调度系统的结构组成示意图;
图3为本发明实施例提供的另一种IO请求的调度系统的结构组成示意图;
图4为本发明实施例提供的另一种IO请求的调度系统的结构组成示意图;
图5为本发明实施例提供的另一种IO请求的调度系统的结构组成示意图;
图6为本发明实施例提供的另一种IO请求的调度系统的结构组成示意图;
图7为本发明实施例提供的另一种IO请求的调度系统的结构组成示意图;
图8为本发明实施例提供的一种IO请求的调度方法的流程示意图;
图9为本发明实施例提供的一种IO地址队列的实例示意图;
图10为本发明实施例提供的另一种IO地址队列的实例示意图;
图11为本发明实施例提供的一种IO时延队列的实例示意图;
图12为本发明实施例提供的另一种IO请求的调度方法的流程示意图;
图13为本发明实施例提供的另一种IO时延队列的实例示意图;
图14为本发明实施例提供的另一种IO请求的调度方法的流程示意图;
图15为本发明实施例提供的另一种IO请求的调度方法的流程示意图;
图16为本发明实施例提供的一种IO请求的调度装置的结构组成示意图;
图17为本发明实施例提供的另一种IO请求的调度装置的结构组成示意图。
具体实施方式
在本发明的描述中,除非另有说明,“至少两个“或“多个”的含义是指两个或两个以上。例如,至少两个硬盘是指两个或两个以上硬盘,多个处理器是指两个或两个以上处理器。
此外,本发明的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。
本发明实施例提供的IO请求的调度方法、装置及系统可以应用于硬盘设备处理IO请求之前的IO请求调度过程中,可以将接收到的IO请求进行排序合并,然后再输出至硬盘设备。
示例性的,本发明实施例中的IO请求可以为接收自流媒体服务器的视频请求,该IO请求要求访问硬盘中的视频数据。
请参考图1-图7中的任一附图,其示出了本发明实施例提供的一种IO请求的调度系统的结构组成示意图。
如图1-图7中的任一附图所示,该IO请求的调度系统中可以包括:流媒体服务器11、IO请求的调度装置12和硬盘设备13。其中,IO请求的调度装置12可以包括:请求接收模块121、请求排序模块122和请求处理模块123。
其中,如图1-图4中的任一附图硬盘设备13中可以配置至少一个硬盘,该硬盘设备13接收IO请求的调度装置12发送的、来自流媒体服务器11发送的IO请求,并根据该IO请求对该硬盘中存储的数据进行读写操作。
示例性的,以下以图1所示的硬盘设备13中配置一个硬盘为例,对IO请求的调度系统中IO请求的处理流程进行详细说明:
流媒体服务器11,用于向IO请求的调度装置12下发IO请求。其中,这里的IO请求可以包括:普通视频业务的IO请求和快进快退业务的IO请求等。
IO请求的调度装置12中的请求接收模块121,用于接收流媒体服务器11下发的IO请求;然后由请求排序模块122根据该IO请求要求访问的数据在对应硬盘中的物理地址,将该IO请求插入该IO请求要求访问的数据所在硬盘对应的IO地址队列;再由请求处理模块123按照IO请求在IO地址队列中的排序,依次向硬盘设备输出IO请求,并在根据IO地址队列中的任一IO请求的时延要求、该IO请求要求访问的数据的大小和接收该IO请求的时间计算得到的要求提交时间在预设时间内时,优先向硬盘设备提交该IO请求。
其中,IO地址队列中的IO请求按照IO请求要求访问的数据在所述硬盘中的物理地址进行排序。
进一步的,如图2所示,如图1所示的硬盘还可以对应于一个IO时延队列。IO时延队列中的IO请求按照IO请求的要求提交时间的先后进行排序。其中,IO请求的要求提交时间是根据该IO请求的时延要求、该IO请求要求访问的数据的大小和接收该IO请求的时间确定的。
请求排序模块122,还用于根据请求接收模块121接收的IO请求的时延要求、该IO请求要求访问的数据的大小和接收该IO请求的时间确定该IO请求的要求提交时间;并按照该IO请求的要求提交时间,将该IO请求插入IO时延队列。
相应的,请求处理模块123便可以在确定预设时间后到达IO时延队的队首的IO请求的要求提交时间后,优先输出该IO时延队的队首的IO请求。
进一步的,为了避免一段时间内待处理的IO请求较多,请求排序模块122不能及时将接收到的IO请求插入对应的IO地址队列或者IO时延队列,如图3所示,本发明实施例中还可以为硬盘配置一个请求缓存池,请求接收模块121可以在接收到IO请求后,先将IO请求先保存在请求缓存池中,然后再由请求排序模块122将请求缓存池中的IO请求一一插入IO地址队列。
当然,硬盘设备中的硬盘可以在对应于一个IO地址队列的同时,对应于一个IO时延队列,那么如图4所示,请求排序模块122也可以将请求缓存池中的IO请求一一插入IO时延队列。
优选的,本发明实施例中的硬盘设备13中可以配置至少两个硬盘,以下以图1所示的硬盘设备13中配置有两个硬盘为例,对IO请求的调度系统中IO请求的处理流程进行详细说明:
当硬盘设备13中可以配置至少两个硬盘时,该至少两个硬盘中的每个硬盘对应一个IO地址队列,每个IO地址队列中的IO请求按照IO请求要求访问的数据在对应硬盘中的物理地址进行排序。
示例性的,如图5所示,硬盘1对应于IO地址队列1,硬盘2对应于IO地址队列2。IO地址队列1用于存放要求访问的数据存储在硬盘1的IO请求,IO地址队列2用于存放要求访问的数据存储在硬盘2的IO请求。
相应的,由于每一个IO请求要求访问的数据可能存储于不同的硬盘,此时,接收自流媒体服务器的IO请求中还可以携带有该IO请求要求访问的数据所在硬盘的标识。请求排序模块122可以根据流媒体服务器发送的IO请求中携带地该IO请求要求访问的数据所在硬盘的标识,将该IO请求插入该硬盘对应的IO地址队列。
优选的,硬盘设备13中可以配置至少两个硬盘,至少两个硬盘中的每个硬盘对应一个请求缓存池,并且至少两个硬盘中的每个硬盘对应于一个IO地址队列。
示例性的,如图6所示,硬盘设备13中可以配置两个硬盘,硬盘1对应于请求缓存池1,硬盘2对应于请求缓存池2;并且,硬盘1对应于IO地址队列1,硬盘2对应于IO地址队列2。
可以想到的是,上述至少两个硬盘中的每个硬盘可以在分别对应于一个IO地址队列的同时,还分别对应于一个IO时延队列。如图7所示,硬盘1对应于请求缓存池1,硬盘2对应于请求缓存池2;硬盘1对应于IO地址队列1,硬盘2对应于IO地址队列2,并且,硬盘1对应于IO时延队列1,硬盘2对应于IO时延队列2。
本发明实施例提供的IO请求的调度方法的执行主体:IO请求的调度装置,可以为用于向硬盘设备传输流媒体服务器的IO请求,以及向流媒体服务器传输硬盘设备对IO请求的处理结果的网络设备或者服务器。或者,该IO请求的调度装置可以为上述网络设备或者服务器的中央处理器(Central Processing Unit,CPU)或者可以为上述网络设备或者服务器的中的控制单元或者模块。当然,上述IO请求的调度装置也可以与硬盘设备集成在一个设备或者服务器上实现。
下面结合附图,通过具体的实施例及其应用场景对本发明实施例提供的一种IO请求的调度方法及装置进行详细地说明。
实施例一
本发明实施例提供一种IO请求的调度方法,如图8所示,该IO请求的调度方法包括:
S801、流媒体服务器向IO请求的调度装置下发IO请求。
其中,本发明实施例中的IO请求可以为普通视频业务的IO请求、快进快退业务的IO请求或者其他类型的视频业务的IO请求等。
可以想到的是,流媒体服务器下发给IO请求的调度装置的IO请求可以为流媒体服务器根据用户终端发送的视频播放请求生成的。流媒体服务器可以接收至少一个用户终端发送的视频播放请求,然后根据接收到视频播放请求生成相应的IO请求,用于向硬盘设备请求访问存储在硬盘中的视频数据。其中,一个视频播放请求可以对应于至少一个IO请求。
S802、IO请求的调度装置接收流媒体服务器下发的IO请求,并记录接收该IO请求的时间。
其中,IO请求的调度装置接收的每个IO请求中都携带有该IO请求要求访问的数据在硬盘中的物理地址、该IO请求的时延要求和该IO请求要求访问的数据的大小。
S803、IO请求的调度装置按照IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将该IO请求插入到IO地址队列。
其中,IO地址队列中的IO请求都是按照IO请求要求访问的数据在硬盘中的物理地址的先后排序插入到IO地址队列中的。
示例性的,假设IO地址队列当前包含三个IO请求:IO请求1、IO请求2和IO请求3,IO请求1要求访问的数据在硬盘中的物理地址为0x00001100,IO请求2要求访问的数据在硬盘中的物理地址为0x00000500,IO请求3要求访问的数据在硬盘中的物理地址为0x00000100;那么,如图9所示,IO请求1、IO请求2和IO请求3在IO地址队列中的排序应该为:IO请求3、IO请求2、IO请求1。
示例性的,假设上述接收到的一IO请求(记作IO请求x)要求访问的数据在硬盘中的物理地址为0x00000400。由于0x00000400位于IO请求2要求访问的数据在硬盘中的物理地址0x00000500和IO请求3要求访问的数据在硬盘中的物理地址0x00000100之间;因此,如图10所示,IO请求的调度装置则可以将IO请求x插入IO地址队列中请求2和IO请求3之间的位置。
进一步的,在本发明实施例中,硬盘设备中可以配置至少两个硬盘;该至少两个硬盘中的每个硬盘对应一个IO地址队列,每个IO地址队列中的IO请求按照IO请求要求访问的数据在对应硬盘中的物理地址进行排序。如图5所示,硬盘设备中可以配置两个硬盘,硬盘1和硬盘2;该硬盘1对应IO地址队列1,硬盘2对应IO地址队列2。
相应的,IO请求的调度装置接收自流媒体服务器的IO请求中还可以携带有该IO请求要求访问的数据所在硬盘的标识。如,上述每一个IO请求中还携带有该IO请求要求访问的数据所在硬盘的标识。
可以想到的是,如果硬盘设备中配置有至少两个硬盘,那么IO请求的调度装置在接收到一个IO请求后,则需要根据该IO请求要求访问的数据所在硬盘的标识,从上述至少两个硬盘中每个硬盘所对应的IO地址队列中,确定出该IO请求待插入的IO地址队列;然后再根据该IO请求要求访问的数据在硬盘中的物理地址,将该IO请求插入上述确定的IO地址队列。
具体的,在S803之前,本发明实施例的方法还可以包括:IO请求的调度装置根据IO请求要求访问的数据所在硬盘的标识,从至少两个硬盘中每个硬盘所对应的IO地址队列中,确定出该IO请求待插入的IO地址队列。
相应的,在S803中IO请求的调度装置则可以按照IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将该IO请求插入到上述确定的IO地址队列。
S804、IO请求的调度装置根据IO请求的时延要求、IO请求要求访问的数据的大小和接收IO请求的时间,计算IO请求的要求提交时间。
本发明实施例中,IO请求的时延要求可以表征该IO请求可接受的最大时延,并且,由于IO请求要求访问的数据越大,硬盘设备处理该IO请求的处理用时则越长,即IO请求要求访问的数据的大小可以决定硬盘设备处理该IO请求的处理用时;因此,IO请求的调度装置根据一个IO请求的要求完成时间和硬盘设备处理该IO请求的处理用时,便可以计算得到该IO请求的要求提交时间。
其中,上述IO请求的要求提交时间为在保证该IO请求不超时的情况下,向硬盘设备提交该IO请求的最晚时间。
可以想到的是,若在该IO请求的要求提交时间之前,向硬盘设备提交该IO请求,则可以保证该IO请求不超时,即可以按时执行完该IO请求对应的业务,保证该IO请求对应的业务的成功率。
本发明实施例中对于S803和S804执行的先后顺序不做限制,可以先执行S803,再执行S804;也可以先执行S804,再执行S803;还可以同时执行S803和S804。
需要说明的是,S804是可选的,本发明实施例中可以不执行S804,而是在按照IO地址队列中IO请求的排序向硬盘设备提交IO地址队列中的任一个IO请求之前,再分别根据IO地址队列中的所有IO请求中每个IO请求的时延要求、要求访问的数据的大小和接收时间,计算IO请求的要求提交时间。
当然,如果已经通过S804计算得到了IO请求的要求提交时间,那么S805中则可以直接判断IO地址队列中任一IO请求的要求提交时间是否在预设时间内。
具体的,请参考图1,当硬盘设置中配置有一个硬盘,且该硬盘对应于一个IO地址队列时,如图8所示,该IO请求的调度方法可以包括S801、S802、S803和S805;或者,该IO请求的调度方法可以包括S801-S805。
S805、IO请求的调度装置按照IO地址队列中IO请求的排序,依次向硬盘设备提交IO地址队列中的IO请求,并在根据IO地址队列中的任一IO请求的时延要求、任一IO请求要求访问的数据的大小和接收任一IO请求的时间计算得到的要求提交时间在预设时间内时,优先向硬盘设备提交任一IO请求。
其中,任一IO请求的要求提交时间为在保证该任一IO请求不超时的情况下,向硬盘设备提交任一IO请求的最晚时间。
可以想到的是,若在该任一IO请求的要求提交时间之前,向硬盘设备提交该任一IO请求,则可以保证该任一IO请求不超时,即可以按时执行完该任一IO请求对应的业务,保证该任一IO请求对应的业务的成功率。
基于上述描述,IO请求的调度装置可以根据IO地址队列中的任一IO请求的时延要求、该IO请求要求访问的数据的大小和接收该IO请求的时间,确定计算得到的要求提交时间是否在预设时间内,即该IO请求在预设时间内是否超时。
其中,上述预设时间可以为从当前时间计时开始的一段预先配置的固定时间内,如预先设置的固定时间可以为10毫秒ms、20ms或者5ms等时间长度中的任一个,本发明对此不做限制。
示例性的,此处以预先设置的固定时间为5ms为例,假设一IO请求的要求提交时间为10:10:1.100(即10点10分1秒零100ms),即IO请求的调度装置需要在10:10:1.100(即10点10分1秒零100ms)之前,向硬盘设备提交一IO请求,才能保证该IO请求不超时,且当前时间为10:10:1.095。在本发明实施例中,IO请求的调度装置便可以在当前时间,即10:10:1.095,判断得到该IO请求的要求提交时间在当前时间后的5ms内时,确定该该IO请求会在当前时间后的5ms后(即10:10:1.100之后)超时。此时,该IO请求的调度装置则可以在10:10:1.095-10:10:1.100这5ms内,向硬盘设备提交该IO请求,如此便可以避免IO请求超时,保证IO请求对应业务的正常运行。
示例性的,以如图9所示的IO地址队列为例,按照IO地址队列中IO请求的排序,IO请求的调度装置当前应该向硬盘设备提交IO请求3;但是,由于IO请求的调度装置根据IO请求1的时延要求、IO请求1要求访问的数据的大小和接收IO请求1的时间,确定IO请求1的要求提交时间在预设时间内;此时,IO请求的调度装置则可以优先向硬盘设备提交IO请求1。
示例性的,本发明实施例S804和S805中,IO请求的调度装置根据一IO地址队列中的任一IO请求的时延要求、该IO请求要求访问的数据的大小和接收该IO请求的时间,计算该IO请求的要求提交时间的方法均可以包括Sa-Sb:
Sa、IO请求的调度装置根据该IO请求要求访问的数据的大小,确定硬盘设备处理该IO请求的处理用时。
示例性的,以如图9所示的IO地址队列中的三个IO请求为例,假设IO请求1的时延要求为500ms,IO请求1要求访问的数据的大小为2兆MB,接收IO请求1的时间为10:10:1.100;IO请求2的时延要求为100ms,IO请求1要求访问的数据的大小为3MB,接收IO请求1的时间为10:10:1.300;IO请求3的时延要求为500ms,IO请求3要求访问的数据的大小为4MB,接收IO请求3的时间为10:10:1.500。
假设硬盘设备处理1MB的数据的处理用时为25ms,那么IO请求的调度装置可以根据IO请求1要求访问的数据的大小(2MB),确定硬盘设备处理IO请求1的处理用时为50ms;根据IO请求2要求访问的数据的大小(3MB),确定硬盘设备处理IO请求2的处理用时为75ms;根据IO请求3要求访问的数据的大小(4MB),确定硬盘设备处理IO请求3的处理用时为100ms。
Sb、IO请求的调度装置根据接收该IO请求的时间、该IO请求的时延要求,以及硬盘设备处理该IO请求的处理用时,计算该IO请求的要求提交时间,要求提交时间为向硬盘设备提交该IO请求的最晚时间。
示例性的,IO请求的调度装置可以采用以下公式:
Ty=Tj+ts-td
计算每一个IO请求的要求提交时间。
其中,Ty用于表示IO请求的要求提交时间,Tj用于表示接收IO请求的时间,ts用于表示IO请求的时延要求,td用于表示硬盘设备处理IO请求的处理用时。
基于上述实例,IO请求的调度装置可以计算得到IO请求1的要求提交时间Ty1为:10:10:1.100+500ms-50ms=10:10:1.550,IO请求2的要求提交时间Ty2为:10:10:1.300+100ms-75ms=10:10:1.325,IO请求3的要求提交时间Ty3为:10:10:1.500+500ms-100ms=10:10:1.900。
进一步的,本发明实施例中,硬盘设备可以接收IO请求的调度装置提交的IO请求,并按照IO请求的调度装置提交IO请求的顺序,依次处理IO请求的调度装置提交的IO请求;硬盘设备可以在处理完一个IO请求后,得到该IO请求的处理结果,并将该IO请求的处理结果返回给IO请求的调度装置,由IO请求的调度装置将该IO请求的处理结果发送给流媒体服务器。具体的,本发明实施例的方法还可以包括S806-S810:
S806、硬盘设备接收IO请求的调度装置提交的IO请求。
S807、硬盘设备按照IO请求提交的先后顺序,依次处理接收到的IO请求。
S808、硬盘设备向IO请求的调度装置返回IO请求的处理结果。
S809、IO请求的调度装置接收硬盘设备发送的IO请求的处理结果。
S810、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请求对应业务的成功率。
进一步的,请参考图2,硬盘设置中配置的硬盘不仅可以对应于一个IO地址队列,还可以对应于一个IO时延队列。其中,IO时延队列中的IO请求可以按照IO请求的要求提交时间的先后进行排序。
举例来说,假设IO时延队列当前包含三个IO请求:IO请求1、IO请求2和IO请求3,IO请求1的要求提交时间Ty1为10:10:1.550,IO请求2的要求提交时间Ty2为10:10:1.325,IO请求3的要求提交时间Ty3为10:10:1.900。那么,如图11所示,IO请求1、IO请求2和IO请求3在IO时延队列中的排序应该为:IO请求2、IO请求1、IO请求3。
具体的,如图12所示,在如图8所示的S804之后,S805之前,本发明实施例的方法还可以包括S811:
S811、IO请求的调度装置按照IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,将IO请求插入到IO时延队列。
示例性的,假设上述IO请求x的要求提交时间为10:10:1.400。由于10:10:1.400在IO请求1的要求提交时间10:10:1.550之前,且在IO请求2的要求提交时间10:10:1.325之后,因此,如图13所示,IO请求的调度装置则可以将IO请求x插入IO时延队列中请求2和IO请求1之间的位置。
在本发明实施例中,IO请求的调度装置可以通过IO时延队列的方式来检测一个IO请求在当前时间后的预设时间内是否超时。具体的,如图12所示,当本发明实施例的方法包括S111时,图8中的S805可以替换为S805a-S805c:
S805a、IO请求的调度装置按照IO地址队列中IO请求的排序,依次向硬盘设备提交IO地址队列中的IO请求,并在向硬盘设备提交IO地址队列中的任一个IO请求之前,判断IO时延队列的队首的IO请求的要求提交时间是否在预设时间内。
示例性的,请参考图9和图11,IO请求1、IO请求2和IO请求3在如图9所示的IO地址队列中的排序与IO请求1、IO请求2和IO请求3在如图11所示的IO时延队列中的排序不同。
IO请求的调度装置可以按照如图9所示的IO地址队列中IO请求的排序,依次向硬盘设备提交IO地址队列中的IO请求3、IO请求2和IO请求1。以IO请求的调度装置向硬盘设备提交IO请求3为例,IO请求的调度装置在向硬盘设备提交IO地址队列中的IO请求3之前,可以判断如图12所示的IO时延队列中IO请求2(IO时延队列的队首的IO请求)的要求提交时间是否在预设时间内。
S805b、若IO时延队列的队首的IO请求的要求提交时间在预设时间内,IO请求的调度装置则优先向硬盘设备提交IO时延队列的队首的IO请求。
基于上述实例中,IO请求1的要求提交时间为10:10:1.550,IO请求2的要求提交时间为10:10:1.325,IO请求3的要求提交时间为10:10:1.900。假设预先设置的固定时间为10ms,当前时间为10:10:1.315,那么IO请求的调度装置可以确定在10ms后,IO请求2的要求提交时间10:10:1.325到达,此时IO请求的调度装置则可以优先向硬盘设备提交如图11所示的IO时延队列的队首的IO请求2。
S805c、若IO时延队列的队首的IO请求的要求提交时间不在预设时间内,IO请求的调度装置则向硬盘设备提交待提交的任一个IO请求。
假设当前时间为10:10:1.310,那么IO请求的调度装置可以确定IO请求2的要求提交时间10:10:1.325不在当前时间10:10:1.310后的10ms内,即10:10:1.325不在10:10:1.310至10:10:1.320之间,此时IO请求的调度装置则向硬盘设备提交如图9所示的IO地址队列的队首的IO请求3。
通过本方案,IO请求的调度装置可以在可以IO地址队列的队首的IO请求,即IO地址队列中要求提交时间最早的IO请求,的要求提交时间到达之前,便将硬盘设备提交该IO地址队列的队首的IO请求,如此便可以避免IO请求超时,保证IO请求对应业务的正常运行。
进一步的,为了避免一段时间内待处理的IO请求较多,IO请求的调度装置不能及时将接收到的IO请求插入对应的IO地址队列或者IO时延队列,请参考图3或图4,本发明实施例中还可以为硬盘配置一个请求缓存池,IO请求的调度装置可以在接收到IO请求后,先将IO请求先保存在请求缓存池中,然后再将请求缓存池中的IO请求一一插入IO地址队列。
具体的,如图14所示,在如图8所示的S803之前,本发明实施例的方法还可以包括S812:
S812、IO请求的调度装置将IO请求添加至请求缓存池。
相应的,请参考图3或图4,当硬盘配置有请求缓存池时,如图14所示,如图8所示的S803可以替换为S803a:
S803a、IO请求的调度装置按照IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将IO请求插入到IO地址队列。
请参考图4,当硬盘配置有请求缓存池,且该硬盘对应一个IO地址队列和IO时延队列时,如图15所示,在如图12所示的S803之前,本发明实施例的方法也可以包括S812,如图12所示的S803可以替换为S803a,如图12所示的S811可以替换为S811a:
S811a、IO请求的调度装置按照IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,从请求缓存池中,将IO请求插入到IO时延队列。
示例性的,在本发明实施例中,IO请求的调度装置可以根据接收IO请求的时间的先后顺序,依次将请求缓存池中的IO请求插入IO地址队列或者IO时延队列。
此处以将请求缓存池中的IO请求插入IO地址队列为例,对IO请求的调度装置根据接收IO请求的时间的先后顺序,依次将请求缓存池中的IO请求插入IO地址队列的方法进行说明:
假设IO请求的调度装置接收IO请求a的时间为2016年4月11日9:00,接收IO请求b的时间为2016年4月11日9:02;则IO请求的调度装置可以在从请求缓存池中将IO请求a插入IO地址队列后,再将IO请求b插入IO地址队列。
本方案中,IO请求的调度装置可以将接收到的IO请求存放在请求缓存池中,然后再将请求缓存池中的IO请求一一插入IO地址队列;如此,便可以避免由于一段时间内待处理的IO请求较多,IO请求的调度装置不能及时将接收到的IO请求插入对应的IO地址队列或者IO时延队列的问题。
优选的,为了避免冗余IO请求(即已经从请求缓存池中插入IO地址队列的IO请求和IO时延队列的IO请求)对请求缓存池的存储空间的占用,在本发明实施例中,若一个IO请求已经从请求缓存池中插入IO地址队列和IO时延队列,便可以从请求缓存池中将该IO请求删除。
优选的,硬盘设备中可以配置至少两个硬盘,至少两个硬盘中的每个硬盘对应一个请求缓存池,并且至少两个硬盘中的每个硬盘对应于一个IO地址队列。如图6所示,硬盘设备13中可以配置两个硬盘,硬盘1对应于请求缓存池1,硬盘2对应于请求缓存池2;并且,硬盘1对应于IO地址队列1,硬盘2对应于IO地址队列2。
可以想到的是,由于至少两个硬盘中的每一个硬盘均对应一个请求缓存池,那么IO请求的调度装置在接收到IO请求后,则可以将接收到的IO请求添加至该IO请求要求访问的数据所在硬盘对应的请求缓存池,以实现对接收到的多个IO请求的分流。
具体的,S803可以包括S803b-S803c:
S803b、IO请求的调度装置根据IO请求要求访问的数据所在硬盘的标识,将该IO请求添加至该IO请求要求访问的数据所在硬盘对应的请求缓存池。
示例性的,假设一个IO请求要求访问的数据所在硬盘为如图6所示的硬盘1,那么IO请求的调度装置则可以将该IO请求添加至如图6所示的请求缓存池1。
S803c、IO请求的调度装置按照IO请求要求访问的数据在硬盘中的物理地址与IO请求要求访问的数据在硬盘对应的IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从IO请求要求访问的数据所在硬盘对应的请求缓存池中,将IO请求插入到IO请求要求访问的数据所在硬盘对应的IO地址队列。
示例性的,IO请求的调度装置在将该IO请求添加至如图6所示的请求缓存池1后,可以根据该IO请求要求访问的数据在硬盘1中的物理地址从请求缓存池1中,将该IO请求插入IO地址队列1。
可以理解的是,若硬盘设备中的硬盘数量较多,访问不同硬盘的IO请求的数量也会相应增加,这样很容易造成IO请求的错误调度。本发明实施例中,可以至少两个硬盘中的每个硬盘均配置一个请求缓存池,在接收到IO请求后,将IO请求添加至该IO请求要求访问的数据所在硬盘对应的请求缓存池,实现了对多个IO请求的分流。如此,便可以减少IO请求的错误调度,提高调度效率。
可以想到的是,上述至少两个硬盘中的每个硬盘还可以对应一个IO时延队列。如图7所示,硬盘1对应于IO时延队列1,硬盘2对应于IO时延队列。
示例性的,假设一个IO请求要求访问的数据所在硬盘为如图7所示的硬盘1,那么IO请求的调度装置在将该IO请求添加至如图7所示的请求缓存池1后,可以根据该IO请求要求访问的数据在硬盘1中的物理地址,从请求缓存池1中将该IO请求插入IO地址队列1,并根据该IO请求的要求提交时间,从请求缓存池1中将该IO请求插入IO时延队列1。
本发明实施例提供的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请求要求访问硬盘设备中配置的硬盘中的数据,如图16所示,该IO请求的调度装置包括:请求接收模块1601、请求排序模块1602和请求处理模块1603。
请求接收模块1601,用于接收IO请求,并记录接收该IO请求的时间;该IO请求中携带有该IO请求要求访问的数据在硬盘中的物理地址、该IO请求的时延要求和该IO请求要求访问的数据的大小。
请求排序模块1602,用于按照该IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将上述请求接收模块1601接收的该IO请求插入到上述IO地址队列。
请求处理模块1603,用于按照上述IO地址队列中IO请求的排序,依次向硬盘设备提交该IO地址队列中的IO请求,并在根据该IO地址队列中的任一IO请求的时延要求、该任一IO请求要求访问的数据的大小和接收该任一IO请求的时间,计算得到的要求提交时间在预设时间内时,优先向硬盘设备提交该任一IO请求。
其中,该任一IO请求的要求提交时间为向所述硬盘设备提交该任一IO请求的最晚时间。
可以想到的是,若在该任一IO请求的要求提交时间之前,向硬盘设备提交该任一IO请求,则可以保证该任一IO请求不超时,即可以按时执行完该任一IO请求对应的业务,保证该任一IO请求对应的业务的成功率。
需要说明的是,本实施例中的请求接收模块1601即为如图1-图7中任一附图所示的请求接收模块121,请求排序模块1602即为如图1-图7中任一附图所示的请求排序模块122,请求处理模块1603即为如图1-图7中任一附图所示的请求处理模块123。
进一步的,为了避免一段时间内待处理的IO请求较多,不能及时处理接收到的IO请求,本发明实施例还可以为硬盘配置一个请求缓存池,请求排序模块1602可以将上述请求接收模块1601接收到到IO请求先保存在请求缓存池中,然后再将请求缓存池中的IO请求一一插入IO地址队列。
可以想到的是,如果硬盘设备中的硬盘对应于一个请求缓存池,且该硬盘对应于一个IO地址队列;那么,上述请求排序模块1602,具体可以用于:
将上述请求接收模块1601接收到的IO请求添加至请求缓存池,并按照该IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从请求缓存池中将该IO请求插入到IO地址队列。
可以想到的是,为了避免冗余IO请求,如已经从请求缓存池中插入IO地址队列的IO请求,对请求缓存池的存储空间的占用,请求处理模块1603可以将已经从请求缓存池中插入IO地址队列的IO请求从请求缓存池中删除。
进一步的,上述请求处理模块1603,还可以用于:
根据上述任一IO请求要求访问的数据的大小,确定硬盘设备处理该任一IO请求的处理用时;
根据接收该任一IO请求的时间、该任一IO请求的时延要求,以及硬盘设备处理该任一IO请求的处理用时,计算该任一IO请求的要求提交时间。
进一步的,在本发明实施例的一种应用场景中,硬盘设置中配置的硬盘不仅可以对应于一个IO地址队列,还可以对应于一个IO时延队列。即在本发明实施例中,可以通过IO时延队列的方式来检测一个IO请求在预设时间内是否会超时。
具体的,上述请求排序模块1602,还可以用于在上述请求处理模块1603按照IO地址队列中IO请求的排序,依次向硬盘设备提交IO地址队列中的IO请求之前,
根据IO请求要求访问的数据的大小,确定硬盘设备处理IO请求的处理用时;
根据请求接收模块1601接收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时延队列。
进一步的,上述请求处理模块1603,具体用于:
按照IO地址队列中IO请求的排序,依次向硬盘设备提交IO地址队列中的IO请求,并在向硬盘设备提交IO地址队列中的任一个IO请求之前,判断IO时延队列的队首的IO请求的要求提交时间是否在预设时间内;
若IO时延队列的队首的IO请求的要求提交时间在预设时间内,则优先向硬盘设备提交IO时延队列的队首的IO请求;
若IO时延队列的队首的IO请求的要求提交时间不在预设时间内,则向硬盘设备提交任一个IO请求。
进一步的,上述请求排序模块1602,具体用于按照IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,从请求缓存池中,将IO请求插入到IO时延队列。
优选的,在本发明实施例中,硬盘设备中可以配置至少两个硬盘。
该至少两个硬盘中的每个硬盘分别对应一个IO地址队列,每个IO地址队列中的IO请求按照IO请求要求访问的数据在对应硬盘中的物理地址进行排序。
相应的,上述请求接收模块1601接收自流媒体服务器的IO请求中还携带有IO请求要求访问的数据所在硬盘的标识。
可以理解的是,若硬盘设备中配置有至少两个硬盘,那么请求排序模块1602在请求接收模块1601接收到IO请求后,则需要根据该IO请求要求访问的数据所在硬盘的标识,从上述至少两个硬盘中每个硬盘所对应的IO地址队列中,确定出该IO请求待插入的IO地址队列;然后再根据该IO请求要求访问的数据在硬盘中的物理地址,将该IO请求插入上述确定的IO地址队列。
相应的,上述至少两个硬盘中的每个硬盘还可以对应一个IO时延队列。上述请求排序模块1602在将IO请求插入IO时延队列之前,也需要从上述至少两个硬盘中每个硬盘所对应的IO时延队列中,确定出该IO请求待插入的IO时延队列;然后再按照IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,将IO请求插入到IO时延队列。
进一步的,上述至少两个硬盘中的每个硬盘对应一个请求缓存池。
上述请求排序模块1602,具体用于根据IO请求要求访问的数据所在硬盘的标识,将IO请求添加至IO请求要求访问的数据所在硬盘对应的请求缓存池;按照IO请求要求访问的数据在硬盘中的物理地址与IO请求要求访问的数据在硬盘对应的IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从IO请求要求访问的数据所在硬盘对应的请求缓存池中,将IO请求插入到IO请求要求访问的数据所在硬盘对应的IO地址队列。
在硬盘设备中配置有至少两个硬盘时,请求排序模块1602可以将请求接收模块1601接收到的IO请求添加至其要求访问的数据所在硬盘对应的请求缓存池,即请求排序模块1602可以在将IO请求插入IO队列(IO地址队列或者IO时延队列)之前,先对访问不同硬盘的IO请求进行分流,然后再对访问各个硬盘的IO请求分别进行排序,可以提高IO请求的调度效率。
相应的,若上述至少两个硬盘中的每个硬盘不仅对应一个请求缓存池,至少两个硬盘中的每个硬盘分别对应一个IO地址队列,该至少两个硬盘中的每个硬盘还分别对应一个IO时延队列;那么在本发明实施例中,上述请求排序模块1602则可以在将一个IO请求添加至该IO请求要求访问的数据所在硬盘对应的请求缓存池后,从每个硬盘对应的请求缓存池中,将IO请求插入对应硬盘的IO时延队列。
具体的,上述请求排序模块1602,还可以用于按照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请求的调度装置,如图17所示,该IO请求的调度装置包括:
一个或多个处理器1701、存储器1702、总线系统1703、收发器1704,以及一个或多个应用程序,所述一个或多个处理器1701、收发器1704和存储器1702通过所述总线系统1703相连;所述一个或多个应用程序存储在所述存储器1702中,所述一个或多个应用程序包括指令。
上述收发器1704用于代替上述请求接收模块121接收IO请求,所述处理器1701用于执行所述指令,并具体用于代替上述请求排序模块和请求处理模块,执行如图8、图12、图14-图17中任一附图所示的IO请求的调度方法。即处理器1701可以为上述请求排序模块和请求处理模块等功能单元或功能模块的集成,即上述各功能模块可以集成在一个该处理器1701中实现。
所述处理器1701可能是一个中央处理器(Central Processing Unit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
其中,总线可以是工业标准体系结构(Industry StandardArchitecture,ISA)总线、外部设备互连(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准体系结构(Extended IndustryStandard Architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图17中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有一个或多个程序,该一个或多个程序包括指令,当IO请求的调度装置的处理器执行所述指令时,IO请求的调度装置执行如图8、图12、图14-图17中任一附图所示的IO请求的调度方法
所述计算机可读存储介质可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
需要说明的是,上述程序代码可以作为运行于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请求的错误调度,提高调度效率。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (17)
1.一种输入输出IO请求的调度方法,其特征在于,包括:
接收IO请求,并记录接收所述IO请求的时间;所述IO请求中携带有所述IO请求要求访问的数据在硬盘中的物理地址、所述IO请求的时延要求和所述IO请求要求访问的数据的大小;
按照所述IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将所述IO请求插入到所述IO地址队列;
按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求,并在根据所述IO地址队列中的任一IO请求的时延要求、所述任一IO请求要求访问的数据的大小和接收所述任一IO请求的时间计算得到的要求提交时间在预设时间内时,优先向所述硬盘设备提交所述任一IO请求,其中,所述任一IO请求的要求提交时间为向所述硬盘设备提交所述任一IO请求的最晚时间。
2.根据权利要求1所述的方法,所述按照所述IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将所述IO请求插入到所述IO地址队列,包括:
将所述IO请求添加至请求缓存池,并按照所述IO请求要求访问的数据在硬盘中的物理地址与所述IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从所述请求缓存池中,将所述IO请求插入到所述IO地址队列。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述IO地址队列中的任一IO请求的时延要求、所述任一IO请求要求访问的数据的大小和接收所述任一IO请求的时间,计算所述任一IO请求的要求提交时间的方法包括:
根据所述任一IO请求要求访问的数据的大小,确定所述硬盘设备处理所述任一IO请求的处理用时;
根据接收所述任一IO请求的时间、所述任一IO请求的时延要求,以及所述硬盘设备处理所述任一IO请求的处理用时,计算所述任一IO请求的要求提交时间。
4.根据权利要求1或2所述的方法,其特征在于,在所述按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求之前,所述方法还包括:
根据所述IO请求要求访问的数据的大小,确定所述硬盘设备处理所述IO请求的处理用时;
根据接收所述IO请求的时间、所述IO请求的时延要求,以及所述硬盘设备处理所述IO请求的处理用时,计算所述IO请求的要求提交时间,所述IO请求的要求提交时间为向所述硬盘设备提交所述IO请求的最晚时间;
按照所述IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,将所述IO请求插入到所述IO时延队列;
其中,位于所述IO时延队列的队首的IO请求的要求提交时间早于所述IO时延队列中其他IO请求的要求提交时间。
5.根据权利要求4所述的方法,其特征在于,所述按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求,并在根据所述IO地址队列中的任一IO请求的时延要求、所述任一IO请求要求访问的数据的大小和接收所述任一IO请求的时间,计算得到的要求提交时间在预设时间内时,优先向所述硬盘设备提交所述任一IO请求,包括:
按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求,并在向所述硬盘设备提交所述IO地址队列中的任一IO请求之前,判断所述IO时延队列的队首的IO请求的要求提交时间是否在预设时间内;
若所述IO时延队列的队首的IO请求的要求提交时间在预设时间内,则优先向所述硬盘设备提交所述IO时延队列的队首的IO请求;
若所述IO时延队列的队首的IO请求的要求提交时间不在预设时间内,则向所述硬盘设备提交所述任一IO请求。
6.根据权利要求4所述的方法,其特征在于,所述按照所述IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,将所述IO请求插入到所述IO时延队列,包括:
按照所述IO请求的要求提交时间与所述IO时延队列中各个IO请求的要求提交时间的先后排序,从所述请求缓存池中,将所述IO请求插入到所述IO时延队列。
7.根据权利要求1或2所述的方法,其特征在于,所述硬盘设备中配置有至少两个硬盘;
所述至少两个硬盘中的每个硬盘对应一个IO地址队列;
所述IO请求中还携带有所述IO请求要求访问的数据所在硬盘的标识。
8.根据权利要求7所述的方法,其特征在于,所述至少两个硬盘中的每个硬盘分别对应一个请求缓存池;
所述按照所述IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将所述IO请求插入到所述IO地址队列,包括:
根据所述IO请求要求访问的数据所在硬盘的标识,将所述IO请求添加至所述IO请求要求访问的数据所在硬盘对应的请求缓存池;
按照所述IO请求要求访问的数据在硬盘中的物理地址与所述IO请求要求访问的数据在硬盘对应的IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从所述IO请求要求访问的数据所在硬盘对应的请求缓存池中,将所述IO请求插入到所述IO请求要求访问的数据所在硬盘对应的IO地址队列。
9.一种输入输出IO请求的调度装置,其特征在于,包括:
请求接收模块,用于接收IO请求,并记录接收所述IO请求的时间;所述IO请求中携带有所述IO请求要求访问的数据在硬盘中的物理地址、所述IO请求的时延要求和所述IO请求要求访问的数据的大小;
请求排序模块,用于按照所述IO请求要求访问的数据在硬盘中的物理地址与IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,将所述请求接收模块接收的所述IO请求插入到所述IO地址队列;
请求处理模块,用于按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求,并在根据所述IO地址队列中的任一IO请求的时延要求、所述任一IO请求要求访问的数据的大小和接收所述任一IO请求的时间,计算得到的要求提交时间在预设时间内时,优先向所述硬盘设备提交所述任一IO请求,其中,所述任一IO请求的要求提交时间为向所述硬盘设备提交所述任一IO请求的最晚时间。
10.根据权利要求9所述的装置,所述请求排序模块,具体用于:
将所述IO请求添加至请求缓存池,并按照所述IO请求要求访问的数据在硬盘中的物理地址与所述IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从所述请求缓存池中将所述IO请求插入到所述IO地址队列。
11.根据权利要求9或10所述的装置,其特征在于,所述请求处理模块,还用于:
根据所述任一IO请求要求访问的数据的大小,确定所述硬盘设备处理所述任一IO请求的处理用时;
根据接收所述任一IO请求的时间、所述任一IO请求的时延要求,以及所述硬盘设备处理所述任一IO请求的处理用时,计算所述任一IO请求的要求提交时间。
12.根据权利要求9或10所述的装置,其特征在于,所述请求排序模块,还用于在所述请求处理模块按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求之前,
根据所述IO请求要求访问的数据的大小,确定所述硬盘设备处理所述IO请求的处理用时;
根据所述请求接收模块接收所述IO请求的时间、所述IO请求的时延要求,以及所述硬盘设备处理所述IO请求的处理用时,计算所述IO请求的要求提交时间,所述IO请求的要求提交时间为向所述硬盘设备提交所述IO请求的最晚时间;
按照所述IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,将所述IO请求插入到所述IO时延队列;
其中,位于所述IO时延队列的队首的IO请求的要求提交时间早于所述IO时延队列中其他IO请求的要求提交时间。
13.根据权利要求12所述的装置,其特征在于,所述请求处理模块,具体用于:
按照所述IO地址队列中IO请求的排序,依次向所述硬盘设备提交所述IO地址队列中的IO请求,并在向所述硬盘设备提交所述IO地址队列中的任一个IO请求之前,判断所述IO时延队列的队首的IO请求的要求提交时间是否在预设时间内;
若所述IO时延队列的队首的IO请求的要求提交时间在预设时间内,则优先向所述硬盘设备提交所述IO时延队列的队首的IO请求;
若所述IO时延队列的队首的IO请求的要求提交时间不在预设时间内,则向所述硬盘设备提交所述任一个IO请求。
14.根据权利要求12所述的装置,其特征在于,所述请求排序模块,具体用于按照所述IO请求的要求提交时间与IO时延队列中各个IO请求的要求提交时间的先后排序,从所述请求缓存池中,将所述IO请求插入到所述IO时延队列。
15.根据权利要求9或10所述的装置,其特征在于,所述硬盘设备中配置有至少两个硬盘;所述至少两个硬盘中的每个硬盘对应一个IO地址队列;
所述IO请求中还携带有所述IO请求要求访问的数据所在硬盘的标识。
16.根据权利要求15所述的装置,其特征在于,所述至少两个硬盘中的每个硬盘分别对应一个请求缓存池;
所述请求排序模块,具体用于:
根据所述IO请求要求访问的数据所在硬盘的标识,将所述IO请求添加至所述IO请求要求访问的数据所在硬盘对应的请求缓存池;
按照所述IO请求要求访问的数据在硬盘中的物理地址与所述IO请求要求访问的数据在硬盘对应的IO地址队列中各个IO请求要求访问的数据在硬盘中的物理地址的先后排序,从所述IO请求要求访问的数据所在硬盘对应的请求缓存池中,将所述IO请求插入到所述IO请求要求访问的数据所在硬盘对应的IO地址队列。
17.一种输入输出IO请求的调度装置,其特征在于,所述IO请求的调度装置包括:
一个或多个处理器、存储器、总线系统、收发器以及一个或多个应用程序,所述一个或多个处理器、所述存储器和所述收发器通过所述总线系统相连;
所述一个或多个应用程序存储在所述存储器中,所述一个或多个应用程序包括指令,当所述IO请求的调度装置的处理器执行所述指令时,所述IO请求的调度装置执行如权利要求1-8中任一项所述的IO请求的调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610252188.8A CN107305473B (zh) | 2016-04-21 | 2016-04-21 | 一种io请求的调度方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610252188.8A CN107305473B (zh) | 2016-04-21 | 2016-04-21 | 一种io请求的调度方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107305473A true CN107305473A (zh) | 2017-10-31 |
CN107305473B CN107305473B (zh) | 2019-11-12 |
Family
ID=60152809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610252188.8A Active CN107305473B (zh) | 2016-04-21 | 2016-04-21 | 一种io请求的调度方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107305473B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304272A (zh) * | 2018-01-19 | 2018-07-20 | 深圳神州数码云科数据技术有限公司 | 一种数据io请求的处理方法及装置 |
CN108762685A (zh) * | 2018-06-04 | 2018-11-06 | 平安科技(深圳)有限公司 | Io挂死识别方法、装置、计算机装置及存储介质 |
CN108984121A (zh) * | 2018-07-03 | 2018-12-11 | 深圳忆联信息系统有限公司 | 保障请求优先级的方法、装置及计算机设备 |
CN109766056A (zh) * | 2018-11-28 | 2019-05-17 | 上海威固信息技术股份有限公司 | 一种存储阵列控制器io队列调度方法与装置 |
WO2020124867A1 (zh) * | 2018-12-16 | 2020-06-25 | 华为技术有限公司 | 一种数据处理的方法、控制器、存储设备及存储系统 |
CN114461139A (zh) * | 2021-12-29 | 2022-05-10 | 天津中科曙光存储科技有限公司 | 业务处理方法、装置、计算机设备和存储介质 |
US11954332B2 (en) | 2018-12-16 | 2024-04-09 | Huawei Technologies Co., Ltd. | Data processing method, controller, storage device, and storage system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094181A (zh) * | 2007-07-25 | 2007-12-26 | 华为技术有限公司 | 报文入队和出队调度的装置及方法 |
US7478179B2 (en) * | 2005-11-04 | 2009-01-13 | Sun Microsystems, Inc. | Input/output priority inheritance wherein first I/O request is executed based on higher priority |
CN101702113A (zh) * | 2009-11-23 | 2010-05-05 | 成都市华为赛门铁克科技有限公司 | 写操作处理方法和装置 |
CN101990252A (zh) * | 2009-08-06 | 2011-03-23 | 中兴通讯股份有限公司 | 数据处理方法及装置 |
CN105988725A (zh) * | 2015-02-13 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 磁盘i/o调度方法和装置 |
-
2016
- 2016-04-21 CN CN201610252188.8A patent/CN107305473B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7478179B2 (en) * | 2005-11-04 | 2009-01-13 | Sun Microsystems, Inc. | Input/output priority inheritance wherein first I/O request is executed based on higher priority |
CN101094181A (zh) * | 2007-07-25 | 2007-12-26 | 华为技术有限公司 | 报文入队和出队调度的装置及方法 |
CN101990252A (zh) * | 2009-08-06 | 2011-03-23 | 中兴通讯股份有限公司 | 数据处理方法及装置 |
CN101702113A (zh) * | 2009-11-23 | 2010-05-05 | 成都市华为赛门铁克科技有限公司 | 写操作处理方法和装置 |
CN105988725A (zh) * | 2015-02-13 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 磁盘i/o调度方法和装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304272A (zh) * | 2018-01-19 | 2018-07-20 | 深圳神州数码云科数据技术有限公司 | 一种数据io请求的处理方法及装置 |
CN108304272B (zh) * | 2018-01-19 | 2020-12-15 | 深圳神州数码云科数据技术有限公司 | 一种数据io请求的处理方法及装置 |
CN108762685A (zh) * | 2018-06-04 | 2018-11-06 | 平安科技(深圳)有限公司 | Io挂死识别方法、装置、计算机装置及存储介质 |
WO2019232923A1 (zh) * | 2018-06-04 | 2019-12-12 | 平安科技(深圳)有限公司 | Io挂死识别方法、装置、计算机装置及存储介质 |
CN108762685B (zh) * | 2018-06-04 | 2021-06-22 | 平安科技(深圳)有限公司 | Io挂死识别方法、装置、计算机装置及存储介质 |
CN108984121A (zh) * | 2018-07-03 | 2018-12-11 | 深圳忆联信息系统有限公司 | 保障请求优先级的方法、装置及计算机设备 |
CN108984121B (zh) * | 2018-07-03 | 2021-04-20 | 深圳忆联信息系统有限公司 | 保障请求优先级的方法、装置及计算机设备 |
CN109766056A (zh) * | 2018-11-28 | 2019-05-17 | 上海威固信息技术股份有限公司 | 一种存储阵列控制器io队列调度方法与装置 |
WO2020124867A1 (zh) * | 2018-12-16 | 2020-06-25 | 华为技术有限公司 | 一种数据处理的方法、控制器、存储设备及存储系统 |
US11954332B2 (en) | 2018-12-16 | 2024-04-09 | Huawei Technologies Co., Ltd. | Data processing method, controller, storage device, and storage system |
CN114461139A (zh) * | 2021-12-29 | 2022-05-10 | 天津中科曙光存储科技有限公司 | 业务处理方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107305473B (zh) | 2019-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107305473A (zh) | 一种io请求的调度方法及装置 | |
CN105243033B (zh) | 数据处理方法及电子设备 | |
US7213105B2 (en) | Volume management method and apparatus | |
CN102156738B (zh) | 数据块处理方法、数据块存储设备及系统 | |
JP2557183B2 (ja) | 2つのアクチュエータを最大限使用する方法 | |
KR100726361B1 (ko) | 메모리 장치들과의 통신을 위한 시스템 및 방법 | |
CN105138469B (zh) | 一种数据读写方法以及主板 | |
US7340551B2 (en) | Bridge permitting access by multiple hosts to a single ported storage drive | |
US20070118689A1 (en) | Rebalancing of striped disk data | |
CN107526546A (zh) | 一种Spark分布式计算数据处理方法及系统 | |
TW200721125A (en) | Data access methods and storage ubsystems thereof | |
CN101226505A (zh) | 磁盘装置以及控制该装置的方法 | |
CN102301355A (zh) | 在硬件存储控制器中提供差异化i/o服务 | |
CN104050110B (zh) | 用于存储器内计算的本地旁路的方法和系统 | |
CN101221483B (zh) | 改善连续串行小型机系统接口存储设备性能的装置和方法 | |
CN106325974A (zh) | 一种虚拟化io性能优化方法及系统 | |
EP3101551B1 (en) | Access request scheduling method and apparatus | |
CN103902472B (zh) | 基于内存芯片互连的内存访问处理方法、内存芯片及系统 | |
JPS62119626A (ja) | 磁気デイスクの多重制御方式 | |
CN106610788A (zh) | 硬盘阵列控制方法及装置 | |
CN102981773A (zh) | 存储设备访问方法、访问系统及存储设备访问管理器 | |
CN109491785A (zh) | 内存访问调度方法、装置及设备 | |
CN109101331A (zh) | 一种aio请求处理的方法、系统及设备 | |
JPH04284529A (ja) | 光ディスクアクセス装置 | |
JP2008192020A (ja) | Raid制御装置及びその制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |