CN110073321B - 一种存储控制器及io请求处理方法 - Google Patents
一种存储控制器及io请求处理方法 Download PDFInfo
- Publication number
- CN110073321B CN110073321B CN201680091657.0A CN201680091657A CN110073321B CN 110073321 B CN110073321 B CN 110073321B CN 201680091657 A CN201680091657 A CN 201680091657A CN 110073321 B CN110073321 B CN 110073321B
- Authority
- CN
- China
- Prior art keywords
- index
- sorting
- processing
- core
- request
- 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.)
- Active
Links
Images
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
- G06F3/0611—Improving I/O performance in relation to response time
-
- 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
- G06F3/0613—Improving I/O performance in relation to throughput
-
- 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/0653—Monitoring storage devices or systems
-
- 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/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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
-
- 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/0683—Plurality of storage devices
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种存储控制器,涉及存储技术领域。该存储控制器包括分发核心,多个排序核心和请求处理核心。这三种核心分别用于将输入输出IO请求分发至不同排序核心,为每个IO请求生成处理排序索引和按照各个IO请求的处理排序索引的大小处理IO请求,以灵活调度该存储控制器接收的IO请求。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种存储控制器以及该存储控制器执行的输入输出(英文全称:input output,缩写:IO)请求处理方法。
背景技术
如图1,存储阵列常用于大规模存储场景中,包括多个存储介质和存储控制器,存储介质可以包括硬盘(英文全称:hard disk drive,缩写:HDD)和固态硬盘(英文全称:solid state drive,缩写:SSD)。客户端通过通信网络,将IO请求发送至存储控制器,存储控制器对接收的IO请求进行处理,例如IO请求为读请求的情况下,存储控制器确定该读请求指向于哪一个存储介质,然后存储控制器从指向的存储介质中读取对应的数据并返回给客户端。
存储控制器将存储阵列的存储介质虚拟化为多个存储单元,存储控制器接收的IO请求一般指向某一存储单元。采用不同的存储类型的情况下,存储控制器将这多个存储介质虚拟化为不同类型的存储单元(英文:storage unit)。例如采用块存储的情况下,存储控制器将这多个存储介质虚拟成一个或多个逻辑单元号(英文全称:logical unit number,缩写:LUN),客户端的每个IO请求指向某一个LUN;采用文件存储的情况下,客户端的每个IO请求指向某一个文件系统;采用对象(英文:object)存储的情况下,客户端的每个IO请求指向某一个桶(英文:bucket)。
出于业务需要,用户常需要为不同存储单元设置IO每秒(英文:input output persecond,缩写:IOPS)参数。如果客户端发送的IO请求数量较高,这些IO请求指向不同的存储单元,而由于存储控制器处理IO请求的速度有限,因此存储控制器需要对接收的进行调度来尽量达成该多个存储单元的QOS参数。
现有的IO请求的调度方法的IOPS参数达成率较低。
发明内容
本申请提供了一种存储控制器,以提升IOPS的达成率。
本申请的第一方面,提供了一种存储控制器,该存储控制器适用于有多个存储单元的存储系统,该存储控制器包括:内存设备和多个处理器核心,这多个处理器核心中包括至少一个分发核心,多个排序核心和至少一个请求处理核心。
该分发核心工作时执行该内存设备中存储的代码以执行以接收存储于该内存设备中的IO请求,并将该接收的IO请求分发至该多个排序核心。
各个排序核心工作时执行该内存设备中存储的代码以执行以下动作:获取由该分发核心分发的待生成处理排序索引的IO请求;确定该待生成处理排序索引的IO请求指向的目标存储单元;获取该目标存储单元的累计索引数量,该目标存储单元的累计索引数量指示:从该各个排序核心为之前分发的IO请求生成处理排序索引以来,该之前分发的IO请求指向该目标存储单元,已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的数量;根据该之前分发的IO请求的处理排序索引以及该目标存储单元的累计索引数量和该目标存储的单元的IO每秒参数的比值,为该待生成处理排序索引的IO请求生成处理排序索引;将该待生成处理排序索引的IO请求的处理排序索引存入该各个排序核心对应的索引队列中,该各个排序核心对应的索引队列存储于该内存设备且包含了该各个排序核心为指向该多个存储单元的IO请求生成的处理排序索引。
该请求处理工作时执行该内存设备中存储的代码以周期性的处理该各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求。
分发核心,多个排序核心和请求处理核心可以并行工作。
这多个排序核心为每个IO请求生成处理排序索引,并根据各个IO请求的处理排序索引的大小确定处理顺序,有效提升了IOPS参数的达成率。
本申请的任一方面或任一方面的任一实现方式中提及的该各个排序核心,指代该多个排序核心中的任一个排序核心。
可选的,本申请的任一方面或任一方面的任一实现方式中提及的该待生成处理排序索引的IO请求,为在该之前分发的IO请求后下一个被分发到该各个排序核心的IO请求。
结合第一方面,在第一方面的第一种实现方式中,该各个排序核心通过以下操作获取该目标存储单元的累计索引数量:从该目标存储单元的共享计数器,获取已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的当前总数量。该内存设备内为每个存储单元设置有一个共享计数器。
随后,从该各个排序核心的对应该目标存储单元的私有计数器,获取在该多个排序核心为该之前分发的IO请求生成处理排序索引时的,已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的之前总数量。该内存设备内为每个排序核心,对应于每个存储单元设置有一个私有计数器。
随后,计算该IO请求的当前总数量和该IO请求的之前总数量之差,以作为该目标存储单元的累计索引数量。随后,将该目标存储单元的共享计数器的值加1,再用该目标存储单元的共享计数器的值更新该各个排序核心的对应该目标存储单元的私有计数器。
该方面提供的存储控制器中,该各个排序核心在获取目标存储单元的累计索引数量时,无须访问其他排序核心以获取其他排序核心为IO请求生成处理排序索引的情况,提升了调度效率。
结合第一方面,在第一方面的第二种实现方式中,该各个排序核心通过以下操作获取该目标存储单元的累计索引数量:从该多个排序核心的对应该目标存储单元的第一私有计数器获取多个私有数量,其中,各自排序核心的私有数量指示:已经被该各自排序核心生成了处理排序索引的,指向该目标存储单元的IO请求的数量。
本申请的任一方面或任一方面的任一实现方式中提及的该各自排序核心,指代该多个排序核心中的任一个排序核心。
随后,对该多个私有数量求和,以获取被生成了处理排序索引的指向该目标存储单元的IO请求的当前全局数量。
随后,从该各个排序核心的对应该目标存储单元的第二私有计数器,获取在该多个排序核心为该之前分发的IO请求生成处理排序索引时的,已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的之前全局数量。该内存设备内为每个排序核心,对应于每个存储单元设置有第一私有计数器和第二私有计数器。
随后,计算该IO请求的当前全局数量和该IO请求的之前全局数量之差,以作为该目标存储单元的累计索引数量。
随后,将该各个排序核心的对应该目标存储单元的第一私有计数器的值加1,并用所述多个排序核心的当前私有数量之和更新该各个排序核心的对应该目标存储单元的第二私有计数器。由于更新第二私有计数器前,该各个排序核心的对应该目标存储单元的第一私有计数器的值增加了1,因此该各个排序核心将该IO请求的当前全局数量加1以获取所述多个排序核心的当前私有数量之和。该方面提供的存储控制器中,该各个排序核心在获取目标存储单元的累计索引数量时,无须访问其他排序核心以获取其他排序核心为IO请求生成处理排序索引的情况,提升了调度效率。
结合第一方面或第一方面的第一种实现方式或第一方面的第二种实现方式,在第一方面的第三种实现方式中,该各个排序核心通过以下操作为该待生成处理排序索引的IO请求生成处理排序索引:获取当前系统时间。随后,将该之前分发的IO请求的处理排序索引与该目标存储单元的累计索引数量和该目标存储的单元的IO每秒参数的比值之和,与该当前系统时间之间的较大者,作为该待生成处理排序索引的IO请求的处理排序索引。
也即该待生成处理排序索引的IO请求的处理排序索引=Max{该之前分发的IO请求的处理排序索引+K*该目标存储单元的累计索引数量/该目标存储的单元的IO每秒参数,该当前系统时间}。
将系统时间考虑入处理排序索引的计算中,提升了IO请求的调度精度。
结合第一方面或第一方面的第一种实现方式或第一方面的第二种实现方式或第一方面的第三种实现方式,在第一方面的第四种实现方式中,该各个排序核心还用于:在为该待生成处理排序索引的IO请求生成处理排序索引后的时刻,确定没有被分发至该各个排序核心的指向该目标存储单元的还未被生成索引的IO请求。则,计算该待生成处理排序索引的IO请求的处理排序索引与该时刻下的该目标存储单元的累计索引数量与该目标存储的单元的IO每秒参数的比值之和,以作为等待处理排序索引,并将该等待处理排序索引存入该各个排序核心对应的索引队列中。
也即该等待处理排序索引=该之前分发的IO请求的处理排序索引+K*该时刻下的该目标存储单元的累计索引数量/该目标存储的单元的IO每秒参数。
该时刻下的该目标存储单元的累计索引数量指示:在该时刻前该各个排序核心生成的最后一个指向该目标存储单元的处理排序索引以来,已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的数量。
该各个排序核心运行过程中,一旦确定被分发给该各个排序核心的还未被生成索引的IO请求中,已经没有指向该目标存储单元的IO请求,则生成该等待处理排序索引。
结合第一方面的第四种实现方式,在第一方面的第五种实现方式中,该等待处理排序索引在该各个排序核心对应的索引队列的存在期间,该各个排序核心对应的索引队列包含的大于该等待处理排序索引的处理排序索引对应的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请求的数量;该各个排序核心对该多个私有数量求和,以获取被生成了处理排序索引的指向该目标存储单元的IO请求的当前全局数量;该各个排序核心从该各个排序核心的对应该目标存储单元的第二私有计数器,获取在该多个排序核心为该之前分发的IO请求生成处理排序索引时的,已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的之前全局数量;该各个排序核心计算该IO请求的当前全局数量和该IO请求的之前全局数量之差,以作为该目标存储单元的累计索引数量;该各个排序核心将该各个排序核心的对应该目标存储单元的第一私有计数器的值加1;该各个排序核心用该多个排序核心的当前私有数量之和更新该各个排序核心的对应该目标存储单元的第二私有计数器。
结合第二方面或第二方面的第一种实现方式或第二方面的第二种实现方式,在第二方面的第三种实现方式中,该各个排序核心为该待生成处理排序索引的IO请求生成处理排序索引包括:该各个排序核心获取当前系统时间;该各个排序核心将该之前分发的IO请求的处理排序索引与该目标存储单元的累计索引数量和该目标存储的单元的IO每秒参数的比值之和,与该当前系统时间之间的较大者,作为该待生成处理排序索引的IO请求的处理排序索引。
结合第二方面或第二方面的第一种实现方式或第二方面的第二种实现方式或第二方面的第三种实现方式,在第二方面的第四种实现方式中,该方法还包括:在为该待生成处理排序索引的IO请求生成处理排序索引后的时刻,该各个排序核心确定没有被分发至该各个排序核心的指向该目标存储单元的还未被生成索引的IO请求;该各个排序核心获取该时刻下的该目标存储单元的累计索引数量,该时刻下的该目标存储单元的累计索引数量指示:在该时刻前该各个排序核心生成的最后一个指向该目标存储单元的处理排序索引以来,已经被该多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的数量。随后,该各个排序核心计算该待生成处理排序索引的IO请求的处理排序索引与该时刻下的该目标存储单元的累计索引数量与该目标存储的单元的IO每秒参数的比值之和,以作为等待处理排序索引。随后,该各个排序核心将该等待处理排序索引存入该各个排序核心对应的索引队列中。
结合第二方面的第四种实现方式,在第二方面的第五种实现方式中,该等待处理排序索引在该各个排序核心对应的索引队列的存在期间,该各个排序核心对应的索引队列包含的大于该等待处理排序索引的处理排序索引对应的IO请求不能被该请求处理核心处理;该方法还包括:在该时刻后该各个排序核心被分发了指向该目标存储单元的IO请求或该等待处理排序索引的存在时间超过预设的阈值的情况下,该各个排序核心从该各个排序核心对应的索引队列中消除该等待处理排序索引。
结合第二方面或第二方面的任一种实现方式,在第二方面的第六种实现方式中,该请求处理核心周期性的处理该各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求包括:该请求处理核心周期性的访问该各个排序核心对应的索引队列;在每次访问中,该请求处理核心处理该各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求。
本申请第三方面提供了一种存储介质,该存储介质中存储了程序,该程序被计算设备运行时,该计算设备执行前述第二方面或第二方面的任一实现方式提供的IO请求处理方法。该存储介质包括但不限于只读存储器,随机访问存储器,快闪存储器、HDD或SSD。
本申请第四方面提供了一种计算机程序产品,该计算机程序产品包括程序指令,当该计算机程序产品被存储控制器执行时,该存储控制器执行前述第二方面或第二方面的任一实现方式提供的IO请求处理方法。该计算机程序产品可以为一个软件安装包,在需要使用前述第二方面或第二方面的任一实现方式提供的IO请求处理方法的情况下,可以下载该计算机程序产品并在存储控制器上执行该计算机程序产品。
附图说明
图1为本申请实施例提供的存储系统的组织结构示意图;
图2为存储控制器的组织结构示意图;
图3为存储控制器的内存设备的一个组织结构示意图;
图4为存储控制器的内存设备的一个组织结构示意图;
图5为生成处理排序索引的一个过程示意图;
图6为生成处理排序索引的一个过程示意图;
图7-1至图7-5为生成处理排序索引的过程示意图;
图8-1至图8-5为生成处理排序索引的过程示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请中各个“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系。
贯穿本说明书,处理器包括一个或多个中央处理单元(英文全称:centralprocessing unit,缩写CPU),每个中央处理单元包括一个或多个核心(英文:core)。
贯穿本说明书,存储单元可以为LUN,文件系统或桶,分别对应存储阵列采用块存储,文件存储或对象存储的情况。示例性的,本说明书中的存储阵列对客户端呈现P个LUN,P为大于1的正整数。
贯穿本说明书,IO请求包括IO数据和元数据。其中,IO数据包括了该IO请求待操作的数据、待操作的数据的地址等信息,元数据包括了IO请求指向的存储单元ID,存储单元ID可以为LUN ID,文件系统ID或桶ID。
贯穿本说明书,函数Max{x,y}的功能为:返回x和y中较大值。
贯穿本说明书,IOPS参数可以为某一存储单元的IOPS,或某一存储单元的IOPS处理权重。其中,IOPS处理权重指代存储阵列用于处理指向各个存储单元的IO请求的资源的比例。因此,IOPS参数可以是用户根据业务需求设置的,例如,用户根据业务需求判断与某一业务相关的存储单元的IOPS最低为多少,或用户判断与某一业务相关的存储单元的IOPS需要占用存储阵列多大权重的资源。IOPS参数还可以是根据用户的等级设置的,例如高级用户的IOPS参数较高,以保证高级用户的体验。存储控制器内存储有不同存储单元的IOPS参数。
本申请实施例所应用的存储控制器架构
如图2所示,存储控制器一般包括多个核心、内存设备和通信接口。每个核心与该内存设备建立通信连接。存储控制器通过该通信接口与客户端和存储介质进行通信。从通信接口获取的IO请求被存入内存设备的IO存储空间。
对IO请求进行调度和处理的过程中主要有三类程序发挥作用,即IO请求分发程序、IO请求排序程序和IO请求处理程序。IO请求分发程序、IO请求排序程序和IO请求处理程序均由核心运行内存设备中的代码实现。运行IO请求分发程序的核心被称为分发核心,运行IO请求排序程序的核心被称为排序核心,运行IO请求处理程序的核心被称为请求处理核心。
分别分配多少个核心用于这三类程序可以根据这三类程序的运行压力进行调度,各个程序运行于哪个核心上也可以根据每个核心的负载状况进行迁移。在图2中示例性的,核心1用于执行IO请求分发程序,核心2至核心n用于执行IO请求排序程序,核心n+1至核心n+m用于执行IO请求处理程序,核心n+m+1用于执行存储控制器的操作系统。
IO请求分发程序对IO存储空间中的IO请求进行分发,将IO请求分发至各个运行了IO请求排序程序的核心的子空间内。在图2中示例性的,核心2至核心n的子空间位于核心1的空间内,实际中,核心2至核心n的子空间也可以位于核心1的空间外,或者分别位于每个核心的空间内。
IO请求分发程序分发IO请求的过程中,主要考虑每个IO请求排序程序后续的负载均衡,并不考虑将指向某一LUN的IO请求全部分发至某个核心的空间内。例如,IO请求分发程序可以将接收到的多个IO请求轮流发给每个IO请求排序程序,以保证为每个IO请求排序程序分发的IO请求数量相同。
随后,各个IO请求排序程序读取分发给自己的IO请求并对其进行排序,排序结果存储于各个IO请求排序程序所在的核心的空间内的索引队列中。该索引队列可以通过不同数据结构实现,例如堆(英文:pile)、先进先出的队列等。各个IO请求排序程序为自己的子空间内的每个IO请求生成一个处理排序索引,然后对其索引队列中的各个IO请求的处理排序索引进行排序,排序小的IO请求会优先被空闲的IO请求处理程序处理。
IO请求处理程序具体可以根据IO请求的类型,执行IO请求对应的写操作或读操作,IO请求处理程序也可以用于对IO请求携带的数据进行排布或重删等。
以该存储控制器所在的存储阵列采用块存储且该存储阵列的存储介质被虚拟化成100个LUN为例。由于业务需求,需要为有些LUN设置IOPS参数。存储控制器接到的每个IO请求指向于某一个LUN,由于客户端生成IO请求的速度不定,每秒产生的指向于不同LUN的IO请求的数量可能会有较大差异。由于IO请求处理程序的处理效率有限,因此IO请求排序程序的排序结果会影响各个LUN的IOPS参数能否达成。例如,LUN1的IOPS参数为1000,LUN2的IOPS参数为200,但由于一段时间内生成的指向LUN 2 IO请求较多,导致某一时刻内存设备的IO存储空间中存储了指向LUN 1的1000个IO请求和指向LUN 2的2000个IO请求。这3000个IO请求被分发至核心2至核心n+1上的IO请求排序程序进行排序。如果每个IO请求排序程序仅根据LUN 1的IOPS参数和LUN 2的IOPS参数对IO请求进行调度,则最终这n个IO请求排序程序的为这3000个IO请求计算的处理排序索引一般难以达成LUN 1的IOPS参数和LUN 2的IOPS参数。如果各个IO请求排序程序在生成处理排序索引的过程中互相通信,虽然有助于达成各个LUN的IOPS的下限值,但各个IO请求排序程序之间的通信开销将会很高。
本申请提供了一种IO请求处理方法。该方法适用于图2所示的存储控制器。
如图3所示,通信接口接收客户端发送的多个IO请求,并将该多个IO请求存入IO存储空间。
IO请求分发程序为每个IO请求生成IO描述信息,并建立每个IO请求和该IO请求的IO描述信息的映射关系。每个IO请求的IO描述信息包括了该IO请求的元数据中携带的LUNID。
由于IO请求占用的空间较大,因此在对IO请求进行排序的过程中可以为每个IO请求生成IO描述信息,后续IO请求排序程序根据一个IO请求的IO描述信息来为该IO请求生成处理排序索引,以降低内存设备的读写负担。
如图4所示,IO请求分发程序将多个IO描述信息分发至各个IO请求排序程序所在的核心的子空间。
IO请求分发程序可以在各个IO请求排序程序所在的核心的子空间内,为每个LUN构建一个队列,并将分配至一个IO请求排序程序所在的核心的子空间内的IO描述信息分别存入各个LUN的队列中,以便后续步骤中,IO请求排序程序识别每个IO描述信息指向的LUN。
以下通过图5,介绍核心2上与运行的IO请求排序程序如何为一个IO描述信息生成处理排序索引,每个IO请求排序程序在运行过程中均用相同的方法为每个IO描述信息生成处理排序索引。
图5中,IO描述信息A-B-C指示了核心A上运行的IO请求排序程序被分发的第C个指向LUN B的IO描述信息。相应的,处理排序索引A-B-C指示IO描述信息A-B-C的处理排序索引。
以核心2上运行的IO请求排序程序当前为IO描述信息2-1-3生成处理排序索引为例。因此,IO描述信息2-1-1和IO描述信息2-1-2的处理排序索引已经被IO请求排序程序存入核心2的索引队列中。
核心2上运行的IO请求排序程序从自己子空间内获取IO描述信息2-1-3,获取该IO描述信息对应的LUN ID。
核心2上运行的IO请求排序程序根据该LUN ID,获取LUN 1的IOPS参数。
核心2上运行的IO请求排序程序获取LUN 1的累计索引数量,LUN 1的累计索引数量指示,从核心2上运行的IO请求排序程序为IO描述信息2-1-2生成处理排序索引以来,已经被全部IO请求排序程序生成了处理排序索引的指向LUN 1的IO描述信息的数量。
由于每个IO请求排序程序都在持续为分发给自己的IO描述信息生成处理排序索引,因此核心2上运行的IO请求排序程序在为IO描述信息2-1-2生成处理排序索引至为IO描述信息2-1-3生成处理排序索引期间,其他IO请求排序程序也为一定数量的指向LUN 1的IO描述信息生成了处理排序索引,该数量也即核心2上运行的IO请求排序程序在为IO描述信息2-1-3生成处理排序索引时的LUN 1的累计索引数量。
同理,核心2上运行的IO请求排序程序在为IO描述信息2-1-2生成处理排序索引时的LUN 1的累计索引数量,也即从核心2上运行的IO请求排序程序为IO描述信息2-1-1生成处理排序索引至为IO描述信息2-1-2生成处理排序索引期间,被其余IO请求排序程序生成了处理排序索引的且指向LUN 1的IO描述信息的数量。
核心2上运行的IO请求排序程序通过操作系统接口,获取当前系统时间。
该当前系统时间具体可以指代存储控制器从启动至调用操作系统接口期间经过的纳秒数。
核心2上运行的IO请求排序程序计算IO描述信息2-1-3的处理排序索引2-1-3。
其中,处理排序索引2-1-3=Max{处理排序索引2-1-2+K*LUN 1的累计索引数量/LUN 1的IOPS参数,系统时间}。K为正数,常见的K的取值为1。
如果核心2上运行的IO请求排序程序当前为处理排序索引为2-1-1生成处理排序索引,由于处理排序索引为2-1-1为核心2上运行的IO请求排序程序被分发的第一个指向LUN 1的IO请求的处理排序索引。因此,处理排序索引2-1-1=Max{初始处理排序索引+K*LUN 1的累计索引数量/LUN 1的IOPS参数,系统时间}。该初始处理排序索引可以为0。
核心2上运行的IO请求排序程序将处理排序索引2-1-3存入索引队列。
IO描述信息2-1-3与处理排序索引2-1-3之间建立有对应关系,或者处理排序索引2-1-3与生成IO描述信息2-1-3的IO请求之间建立有对应关系,以便后续步骤中能够确定处理排序索引2-1-3对应的IO请求。
通过以上步骤,各个IO请求排序程序为分发给自己的每个IO描述信息生成处理排序索引并将生成的处理排序索引存入索引队列中。因此,核心2至核心n的索引队列中,存有未被处理的IO请求的处理排序索引。
任一核心上运行的IO请求处理程序处理完毕一个IO请求后,操作系统得知该IO请求处理程序进入空闲状态。
操作系统内记录了每个IO请求处理程序的处理顺序,即一个IO请求处理程序进入空闲后,该空闲的IO请求处理程序后续处理哪个索引队列中最小的处理排序索引对应的IO请求。为了保证IOPS参数的达成,该处理顺序需要使得一个IO请求处理程序处理各个索引队列内的处理排序索引的频率相同或者接近,也即一个IO请求处理程序周期性的处理每个索引队列中最小的处理排序索引对应的IO请求。
该处理顺序可以为每个IO请求处理程序按照核心2至核心n的轮询每个索引队列,并处理每次访问的索引队列中最小的处理排序索引对应的IO请求。每处理完一个索引队列中最小的处理排序索引对应的IO请求后,空闲的IO请求处理程序处理下一个索引队列中最小的处理排序索引对应的IO请求。
或者,如果m=n-1,也即IO请求排序程序和IO请求处理程序的数量相同,则操作系统将IO请求处理程序和索引队列一一绑定,则一个IO请求处理程序进入空闲后,操作系统确定该空闲的IO请求处理程序接下来处理该空闲的IO请求处理程序对应的索引队列中最小的处理排序索引对应的IO请求。
操作系统确定了该空闲的IO请求处理程序处理哪个索引队列中最小的处理排序索引对应的IO请求后,由该操作系统从该索引队列中选取最小的处理排序索引,并通知该空闲的IO请求处理程序处理最小的处理排序索引对应的IO请求,或者该操作系统指示该空闲的IO请求处理程序访问该索引队列,并处理该索引队列中最小的处理排序索引对应的IO请求。
部分以上步骤的执行顺序可以调整,获取LUN 1的IOPS参数的步骤和获取系统时间的步骤,均可以在生成处理排序索引2-1-3前任意时刻执行。
前述获取系统时间的步骤为可选步骤,当不执行该步骤时,生成的处理排序索引2-1-3=处理排序索引2-1-2+K*LUN 1的累计索引数量/LUN 1的IOPS参数。
由于空闲的IO请求处理程序会优先处理各个索引队列内最小的处理排序索引对应的IO请求。因此,对于核心2上运行的IO请求排序程序而言,如果在一段时间内没有被分发指向LUN 2的IO请求,而在该段时间内不断被分发指向其他LUN的IO请求。那么,接下来的时间内,指向LUN 2的IO请求一旦分发至核心2上运行的IO请求排序程序,这些指向LUN 2的IO请求的处理排序索引可能将会比指向其他LUN的IO请求的处理排序索引都要小,导致指向LUN 2的IO请求会持续优先的被空闲的IO请求处理程序处理,使得指向其他LUN的IO请求饥饿。因此,将系统时间考虑入处理排序索引的计算中,避免了存在闲置的LUN的情况下,后续指向该闲置的LUN的IO请求被分发到IO请求排序程序后,对指向其他LUN的IO请求的阻塞,提升了IO请求的调度精度。
例如,在时刻1,核心2的索引队列内记录的处理排序索引包括:
处理排序索引2-1-1=3 处理排序索引2-2-1=2.2
处理排序索引2-1-2=3.5 处理排序索引2-2-2=2.8
处理排序索引2-1-3=5.5 处理排序索引2-2-3=3.0
在时刻2,时刻1时已经存储于索引队列中的处理排序索引对应的IO请求都已经被处理了,时刻1和时刻2之间生成的新的处理排序索引包括:
处理排序索引2-1-4=6
处理排序索引2-1-5=7.5
处理排序索引2-1-6=9.5
处理排序索引2-1-7=10.5
处理排序索引2-1-8=12
也即,时刻1至时刻2期间,核心2上运行的IO请求排序程序没有被分发新的指向LUN 2的IO描述信息。因此,时刻2后,如果未将系统时间考虑入处理排序索引的计算,则如果核心2上运行的IO请求排序程序被分发了新的指向LUN 2的IO描述信息,则这些新分发的指向LUN 2的IO描述信息的处理排序索引将会比指向LUN 1的IO描述信息的处理排序索引小很多,导致空闲的IO请求处理程序访问核心2的索引队列时,将持续处理新分发的指向LUN 2的IO请求。而如果将系统时间考虑入处理排序索引的计算,则这些新分发的指向LUN2的IO描述信息的处理排序索引可能等于当前系统时间,将不会比指向LUN 1的IO描述信息的处理排序索引小很多。
因此,将系统时间考虑入处理排序索引的计算中,避免了存在闲置的LUN的情况下,后续指向该闲置的LUN的IO请求来到后,对指向其他LUN的IO请求的阻塞,提升了IO请求的调度精度。
以上步骤执行的过程中,如果核心2上运行的IO请求排序程序在某一时刻确定核心2的索引队列中,指向LUN 1的IO描述信息已经被处理完毕,如图6,在处理排序索引2-1-5生成完毕后,如果被分发给核心2上运行的IO请求排序程序的IO描述信息中,没有未被生成处理排序索引且指向LUN 1的IO描述信息,则核心2上运行的IO请求生成等待处理排序索引并将该等待处理排序索引存入核心2的索引队列中。
该等待处理排序索引=处理排序索引2-1-5+K*该时刻下的LUN 1的累计索引数量/LUN 1的IOPS参数。
其中,该时刻下的LUN 1的累计索引数量指示,从核心2上运行的IO请求排序程序为IO描述信息2-1-5生成处理排序索引以来,已经被其余IO请求排序程序生成了处理排序索引的指向LUN 1的IO描述信息的数量。
该等待处理排序索引在以下两种情况之一会被消除,其一,核心2上运行的IO请求排序程序在生成该等待处理排序索引后被分发了指向LUN 1的IO描述信息,其二,该等待处理排序索引的存在时间超过预设阈值。
等待处理排序索引的生成为可选步骤。每个索引队列中的处理排序索引与等待处理排序索引一同排序,如果操作系统在为空闲IO请求处理程序选取接下来处理的IO请求的过程中,确定当前某一索引队列内最小的处理排序索引为等待处理排序索引,由于等待处理排序索引并不对应于任何一个IO请求,因此该空闲IO请求处理程序无法处理该索引队列内的处理排序索引对应的IO请求。操作系统需要为该空闲的IO请求处理程序重新选择一个索引队列。
例如,空闲的IO请求处理程序按照核心2至核心n的顺序轮询各个核心的索引队列,则空闲的IO请求处理程序如果当前轮询到核心3的索引队列,但发现核心3的索引队列中最小的处理排序索引为等待处理排序索引,则该空闲的IO请求处理程序跳过核心3的索引队列,访问核心4的索引队列。
由于每个IO请求排序程序被分发的指向不同LUN的IO描述信息的数量不同,并且IO请求排序程序为IO请求生成处理排序索引的速度一般远高于IO请求处理程序处理IO请求的速度。因此,如果不生成等待处理排序索引且核心2上运行的IO请求排序程序被分发的指向LUN 2的IO描述信息很少,那么可能导致核心2的索引队列内,处理排序索引最小的IO描述信息始终指向LUN 1,导致空闲的IO请求处理程序不断处理指向LUN 1的IO请求,最终引起LUN 2的IOPS参数难以达成。
例如,在时刻1,核心2的索引队列内存储的处理排序索引包括:
处理排序索引2-1-1=3 处理排序索引2-2-1=2.2
处理排序索引2-1-2=3.5 处理排序索引2-2-2=2.8
处理排序索引2-1-3=5.5 处理排序索引2-2-3=3.0
在时刻2,部分时刻1已经生成的处理排序索引对应的IO请求已经被处理了,同时,时刻1至时刻2期间又有新的处理排序索引被生成,核心2的索引队列内记录的处理排序索引包括:
处理排序索引2-1-4=6 处理排序索引2-2-4=3.4
处理排序索引2-1-5=7.5
处理排序索引2-1-6=9.5
如果接下来一段时间内,没有指示LUN 2的IO描述信息被分发到核心2上运行的IO请求排序程序,而指向LUN 1的IO描述信息不断被分发到核心2上运行的IO请求排序程序。则处理排序索引2-2-4对应的IO请求被处理后,如果不生成等待处理排序索引,则空闲的IO请求处理程序一旦访问核心2的索引队列,将不断处理指向LUN 1的IO请求,导致LUN 2的IOPS参数无法达成。
与之相对的,如果采用前述方法生成等待处理排序索引2-2-6,在等待处理排序索引2-2-6被消除之前,比等待处理排序索引2-2-6大的处理排序索引对应的IO请求将无法被空闲的IO请求处理程序处理,导致空闲的IO请求处理程序需要访问其他索引队列。因此,采用等待处理排序索引可以提升IO请求的调度精度,提升IOPS参数的达成率。
前述步骤中,为处理排序索引2-1-3生成处理排序索引时,LUN 1的累计索引数量的获取,具体可以采用以下两种方式之一。
方式一:
在内存设备中为每个LUN维护一个共享计数器,每个IO请求排序程序均可以读写这P个共享计数器。每个共享计数器的初始值相同。每个IO请求排序程序生成指向LUN 1的IO描述信息的处理排序索引后,将LUN 1的共享计数器的值加1。因此,如果每个共享计数器的初始值均为0,则这P个共享计数器分别记录了已经被生成处理排序索引的指向P个LUN的IO描述信息的数量。
对于每个运行了IO请求排序程序的核心,为每个LUN维护一个私有计数器。一个核心的P个私有计数器只能被该核心上运行的IO请求排序程序读写。一个核心的每个私有计数器的初始值相同。核心2上运行的IO请求排序程序生成指向LUN 1的IO描述信息的处理排序索引后,用LUN 1的共享计数器的值更新核心2的对应LUN 1的私有计数器的值,即将LUN1的共享计数器的值复制至核心2的对应LUN 1的私有计数器。因此,核心2上运行的IO请求排序程序每次计算指向LUN a的IO描述信息的处理排序索引时,私有计数器b-a的值等于核心2上运行的IO请求排序程序计算上一个指向LUN a的IO描述信息的处理排序索引后共享计数器a的值。
共享计数器a指代指向LUN a的共享计数器。私有计数器b-c指代核心b上运行的IO请求排序程序的对应LUN c的私有计数器。实际中,共享计数器和私有计数器的实现方式可以有多种实现方式。例如,各个私有计数器可以设置于所属的IO请求排序程序所在的核心的空间内,或可以将各个核心的空间内的私有计数器合并为一张表设置于内存设备的存储空间内,一个IO请求排序程序只能访问该表中对应于其私有计数器的区域。再例如,可以将全部共享计数器也合并为一张表设置在内存设备的存储空间内,每个IO请求排序程序均能访问该表。全部的共享计数器和私有计数器在该存储控制器开始分发IO描述信息之前,由操作系统建立。
因此,采用方式一的情况下,LUN 1的累计索引数量的获取包括以下步骤:
1.1:获取共享计数器1的值和私有计数器2-1的值,并且计算两者的差值,该差值也即LUN 1的累计索引数量。
1.2:将共享计数器1的值加1。
1.3:用共享计数器1的值更新私有计数器2-1。
以处理器包含3个排序核心为例,图7-1为初始状态,共享计数器1、共享计数器2、各个私有计数器的初始值均为0。图7-1中,IO描述信息a-b-c指示被分发至核心a的指向LUNb的第c个IO描述信息。指向LUN 1的IO描述信息和指向LUN 2的IO描述信息的初始处理排序索引均为0。LUN 1的IOPS参数为1000,LUN 2的IOPS参数为500。
T1时刻,核心2上运行的IO请求排序程序为IO描述信息2-1-1计算处理排序索引。随后将共享计数器1的值加1,用共享计数器1的值更新私有计数器2-1的值,如图7-2。
T2时刻,核心3上运行的IO请求排序程序为IO描述信息3-1-1计算处理排序索引。随后将共享计数器1的值加1,用共享计数器1的值更新私有计数器3-1的值,如图7-3。
T3时刻,核心4上运行的IO请求排序程序为IO描述信息4-1-1计算处理排序索引。随后将共享计数器1的值加1,用共享计数器1的值更新私有计数器4-1的值。
T4时刻,核心4上运行的IO请求排序程序为IO描述信息4-2-1计算处理排序索引。随后将共享计数器2的值加1,用共享计数器2的值更新私有计数器4-2的值,如图7-4。
T5时刻,核心2上运行的IO请求排序程序为IO描述信息2-1-2计算处理排序索引。随后将共享计数器1的值加1,用共享计数器1的值更新私有计数器2-1的值。
T6时刻,核心2上运行的IO请求排序程序为IO描述信息2-2-1计算处理排序索引。随后将共享计数器2的值加1,用共享计数器2的值更新私有计数器2-2的值,如图7-5。
后续为其余IO描述信息生成处理排序索引的过程以此类推。
图7-1至图7-5对应的示例中未将系统时间对处理排序索引的生成过程的影响考虑在内。
方式二:
一个运行了IO请求排序程序的核心为每个LUN维护两个私有计数器,私有计数器A-B-1指代核心A的对应LUN B的第一私有计数器,私有计数器A-B-2指代核心A的对应LUN B的第二私有计数器。一个核心的2*P个私有计数器只能被该核心上运行的IO请求排序程序写,一个核心的P个第一私有计数器可以被任一IO请求排序程序读。一个核心的每个私有计数器的初始值相同。核心A上运行的IO请求排序程序生成指向LUN B的IO描述信息的处理排序索引后,将私有计数器A-B-1的值加1,再用每个IO请求排序程序的LUN B的第一私有计数器之和,更新私有计数器A-B-2。
私有计数器的实现方式可以有多种实现方式。例如,各个私有计数器可以设置于所属IO请求排序程序所在的核心的空间内,或将各个核心的空间内的私有计数器合并为一张设置于内存设备的存储空间内的表。全部的私有计数器在该存储控制器开始分发IO描述信息之前,由操作系统建立。
因此,采用方式二的情况下,LUN 1的累计索引数量的获取包括以下步骤:
2.1:获取每个核心上运行的IO请求排序程序的LUN 1的第一私有计数器的值,并对每个核心上运行的IO请求排序程序的LUN 1的第一私有计数器的值求和。
2.2:计算该求和结果和核心2上运行的IO请求排序程序的LUN 1的第二私有计数器的差值,该差值也即LUN 1的累计索引数量。
2.3:将私有计数器2-1-1的值加1。
2.4:用每个核心的对应LUN 1的第一私有计数器的值之和,更新私有计数器2-1-2。
2.4中,用于更新私有计数器2-1-2的,也可以为对2.1中获取的求和结果加1获得的值。
以处理器包含3个排序核心为例,如图8-1为初始状态,各个私有计数器的初始值均为0。指向LUN 1的IO描述信息和指向LUN 2的IO描述信息的初始处理排序索引均为0。LUN1的IOPS参数为1000,LUN 2的IOPS参数为500。
T1时刻,核心2上运行的IO请求排序程序为IO描述信息2-1-1计算处理排序索引。随后将私有计数器2-1-1的值加1,更新私有计数器2-1-2的值,如图8-2。
T2时刻,核心3上运行的IO请求排序程序为IO描述信息3-1-1计算处理排序索引。随后将私有计数器3-1-1的值加1,更新私有计数器3-1-2的值,如图8-3。
T3时刻,核心4上运行的IO请求排序程序为IO描述信息4-1-1计算处理排序索引。随后将私有计数器4-1-1的值加1,更新私有计数器4-1-2的值。
T4时刻,核心4上运行的IO请求排序程序为IO描述信息4-2-1计算处理排序索引。随后将私有计数器4-2-1的值加1,更新私有计数器4-2-2的值,如图8-4。
T5时刻,核心2上运行的IO请求排序程序为IO描述信息2-1-2计算处理排序索引。随后将私有计数器2-1-1的值加1,更新私有计数器2-1-2的值。
T6时刻,核心2上运行的IO请求排序程序为IO描述信息2-2-1计算处理排序索引。随后将私有计数器2-2-1的值加1,更新私有计数器2-2-2的值,如图8-5。
后续为其余IO描述信息生成处理排序索引的过程以此类推。
图8-1至图8-5对应的示例中未将系统时间对处理排序索引的生成过程的影响考虑在内。
如图2所示,本申请所应用的存储控制器包括总线、处理器、内存设备和通信接口。处理器、内存设备和通信接口之间通过总线通信。
内存设备可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random access memory,缩写:RAM)。
通信接口包括网络接口和存储介质访问接口,分别用于获取客户端发来的IO请求和访问存储介质。
内存设备中存储有执行IO请求分发程序、IO请求排序程序、IO请求处理程序和操作系统所需的代码。存储控制器运行时,处理器中的各个核心调用内存设备中存储的代码,以执行前文提供的IO请求处理方法。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
结合本申请公开内容所描述的方法可以由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM、快闪存储器、ROM、可擦除可编程只读存储器(英文:erasable programmable read only memory,缩写:EPROM)、电可擦可编程只读存储器(英文:electrically erasable programmable read only memory,缩写:EEPROM)、HDD、SSD、光盘或者本领域熟知的任何其它形式的存储介质中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件或软件来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上该的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上该仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、改进等,均应包括在本申请的保护范围之内。
Claims (15)
1.一种存储控制器,所述存储控制器适用于有多个存储单元的存储系统,其特征在于,包括:
内存设备;
多个处理器核心,包括一个分发核心,多个排序核心和一个请求处理核心;
所述分发核心,用于接收IO请求,并将所述接收的IO请求分发至所述多个排序核心以为每个IO请求生成处理排序索引;
各个排序核心,用于:
获取由所述分发核心分发的待生成处理排序索引的IO请求;
确定所述待生成处理排序索引的IO请求指向的目标存储单元;
获取所述目标存储单元的累计索引数量,所述目标存储单元的累计索引数量指示:从所述各个排序核心为之前分发的IO请求生成处理排序索引以来,所述之前分发的IO请求指向所述目标存储单元,已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的数量;
根据所述之前分发的IO请求的处理排序索引以及所述目标存储单元的累计索引数量和所述目标存储单元的IO每秒参数的比值,为所述待生成处理排序索引的IO请求生成处理排序索引;
将所述待生成处理排序索引的IO请求的处理排序索引存入所述各个排序核心对应的索引队列中,所述各个排序核心对应的索引队列存储于所述内存设备且包含了所述各个排序核心为指向所述多个存储单元的IO请求生成的处理排序索引;
所述请求处理核心,用于周期性的处理所述各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求。
2.如权利要求1所述的存储控制器,其特征在于,所述各个排序核心通过以下操作获取所述目标存储单元的累计索引数量:
从所述目标存储单元的共享计数器,获取已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的当前总数量;
从所述各个排序核心的对应所述目标存储单元的私有计数器,获取在所述多个排序核心为所述之前分发的IO请求生成处理排序索引时的,已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的之前总数量;
计算所述IO请求的当前总数量和所述IO请求的之前总数量之差,以作为所述目标存储单元的累计索引数量;
将所述目标存储单元的共享计数器的值加1;
用所述目标存储单元的共享计数器的值更新所述各个排序核心的对应所述目标存储单元的私有计数器。
3.如权利要求1所述的存储控制器,其特征在于,所述各个排序核心通过以下操作获取所述目标存储单元的累计索引数量:
从所述多个排序核心的对应所述目标存储单元的第一私有计数器获取多个私有数量,其中,各自排序核心的私有数量指示:已经被所述各自排序核心生成了处理排序索引的,指向所述目标存储单元的IO请求的数量;
对所述多个私有数量求和,以获取被生成了处理排序索引的指向所述目标存储单元的IO请求的当前全局数量;
从所述各个排序核心的对应所述目标存储单元的第二私有计数器,获取在所述多个排序核心为所述之前分发的IO请求生成处理排序索引时的,已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的之前全局数量;
计算所述IO请求的当前全局数量和所述IO请求的之前全局数量之差,以作为所述目标存储单元的累计索引数量;
将所述各个排序核心的对应所述目标存储单元的第一私有计数器的值加1;
用所述多个排序核心的当前私有数量之和更新所述各个排序核心的对应所述目标存储单元的第二私有计数器。
4.如权利要求1至3任一所述的存储控制器,所述各个排序核心通过以下操作为所述待生成处理排序索引的IO请求生成处理排序索引:
获取当前系统时间;
将所述之前分发的IO请求的处理排序索引与所述目标存储单元的累计索引数量和所述目标存储单元的IO每秒参数的比值之和,与所述当前系统时间之间的较大者,作为所述待生成处理排序索引的IO请求的处理排序索引。
5.如权利要求1至3任一所述的存储控制器,所述各个排序核心还用于:
在为所述待生成处理排序索引的IO请求生成处理排序索引后的时刻,确定没有被分发至所述各个排序核心的指向所述目标存储单元的还未被生成索引的IO请求;
获取所述时刻下的所述目标存储单元的累计索引数量,所述时刻下的所述目标存储单元的累计索引数量指示:在所述时刻前所述各个排序核心生成的最后一个指向所述目标存储单元的处理排序索引以来,已经被所述多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的数量;
计算所述待生成处理排序索引的IO请求的处理排序索引与所述时刻下的所述目标存储单元的累计索引数量和所述目标存储单元的IO每秒参数的比值之和,以作为等待处理排序索引;
将所述等待处理排序索引存入所述各个排序核心对应的索引队列中。
6.如权利要求5所述的存储控制器,其特征在于,所述等待处理排序索引在所述各个排序核心对应的索引队列的存在期间,所述各个排序核心对应的索引队列包含的大于所述等待处理排序索引的处理排序索引对应的IO请求不能被所述请求处理核心处理;
所述各个排序核心还用于,在所述时刻后所述各个排序核心被分发了指向所述目标存储单元的IO请求或所述等待处理排序索引的存在时间超过预设的阈值的情况下,从所述各个排序核心对应的索引队列中消除所述等待处理排序索引。
7.如权利要求1至3任一所述的存储控制器,其特征在于,所述请求处理核心通过以下操作周期性的处理所述各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求:
周期性的访问所述各个排序核心对应的索引队列;
处理每次访问中,所述各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求。
8.一种IO请求处理方法,其特征在于,所述方法由包含多个存储单元的存储系统的存储控制器执行,所述存储控制器包括内存设备、一个分发核心、多个排序核心和一个请求处理核心,所述方法包括:
所述分发核心接收IO请求,并将所述接收的IO请求分发至所述多个排序核心;
各个排序核心获取由所述分发核心分发的待生成处理排序索引的IO请求;
所述各个排序核心确定所述待生成处理排序索引的IO请求指向的目标存储单元;
所述各个排序核心获取所述目标存储单元的累计索引数量,所述目标存储单元的累计索引数量指示:从所述各个排序核心为之前分发的IO请求生成处理排序索引以来,所述之前分发的IO请求指向所述目标存储单元,已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的数量;
所述各个排序核心根据所述之前分发的IO请求的处理排序索引以及所述目标存储单元的累计索引数量和所述目标存储单元的IO每秒参数的比值,为所述待生成处理排序索引的IO请求生成处理排序索引;
所述各个排序核心将所述待生成处理排序索引的IO请求的处理排序索引存入所述各个排序核心对应的索引队列中,所述各个排序核心对应的索引队列存储于所述内存设备且包含了所述各个排序核心为指向所述多个存储单元的IO请求生成的处理排序索引;
所述请求处理核心周期性的处理所述各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求。
9.如权利要求8所述的方法,其特征在于,所述各个排序核心获取所述目标存储单元的累计索引数量包括:
所述各个排序核心从所述目标存储单元的共享计数器,获取已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的当前总数量;
所述各个排序核心从所述各个排序核心的对应所述目标存储单元的私有计数器,获取在所述多个排序核心为所述之前分发的IO请求生成处理排序索引时的,已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的之前总数量;
所述各个排序核心计算所述IO请求的当前总数量和所述IO请求的之前总数量之差,以作为所述目标存储单元的累计索引数量;
所述各个排序核心将所述目标存储单元的共享计数器的值加1;
所述各个排序核心用所述目标存储单元的共享计数器的值更新所述各个排序核心的对应所述目标存储单元的私有计数器。
10.如权利要求8所述的方法,其特征在于,所述各个排序核心获取所述目标存储单元的累计索引数量包括:
所述各个排序核心从所述多个排序核心的对应所述目标存储单元的第一私有计数器获取多个私有数量,其中,各自排序核心的私有数量指示:已经被所述各自排序核心生成了处理排序索引的,指向所述目标存储单元的IO请求的数量;
所述各个排序核心对所述多个私有数量求和,以获取被生成了处理排序索引的指向所述目标存储单元的IO请求的当前全局数量;
所述各个排序核心从所述各个排序核心的对应所述目标存储单元的第二私有计数器,获取在所述多个排序核心为所述之前分发的IO请求生成处理排序索引时的,已经被所述多个排序核心生成处理排序索引的指向所述目标存储单元的IO请求的之前全局数量;
所述各个排序核心计算所述IO请求的当前全局数量和所述IO请求的之前全局数量之差,以作为所述目标存储单元的累计索引数量;
所述各个排序核心将所述各个排序核心的对应所述目标存储单元的第一私有计数器的值加1;
所述各个排序核心用所述多个排序核心的当前私有数量之和更新所述各个排序核心的对应所述目标存储单元的第二私有计数器。
11.如权利要求8至10任一所述的方法,其特征在于,所述各个排序核心为所述待生成处理排序索引的IO请求生成处理排序索引包括:
所述各个排序核心获取当前系统时间;
所述各个排序核心将所述之前分发的IO请求的处理排序索引与所述目标存储单元的累计索引数量和所述目标存储单元的IO每秒参数的比值之和,与所述当前系统时间之间的较大者,作为所述待生成处理排序索引的IO请求的处理排序索引。
12.如权利要求8至10任一所述的方法,其特征在于,所述方法还包括:
在为所述待生成处理排序索引的IO请求生成处理排序索引后的时刻,所述各个排序核心确定没有被分发至所述各个排序核心的指向所述目标存储单元的还未被生成索引的IO请求;
所述各个排序核心获取所述时刻下的所述目标存储单元的累计索引数量,所述时刻下的所述目标存储单元的累计索引数量指示:在所述时刻前所述各个排序核心生成的最后一个指向所述目标存储单元的处理排序索引以来,已经被所述多个排序核心生成处理排序索引的指向该目标存储单元的IO请求的数量;
所述各个排序核心计算所述待生成处理排序索引的IO请求的处理排序索引与所述时刻下的所述目标存储单元的累计索引数量和所述目标存储单元的IO每秒参数的比值之和,以作为等待处理排序索引;
所述各个排序核心将所述等待处理排序索引存入所述各个排序核心对应的索引队列中。
13.如权利要求12所述的方法,其特征在于,所述等待处理排序索引在所述各个排序核心对应的索引队列的存在期间,所述各个排序核心对应的索引队列包含的大于所述等待处理排序索引的处理排序索引对应的IO请求不能被所述请求处理核心处理;
所述方法还包括:
在所述时刻后所述各个排序核心被分发了指向所述目标存储单元的IO请求或所述等待处理排序索引的存在时间超过预设的阈值的情况下,所述各个排序核心从所述各个排序核心对应的索引队列中消除所述等待处理排序索引。
14.如权利要求8至10任一所述的方法,所述请求处理核心周期性的处理所述各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求包括:
所述请求处理核心周期性的访问所述各个排序核心对应的索引队列;
在每次访问中,所述请求处理核心处理所述各个排序核心对应的索引队列中最小的处理排序索引对应的IO请求。
15.一种存储介质,其特在于,所述存储介质中存储了程序,所述程序被计算设备运行时,所述计算设备执行如权利要求8至14任一所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/113083 WO2018119899A1 (zh) | 2016-12-29 | 2016-12-29 | 一种存储控制器及io请求处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110073321A CN110073321A (zh) | 2019-07-30 |
CN110073321B true CN110073321B (zh) | 2020-05-08 |
Family
ID=62710139
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680091657.0A Active CN110073321B (zh) | 2016-12-29 | 2016-12-29 | 一种存储控制器及io请求处理方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11003360B2 (zh) |
EP (1) | EP3550421B1 (zh) |
JP (1) | JP6773229B2 (zh) |
CN (1) | CN110073321B (zh) |
WO (1) | WO2018119899A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109254726A (zh) * | 2018-08-16 | 2019-01-22 | 华为技术有限公司 | 分布式存储系统中服务质量保障方法、控制节点及系统 |
US11636059B2 (en) | 2020-03-31 | 2023-04-25 | Samsung Electronics Co., Ltd. | Scaling performance in a storage server with storage devices |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577115A (zh) * | 2012-07-31 | 2014-02-12 | 华为技术有限公司 | 数据的排布处理方法和装置 |
CN104679575A (zh) * | 2013-11-28 | 2015-06-03 | 阿里巴巴集团控股有限公司 | 输入输出流的控制系统及其方法 |
CN105183375A (zh) * | 2015-08-31 | 2015-12-23 | 成都华为技术有限公司 | 一种热点数据的服务质量的控制方法和装置 |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7917903B2 (en) | 2003-03-27 | 2011-03-29 | Hewlett-Packard Development Company, L.P. | Quality of service controller and method for a data storage system |
US7277984B2 (en) | 2004-06-23 | 2007-10-02 | International Business Machines Corporation | Methods, apparatus and computer programs for scheduling storage requests |
US7646779B2 (en) | 2004-12-23 | 2010-01-12 | Intel Corporation | Hierarchical packet scheduler using hole-filling and multiple packet buffering |
US7823154B2 (en) | 2005-09-16 | 2010-10-26 | Hewlett-Packard Development Company, L.P. | System and method for providing, by a plurality of schedulers, differentiated service to consumers of distributed resources |
JP2007257180A (ja) * | 2006-03-22 | 2007-10-04 | Hitachi Ltd | ネットワークノード、スイッチ及びネットワーク障害回復方法 |
US11010076B2 (en) | 2007-03-29 | 2021-05-18 | Violin Systems Llc | Memory system with multiple striping of raid groups and method for performing the same |
CN101272334B (zh) | 2008-03-19 | 2010-11-10 | 杭州华三通信技术有限公司 | 使用多核CPU处理QoS业务的方法、装置和设备 |
CN101299181A (zh) * | 2008-07-08 | 2008-11-05 | 杭州华三通信技术有限公司 | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 |
US20100030931A1 (en) | 2008-08-04 | 2010-02-04 | Sridhar Balasubramanian | Scheduling proportional storage share for storage systems |
CN101354664B (zh) | 2008-08-19 | 2011-12-28 | 中兴通讯股份有限公司 | 多核处理器中断负载均衡方法和装置 |
US8037219B2 (en) * | 2009-04-14 | 2011-10-11 | Lsi Corporation | System for handling parallel input/output threads with cache coherency in a multi-core based storage array |
CN102073461B (zh) | 2010-12-07 | 2012-07-04 | 成都市华为赛门铁克科技有限公司 | 输入输出请求调度方法、相关装置和存储阵列 |
CN103299271B (zh) * | 2011-01-11 | 2016-04-13 | 惠普发展公司,有限责任合伙企业 | 并发请求调度 |
US8793463B2 (en) | 2011-09-12 | 2014-07-29 | Microsoft Corporation | Allocation strategies for storage device sets |
US8321627B1 (en) * | 2011-10-06 | 2012-11-27 | Google Inc. | Memory operation command latency management |
US8943505B2 (en) | 2012-08-24 | 2015-01-27 | National Instruments Corporation | Hardware assisted real-time scheduler using memory monitoring |
US8984243B1 (en) * | 2013-02-22 | 2015-03-17 | Amazon Technologies, Inc. | Managing operational parameters for electronic resources |
CN103338252B (zh) | 2013-06-27 | 2017-05-24 | 南京邮电大学 | 一种分布式数据库并发存储虚拟请求机制的实现方法 |
CN103412790B (zh) | 2013-08-07 | 2016-07-06 | 南京师范大学 | 移动安全中间件的多核并发调度方法与系统 |
US9170943B2 (en) * | 2013-08-29 | 2015-10-27 | Globalfoundries U.S. 2 Llc | Selectively enabling write caching in a storage system based on performance metrics |
US9983801B1 (en) | 2013-09-21 | 2018-05-29 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Priority queueing for low latency storage networks |
WO2015138245A1 (en) | 2014-03-08 | 2015-09-17 | Datawise Systems, Inc. | Methods and systems for converged networking and storage |
CN105589829A (zh) | 2014-09-15 | 2016-05-18 | 华为技术有限公司 | 基于多核处理器芯片的数据处理方法、装置以及系统 |
US9483187B2 (en) | 2014-09-30 | 2016-11-01 | Nimble Storage, Inc. | Quality of service implementation in a networked storage system with hierarchical schedulers |
EP3206207A4 (en) * | 2014-12-27 | 2017-11-22 | Huawei Technologies Co. Ltd. | Method for distributing data in storage system, distribution apparatus and storage system |
US9720601B2 (en) * | 2015-02-11 | 2017-08-01 | Netapp, Inc. | Load balancing technique for a storage array |
US9575664B2 (en) * | 2015-04-08 | 2017-02-21 | Prophetstor Data Services, Inc. | Workload-aware I/O scheduler in software-defined hybrid storage system |
CN106155764A (zh) | 2015-04-23 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 调度虚拟机输入输出资源的方法及装置 |
US9696935B2 (en) | 2015-04-24 | 2017-07-04 | Kabushiki Kaisha Toshiba | Storage device that secures a block for a stream or namespace and system having the storage device |
US9639280B2 (en) * | 2015-06-18 | 2017-05-02 | Advanced Micro Devices, Inc. | Ordering memory commands in a computer system |
US10313251B2 (en) * | 2016-02-01 | 2019-06-04 | Netapp, Inc. | Methods and systems for managing quality of service in a networked storage environment |
CN110851383B (zh) | 2016-04-29 | 2023-08-22 | 华为技术有限公司 | 一种管理存储系统的方法及设备 |
CN109799956B (zh) | 2017-01-05 | 2023-11-17 | 华为技术有限公司 | 一种存储控制器及io请求处理方法 |
-
2016
- 2016-12-29 JP JP2019534231A patent/JP6773229B2/ja active Active
- 2016-12-29 WO PCT/CN2016/113083 patent/WO2018119899A1/zh unknown
- 2016-12-29 CN CN201680091657.0A patent/CN110073321B/zh active Active
- 2016-12-29 EP EP16925559.3A patent/EP3550421B1/en active Active
-
2019
- 2019-06-28 US US16/457,086 patent/US11003360B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577115A (zh) * | 2012-07-31 | 2014-02-12 | 华为技术有限公司 | 数据的排布处理方法和装置 |
CN104679575A (zh) * | 2013-11-28 | 2015-06-03 | 阿里巴巴集团控股有限公司 | 输入输出流的控制系统及其方法 |
CN105183375A (zh) * | 2015-08-31 | 2015-12-23 | 成都华为技术有限公司 | 一种热点数据的服务质量的控制方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3550421B1 (en) | 2021-06-30 |
JP2020503613A (ja) | 2020-01-30 |
EP3550421A4 (en) | 2019-12-18 |
CN110073321A (zh) | 2019-07-30 |
US11003360B2 (en) | 2021-05-11 |
US20190324662A1 (en) | 2019-10-24 |
EP3550421A1 (en) | 2019-10-09 |
JP6773229B2 (ja) | 2020-10-21 |
WO2018119899A1 (zh) | 2018-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109799956B (zh) | 一种存储控制器及io请求处理方法 | |
CN107659433B (zh) | 一种云资源调度方法及设备 | |
Shah et al. | The MDS queue: Analysing the latency performance of erasure codes | |
Zhu et al. | Scheduling stochastic multi-stage jobs to elastic hybrid cloud resources | |
CA2808367C (en) | Storage system implemented using optimized parallel processors | |
CN107688492B (zh) | 资源的控制方法、装置和集群资源管理系统 | |
CN111381950A (zh) | 一种面向边缘计算环境基于多副本的任务调度方法和系统 | |
Xie et al. | Pandas: robust locality-aware scheduling with stochastic delay optimality | |
US9298500B2 (en) | Information processing system and control method of information processing system for managing jobs in a distributed multi-node environment | |
US10965610B1 (en) | Systems and methods for allocating shared resources in multi-tenant environments | |
Zhu et al. | Deadline-constrained workflow scheduling in IaaS clouds with multi-resource packing | |
US8028291B2 (en) | Method and computer program product for job selection and resource allocation of a massively parallel processor | |
Delavar et al. | A synthetic heuristic algorithm for independent task scheduling in cloud systems | |
CN110073321B (zh) | 一种存储控制器及io请求处理方法 | |
US11080092B1 (en) | Correlated volume placement in a distributed block storage service | |
CN112286623A (zh) | 一种信息处理方法及装置、存储介质 | |
Zhang et al. | An effective heuristic for due-date-constrained bag-of-tasks scheduling problem for total cost minimization on hybrid clouds | |
US11048554B1 (en) | Correlated volume placement in a distributed block storage service | |
CN117492901A (zh) | 负载管理方法、装置、设备及存储介质 | |
CN117331648A (zh) | 一种缓解无服务器计算冷启动问题的任务调度系统及方法 | |
CN116149798A (zh) | 云操作系统的虚拟机控制方法、装置以及存储介质 | |
CN117971405A (zh) | 任务处理方法、装置、设备及存储介质 | |
CN111063405A (zh) | 任务调度方法、装置、设备及存储介质 | |
CN109960610A (zh) | 一种基于策略分流的数据备份方法 | |
Itnal et al. | Review of Map Reduce Scheduling Algorithms |
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 |