CN107526551B - 一种cpu多核的io请求处理方法、装置及设备 - Google Patents
一种cpu多核的io请求处理方法、装置及设备 Download PDFInfo
- Publication number
- CN107526551B CN107526551B CN201710827522.2A CN201710827522A CN107526551B CN 107526551 B CN107526551 B CN 107526551B CN 201710827522 A CN201710827522 A CN 201710827522A CN 107526551 B CN107526551 B CN 107526551B
- Authority
- CN
- China
- Prior art keywords
- request
- processing
- queue
- request queue
- public
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 221
- 238000000034 method Methods 0.000 title claims description 41
- 238000003672 processing method Methods 0.000 claims abstract description 10
- 238000004590 computer program Methods 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
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
-
- 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]
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)
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种CPU多核的IO请求处理方法,包括:启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行从公共IO请求队列中获取IO请求集合并进行处理。应用本发明实施例提供的技术方案,多线程处理IO请求,利用CPU多核的性能提高了IO请求处理的性能。本发明还公开了一种IO请求处理装置、设备及存储介质,具有相应技术效果。
Description
技术领域
本发明涉及计算机存储技术领域,特别是涉及一种CPU多核的IO请求处理方法、装置及设备。
背景技术
在存储系统中,采用单线程的处理方式来处理IO请求。随着存储技术的不断发展,单线程的处理方式在很多场合已经不能满足需求。
例如,在SAN(Storage Area Network,存储区域网络)存储系统中,常见的RAID(Redundant Arrays of Independent Disks,独立磁盘冗余阵列)阵列有传统RAID阵列和分布式RAID阵列。传统的RAID阵列最大支持16块磁盘,采用单线程来处理IO请求,CUP单核处理。由于底层IO通道只有16块盘,使用CPU单核处理读写磁盘的IO请求以及计算异或校验,可以将16块盘的带宽跑满。分布式RAID阵列的磁盘数量远远大于传统的RAID阵列,大量的磁盘能够提高IO并发性能,但是CUP单核的性能不能满足计算异或校验的需求,特别是随着分布式RAID阵列的不断发展,采用单线程处理IO请求,由于CPU单核,在计算异或检验阶段的性能瓶颈凸显的越来越明显。
综上所述,在处理IO请求时,CUP单核性能不足,是目前本领域技术人员急需解决的技术问题。
发明内容
本发明的目的是提供一种CPU多核的IO请求处理方法、装置、设备及存储介质,提高了IO请求处理的性能。
为解决上述技术问题,本发明提供如下技术方案:
一种CPU多核的IO请求处理方法,该方法包括:
启动N个IO处理线程,其中,所述N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;
针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;
在处理完所述IO请求集合之后,确定该IO请求队列是否为空;
如果否,则处理该IO请求队列中的IO请求;如果是,则执行所述从公共IO请求队列中获取IO请求集合并进行处理。
优选的,所述从公共IO请求队列中获取IO请求集合并进行处理,包括:
从公共IO请求队列中获取预定个数的IO请求;
确定获取的各个IO请求相对应的条带编号;
针对每一个IO请求,确定该IO请求的条带编号对于所述N的取模运算结果;
根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理。
优选的,在所述根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理之后,还包括:
针对从所述公共IO请求队列中获取的所述IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
优选的,所述目标IO请求集合中仅包含一个IO请求。
优选的,所述N个所述IO处理线程为分布式RAID阵列中的线程。
一种CPU多核的IO请求处理装置,该装置包括:
线程启动模块,用于启动N个IO处理线程,其中,所述N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;
公共IO请求处理模块,用于针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;
队列IO请求确定模块,用于在处理完所述IO请求集合之后,确定该IO请求队列是否为空;如果否,则进入队列IO请求处理模块,如果是,则进入所述公共IO请求处理模块;
所述队列IO请求处理模块,用于处理该IO请求队列中的IO请求。
优选的,所述公共IO请求处理模块,包括:
IO请求获得子模块,用于从公共IO请求队列中获取预定个数的IO请求;
条带编号确定子模块,用于确定获取的各个IO请求相对应的条带编号;
取模结果确定子模块,用于针对每一个IO请求,确定该IO请求的条带编号对于所述N的取模运算结果;
公共IO请求处理子模块,用于根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理。
优选的,还包括:
IO请求分发模块,用于在所述根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理之后,针对从所述公共IO请求队列中获取的所述IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
一种CPU多核的IO请求处理设备,该设备包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现:启动N个IO处理线程,其中,所述N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完所述IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行所述从公共IO请求队列中获取IO请求集合并进行处理。
一种计算机可读存储介质,所述计算机可读存储介质上存储有多线程IO请求处理程序,所述多线程IO请求处理程序被处理器执行时实现如上述任一项所述的CPU多核的IO请求处理方法。
应用本发明实施例所提供的技术方案,启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行从公共IO请求队列中获取IO请求集合并进行处理。
由于采用N个IO处理线程,N至少为2,在处理IO请求时,每个IO处理线程均可以处理相对应的IO请求队列中的IO请求,每个IO处理线程可以从公共IO请求队列中获取IO请求。将单线程的IO请求处理变为多线程并行的IO请求处理,使得可以利用CPU的多核的性能,避免了存储系统中磁盘数多时,单线程处理IO请求,CPU单核导致的不能满足计算异或校验的性能需求。提高了IO请求处理的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明中一种CPU多核的IO请求处理方法的实施流程图;
图2为本发明中一种CPU多核的IO请求处理装置的结构示意图;
图3为本发明中一种CPU多核的IO请求处理设备的结构示意图。
具体实施方式
本发明的核心是提供一种CPU多核的IO请求处理方法,将单线程的IO请求处理变为多线程并行的IO请求处理,使得可以利用CPU的多核的性能,避免了存储系统中磁盘数较多时,单线程处理IO请求,CPU单核导致的不能满足计算异或校验的性能需求。提高了IO请求处理的性能。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,为本发明中一种CPU多核的IO请求处理方法的实施流程图,该方法可以包括以下步骤:
S101:启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列。
发明人通过分析测试,发现了采用单线程处理IO请求,由于CPU单核,会造成在计算异或检验阶段的性能瓶颈,因此,发明人提出了多线程处理IO请求的方法以利用CPU多核的性能。在多线程IO请求处理中,由于CPU多核并行处理IO请求,提高了存储系统的IO请求的处理性能。
启动存储系统中的N个IO处理线程,N为正整数,且至少为2。在本发明的一种具体实施方式中,N个IO处理线程为分布式RAID阵列中的线程。
可以将这N个IO处理线程进行编号,编号方式可以根据实际情况进行设定和调整,并不影响本发明的实施,例如使用正整数依次编号为0,1,2...N-2,N-1。每一个IO处理线程对应一个IO请求队列。需要说明的是,由于本发明的方案中还有一个公共IO请求队列,当IO处理线程为N个时,每一个IO处理线程对应一个IO请求队列,则包括公共IO请求队列,一共有N+1个IO请求队列。
需要指出的是,每一个IO处理线程可以从相对应的IO请求队列中获取IO请求并进行处理。例如,2号IO处理线程获取相对应的2号IO请求队列中的IO请求,并进行处理。为了便于表述,本申请中将IO处理线程相对应的IO请求队列称为该IO处理线程自己的IO请求队列。
在启动N个IO处理线程之后,可以进行步骤S102的操作。
S102:针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理。
针对每一个IO处理线程,在该IO处理线程进行IO请求处理的过程中,优先处理该IO处理线程对应的IO请求队列中的IO请求,当该IO处理线程对应的IO请求队列为空,即不含任何IO请求时,该IO处理线程可以从公共IO请求队列中获取IO请求集合并进行处理。
例如,将3号IO处理线程自己的IO请求队列称为3号IO请求队列,当3号IO请求队列为空时,3号IO处理线程从公共IO请求队列中获取IO请求集合并进行处理,例如获取10个IO请求构成的IO请求集合。当然,IO请求集合中包含的IO请求数量可以根据实际情况进行设定和调整,例如在本发明的一种具体实施方式中,目标IO请求集合中仅包含一个IO请求。从公共IO请求队列中获取这10个IO请求的方式也可以有多种,例如取公共IO请求队列中的队列头部的前10个IO请求构成IO请求集合。
需要指出的是,N个IO处理线程的初始状态通常均为空,即一开始启动存储系统中的N个IO处理线程时,对应的N个IO请求队列中不含有任何IO请求。因此,在存储系统中进行IO请求处理的最初阶段,各个IO处理线程均可以从公共IO处理队列中获取IO请求。各个IO处理线程获取IO请求的方式可以参照上文例子中的3号IO请求队列为空时,从公共IO请求队列中获取IO请求集合的方式。当然,也可以采取其他获取方式,并不影响本发明的实施。例如,当初始阶段N个IO处理线程对应的IO请求队列均为空时,每个IO处理线程依次从公共IO请求队列中获取10个IO请求。
S103:在处理完IO请求集合之后,确定该IO请求队列是否为空。
针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理,在处理完IO请求集合之后,确定该IO请求队列是否为空,即确定该IO请求队列中是否有IO请求。当该IO请求队列不为空时,可以进入步骤S104的操作,否则继续从公共IO请求队列中获取IO请求集合并进行处理,即执行步骤S102。
S104:处理该IO请求队列中的IO请求。
当该IO处理线程对应的IO请求队列不为空时,该IO处理线程处理自己的IO请求队列中的IO请求。当IO处理线程处理自己的IO请求队列中的IO请求时,可以按照通常的IO请求处理方式进行处理,并不影响本发明的实施。例如,N个IO处理线程为分布式RAID阵列中的线程,当每一个IO处理线程处理自己的IO请求队列中的IO请求时,可以按照传统的RAID阵列的IO请求处理流程进行IO请求的处理。
需要指出的是,在该IO处理线程处理完自己的IO请求队列中的全部IO请求之后,自己的IO请求队列为空,则可以继续从公共IO请求队列中获取IO请求集合并进行处理。
应用本发明实施例所提供的技术方案,启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行从公共IO请求队列中获取IO请求集合并进行处理。
由于采用N个IO处理线程,N至少为2,在处理IO请求时,每个IO处理线程均可以处理相对应的IO请求队列中的IO请求,每个IO处理线程可以从公共IO请求队列中获取IO请求。将单线程的IO请求处理变为多线程并行的IO请求处理,使得可以利用CPU的多核的性能,避免了存储系统中磁盘数多时,单线程处理IO请求,CPU单核导致的不能满足计算异或校验的性能需求。提高了IO请求处理的性能。
在本发明的一种具体实施方式中,步骤S102中的从公共IO请求队列中获取IO请求集合并进行处理,包括以下步骤:
步骤一:从公共IO请求队列中获取预定个数的IO请求;
步骤二:确定获取的各个IO请求相对应的条带编号;
步骤三:针对每一个IO请求的条带编号,确定该IO请求的条带编号对于N的取模运算结果;
步骤四:根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理。
为了便于描述,将上述四个步骤进行合并说明。
针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理。由于该IO处理线程可以是N个IO处理线程中的任意一个,为了便于表述,以该IO处理线程为3号IO处理线程为例,N设定为10。
从公共IO请求队列中获取预定个数的IO请求,预定个数可以根据实际情况进行设定和调整,并不影响本发明的实施。例如预定个数可以为N的整数倍。
确定获取的各个IO请求相对应的条带编号,针对每一个IO请求的条带编号,确定该IO请求的条带编号对于N的取模运算结果。例如,获取6个IO请求,这6个IO请求的条带编号依次为61,62,63,75,76以及83,当N为10时,这6个IO请求的条带编号对于10的取模运算结果依次为1,2,3,5,6,3。然后,根据各个IO请求的取模运算结果,从公共IO请求队列中获取目标IO请求集合并进行处理。可以根据IO处理线程的编号与取模运算结果的对应关系,将相应的IO请求置入IO请求集合,在该实施例中,则可以将条带编号为63以及83的IO请求置入IO请求集合以便3号IO处理线程对IO请求集合进行处理。将获取的预定个数的IO请求中的每一个IO请求均进行条带编号的取模运算之后,可以获取IO请求集合并进行处理。
当然,IO请求集合中包含的IO请求个数可以进行设定和调整,在本发明的一种具体实施方式中,IO请求集合中仅包含一个IO请求,例如,N为10,3号IO处理线程从公共IO请求队列获取IO请求时,对条带编号为53的IO请求进行取模运算之后,将该IO请求置入3号IO处理线程对应的3号IO请求队列,3号IO处理线程在处理完条带编号为53的这一个IO请求之后,确定3号IO请求队列中是否为空,如果为空则继续从公共IO请求队列中获取一个IO请求并进行处理,如果不为空,则处理自己的请求队列中的IO请求。
需要指出的是,本发明的IO请求对应的条带编号可以为Stripe编号,由分布式RAID阵列所有成员盘中相应的分块构成。上述步骤一中的从公共IO请求队列中获取预定个数的IO请求,指的是在一个条带内的IO请求,由于部分IO请求可能跨两个条带,在确定这类IO请求的条带编号时,可以将这类IO请求按照其所跨的条带进行拆分,使得一个IO请求拆分为两个IO请求,每个IO请求分别进行处理。也就是说,对于跨两个条带的一个IO请求,视为两个单独的IO请求进行处理。
在本发明的一种具体实施方式中,在上述步骤四之后,还包括:
针对从公共IO请求队列中获取的IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
仍然以上述获取公共IO请求队列中的6个IO请求为例,这6个IO请求的条带编号依次为61,62,63,75,76以及83,当N为10时,6个IO请求的条带编号对于10的取模运算结果依次为1,2,3,5,6,3。采用本发明的该种实施方式时,将条带编号为63以及83的IO请求置入IO请求集合,以便3号IO处理线程进行处理。对于其余4个IO请求,根据这4个IO请求的取模运算结果,可以将条带编号为61的IO请求,置入1号IO处理线程对应的1号IO请求队列,将条带编号为62的IO请求,置入2号IO处理线程对应的2号IO请求队列,将条带编号为75的IO请求,置入5号IO处理线程对应的5号IO请求队列,将条带编号为76的IO请求,置入6号IO处理线程对应的6号IO请求队列。
相应于上面的方法实施例,本发明实施例还提供了一种CPU多核的IO请求处理装置,下文描述的一种CPU多核的IO请求处理装置与上文描述的一种CPU多核的IO请求处理方法可相互对应参照。
参见图2所示,为本发明中一种CPU多核的IO请求处理装置的结构示意图,该装置包括以下模块:
线程启动模块201,用于启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;
公共IO请求处理模块202,用于针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;
队列IO请求确定模块203,用于在处理完IO请求集合之后,确定该IO请求队列是否为空;如果否,则进入队列IO请求处理模块204,如果是,则进入公共IO请求处理模块202;
队列IO请求处理模块204,用于处理该IO请求队列中的IO请求。
应用本发明实施例所提供的装置,启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行从公共IO请求队列中获取IO请求集合并进行处理。
由于采用N个IO处理线程,N至少为2,在处理IO请求时,每个IO处理线程均可以处理相对应的IO请求队列中的IO请求,每个IO处理线程可以从公共IO请求队列中获取IO请求。将单线程的IO请求处理变为多线程并行的IO请求处理,使得可以利用CPU的多核的性能,避免了存储系统中磁盘数多时,单线程处理IO请求,CPU单核导致的不能满足计算异或校验的性能需求。提高了IO请求处理的性能。
在本发明的一种具体实施方式中,公共IO请求处理模块202,包括:
IO请求获得子模块,用于从公共IO请求队列中获取预定个数的IO请求;
条带编号确定子模块,用于确定获取的各个IO请求相对应的条带编号;
取模结果确定子模块,用于针对每一个IO请求,确定该IO请求的条带编号对于N的取模运算结果;
公共IO请求处理子模块,用于根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理。
在本发明的一种具体实施方式中,还包括:
IO请求分发模块,用于在根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理之后,针对从公共IO请求队列中获取的IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
在本发明的一种具体实施方式中,目标IO请求集合中仅包含一个IO请求。
在本发明的一种具体实施方式中,N个IO处理线程为分布式RAID阵列中的线程。
相应于上面的方法以及装置实施例,本发明实施例还提供了一种CPU多核的IO请求处理设备,下文描述的一种CPU多核的IO请求处理设备与上文描述的一种CPU多核的IO请求处理方法可相互对应参照。
参见图3所示,为本发明中一种CPU多核的IO请求处理设备的结构示意图,该设备包括:
存储器301,用于存储计算机程序;
处理器302,用于执行计算机程序以实现:启动N个IO处理线程,其中,N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行从公共IO请求队列中获取IO请求集合并进行处理。
相应于上面的方法、装置以及设备实施例,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有多线程IO请求处理程序,多线程IO请求处理程序被处理器执行时实现上述的CPU多核的IO请求处理方法,此处不重复说明。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (5)
1.一种CPU多核的IO请求处理方法,其特征在于,包括:
启动N个IO处理线程,其中,所述N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;
针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;
在处理完所述IO请求集合之后,确定该IO请求队列是否为空;
如果否,则处理该IO请求队列中的IO请求;如果是,则执行所述从公共IO请求队列中获取IO请求集合并进行处理;
所述从公共IO请求队列中获取IO请求集合并进行处理,包括:
从公共IO请求队列中获取预定个数的IO请求;
确定获取的各个IO请求相对应的条带编号;
针对每一个IO请求,确定该IO请求的条带编号对于所述N的取模运算结果;
根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理;
在所述根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理之后,还包括:
针对从所述公共IO请求队列中获取的所述IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
2.根据权利要求1所述的方法,其特征在于,所述N个所述IO处理线程为分布式RAID阵列中的线程。
3.一种CPU多核的IO请求处理装置,其特征在于,包括:
线程启动模块,用于启动N个IO处理线程,其中,所述N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;
公共IO请求处理模块,用于针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;
队列IO请求确定模块,用于在处理完所述IO请求集合之后,确定该IO请求队列是否为空;如果否,则进入队列IO请求处理模块,如果是,则进入所述公共IO请求处理模块;
所述队列IO请求处理模块,用于处理该IO请求队列中的IO请求;
所述公共IO请求处理模块,包括:
IO请求获得子模块,用于从公共IO请求队列中获取预定个数的IO请求;
条带编号确定子模块,用于确定获取的各个IO请求相对应的条带编号;
取模结果确定子模块,用于针对每一个IO请求,确定该IO请求的条带编号对于所述N的取模运算结果;
公共IO请求处理子模块,用于根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理;
还包括:
IO请求分发模块,用于在所述根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理之后,针对从所述公共IO请求队列中获取的所述IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
4.一种CPU多核的IO请求处理设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现:启动N个IO处理线程,其中,所述N为正整数,且至少为2,每一个IO处理线程对应一个IO请求队列;针对每一个IO处理线程,当该IO处理线程对应的IO请求队列为空时,从公共IO请求队列中获取IO请求集合并进行处理;在处理完所述IO请求集合之后,确定该IO请求队列是否为空;如果否,则处理该IO请求队列中的IO请求;如果是,则执行所述从公共IO请求队列中获取IO请求集合并进行处理;
所述从公共IO请求队列中获取IO请求集合并进行处理,包括:
从公共IO请求队列中获取预定个数的IO请求;
确定获取的各个IO请求相对应的条带编号;
针对每一个IO请求,确定该IO请求的条带编号对于所述N的取模运算结果;
根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理;
在所述根据各个IO请求的取模运算结果,从公共IO请求队列中获取IO请求集合并进行处理之后,还包括:
针对从所述公共IO请求队列中获取的所述IO请求集合之外的其他每个IO请求,将该IO请求置入与该IO请求的取模运算结果相对应的IO请求队列中。
5.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有多线程IO请求处理程序,所述多线程IO请求处理程序被处理器执行时实现如权利要求1或2所述的CPU多核的IO请求处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710827522.2A CN107526551B (zh) | 2017-09-14 | 2017-09-14 | 一种cpu多核的io请求处理方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710827522.2A CN107526551B (zh) | 2017-09-14 | 2017-09-14 | 一种cpu多核的io请求处理方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107526551A CN107526551A (zh) | 2017-12-29 |
CN107526551B true CN107526551B (zh) | 2020-03-31 |
Family
ID=60735906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710827522.2A Active CN107526551B (zh) | 2017-09-14 | 2017-09-14 | 一种cpu多核的io请求处理方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107526551B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108958944A (zh) * | 2018-07-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 一种多核处理系统及其任务分配方法 |
CN109254933A (zh) * | 2018-09-25 | 2019-01-22 | 郑州云海信息技术有限公司 | 一种io请求的处理方法、系统及相关组件 |
CN111414317B (zh) * | 2020-03-06 | 2022-11-25 | 苏州浪潮智能科技有限公司 | 一种io请求处理方法、装置、设备及可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840312B (zh) * | 2009-12-31 | 2012-01-11 | 创新科存储技术有限公司 | 一种用于多核处理器的raid5写数据方法及装置 |
CN103336684B (zh) * | 2013-07-18 | 2016-08-10 | 上海寰创通信科技股份有限公司 | 一种并发处理ap消息的ac及其处理方法 |
CN104484131B (zh) * | 2014-12-04 | 2017-11-14 | 珠海金山网络游戏科技有限公司 | 多磁盘服务器的数据处理装置及对应的处理方法 |
CN105262680A (zh) * | 2015-10-21 | 2016-01-20 | 浪潮(北京)电子信息产业有限公司 | 一种应用于云存储系统的多线程nas网关 |
CN105893126B (zh) * | 2016-03-29 | 2019-06-11 | 华为技术有限公司 | 一种任务调度方法及装置 |
-
2017
- 2017-09-14 CN CN201710827522.2A patent/CN107526551B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107526551A (zh) | 2017-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8739167B2 (en) | Method and device for balancing load of multiprocessor system by sequencing migration priorities based on memory size and calculated execution time | |
CN107526551B (zh) | 一种cpu多核的io请求处理方法、装置及设备 | |
US9529672B2 (en) | ECC word configuration for system-level ECC compatibility | |
CN106569891B (zh) | 一种存储系统中任务调度执行的方法和装置 | |
US9665290B2 (en) | Memory controller for heterogeneous computer | |
CN108205469B (zh) | 一种基于MapReduce的资源分配方法及服务器 | |
US9972376B2 (en) | Memory device for interruptible memory refresh | |
CN112269656B (zh) | 一种基于多核处理器的应用配置方法、装置和系统 | |
EP3295300B1 (en) | System and method for determining concurrency factors for dispatch size of parallel processor kernels | |
US20170315847A1 (en) | Integrated heterogeneous processing units | |
CN110554917A (zh) | 高效遍历较大数据量集合的方法、系统、终端及存储介质 | |
CN106991071B (zh) | 内核调度方法及系统 | |
KR101177059B1 (ko) | 병렬 제어 모듈을 동적으로 할당하는 방법 | |
CN107704568A (zh) | 一种测试数据添加的方法及装置 | |
CN107544845A (zh) | Gpu资源调度方法及装置 | |
US9459930B1 (en) | Distributed complementary workload scheduling | |
US10096353B2 (en) | System and memory controller for interruptible memory refresh | |
US7818747B1 (en) | Cache-aware scheduling for a chip multithreading processor | |
CN106164863A (zh) | 虚拟中央处理单元的寄存器类型感知的调度 | |
US20150052326A1 (en) | User-controlled paging | |
US20120265968A1 (en) | Locating Bottleneck Threads in Multi-Thread Applications | |
WO2016140654A1 (en) | Performance testing using service call executors | |
CN114327854A (zh) | 利用协程处理业务请求的方法及相关设备 | |
US20170220291A1 (en) | Memory Configuration Method and Device | |
CN111949414B (zh) | 一种存储控制器性能优化方法、系统、终端及存储介质 |
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 |