CN102831014B - 一种利用多请求队列提升io并行性和减少小io延迟的方法 - Google Patents
一种利用多请求队列提升io并行性和减少小io延迟的方法 Download PDFInfo
- Publication number
- CN102831014B CN102831014B CN201210268098.XA CN201210268098A CN102831014B CN 102831014 B CN102831014 B CN 102831014B CN 201210268098 A CN201210268098 A CN 201210268098A CN 102831014 B CN102831014 B CN 102831014B
- Authority
- CN
- China
- Prior art keywords
- request
- queue
- little
- queues
- request queue
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种利用多请队列提高IO并行性和减少小IO延迟的方法,包括建立多个请求队列的步骤和利用选择策略使IO请求选择相应的请求队列进行处理步骤,从而实现IO请求并行运行,其中选择策略包括:将每个进程与一个请求队列绑定,以使多个进程上的IO请求平均分配到多个请求队列上处理;将每个CPU与一个请求队列绑定,以使多个CPU上的IO请求平均分配到多个请求队列上处理。本发明还公开了上述方法在FC或FCoE存储系统中的应用。本发明将大量的IO请求根据某种策略分配到多个请求队列中,实现IO请求的并行处理,提升IO请求的处理效率,达到提高IO吞吐率的效果,并可通过给小IO请求分配更多的队列数,提升小IO的实时处理效率,来减少小IO请求处理的延迟。
Description
技术领域
本发明涉及计算机存储器技术领域,具体是一种提升IO并行性和减少小IO延迟的方法。
背景技术
目前随着高性能计算与应用服务的发展,更多的高性能存储区域网络开始利用高速网络与专有协议来构建,这主要包括基于以太网与iSCSI协议的IP-SAN、基于光纤通道和FCP协议的FC-SAN,以及基于以太网和光纤通道的新型FCoE存储区域网络。在FC-SAN和FCoE存储区域网络中,将目标端系统的存储设备通过存储网络协议挂载到发起端系统中,作为一个块设备进行访问,随着存储网络技术的发展,尤其是万兆网络的推出,发起端系统访问目标端设备的带宽也不断提升,而发起端的IO请求的并行处理能力却未得到提升。现在的服务器通常都搭载了多核处理器,发起端系统挂载的目标端块设备只有一个请求队列,所有的IO请求都需要互斥的进入请求队列,完成IO合并、IO调度、请求处理等工作,对于IO次数繁重的存储环境,单个请求队列会成为请求处理的瓶颈,不能高效的利用多核系统的并行处理能力。
在存储区域网络中,小IO请求(一般指小于4KB的请求)通常是实时性要求较高的事务处理请求,而大IO请求通常是数据传输请求。在单个请求队列环境下,没有区分小IO请求和大IO请求机制,所有IO请求以相同的方式进行处理,具有相近的延迟,不能满足实时性要求较高的小IO请求。单个请求队列在大量的小IO请求的环境下,请求队列会成为所有IO请求竞争的对象,IO合并和IO调度的效率都会降低,不能充分利用多核系统,会很大的影响IO处理的并行性,增加小IO请求的处理延迟,不能满足实时性要求。现有满足小IO请求实时性要求的方法主要是通过修改请求队列的调度器,授予小IO请求优先处理权,未能解决单个请求队列是并行处理瓶颈的问题。
发明内容
本发明提供一种利用多请队列提高IO并行性和减少小IO延迟的方法,可以提升IO并行性和减少小IO延迟,满足高负载和实时性要求。
本发明为解决上述技术问题采用的具体方案如下:
一种利用多请求队列提高IO并行性和减少小IO延迟的方法,包括建立多个请求队列的步骤和利用选择策略使IO请求选择相应的请求队列进行处理的步骤,从而实现IO请求并行运行,其特征在于,
所述选择策略包括:
A.将每个进程与一个请求队列绑定,以使多个进程上的IO请求平均分配到多个请求队列上处理;
B.将每个CPU与一个请求队列绑定,以使多个CPU上的IO请求平均的分配到多个请求队列上处理;
其中,先将所述IO请求分为小IO请求和大IO请求,再分别利用选择策略对所述小IO请求和大IO请求进行处理,使各CPU或各进程同时选择各自相应的请求队列并行处理,在开启请求队列的IO合并和IO调度器功能时选择策略A,而关闭请求队列的IO合并和IO调度器功能时选择策略B。
本发明可以使用默认的单请求队列,而不使用或者开启多请求队列。
本发明可以通过命令接口发送配置命令,确定请求队列的个数和选择队列的策略。
本发明中创建多个请求队列优选采用如下具体步骤:
(1.1)为块设备创建一个通用统一命令接口;
(1.2)通过该命令接口发送创建多请求队列的命令;
(1.3)系统内核接收到创建多请求队列命令后,将分配多个请求队列,并使用默认请求队列参数对新分配的请求队列进行初始化,并完成多请求队列向系统内核的注册。
在一个多核系统中,一个块设备在系统内核中只有一个请求队列,为了提升IO请求处理的并行性,在系统内核中给一个块设备创建多个请求队列,并修改IO请求发送到请求队列的入口,增加多请求队列的选择策略,可以根据不同请求队列的选择策略来满足不同存储环境的需求。存储区域网络的块设备通常都是以SCSI磁盘设备的方式挂载,为了实现多请求队列,必须修改SCSI子系统,使其支持多请求队列,提升SCSI子系统的并行性。
本发明还公开了一种利用上述方法在FC或FCoE存储系统中的应用,其具体包括如下步骤:
(1)用户发起读写操作,文件系统生成IO请求,将IO请求转化为通用块层IO请求;
(2)进入多请求队列的入口,依据IO请求大小选择请求队列,将通用块层IO请求发送到选择的请求队列上,并完成IO的合并、调度和初始化;
(3)将经步骤(2)处理后的IO请求发送到SCSI子系统,转化为SCSI请求,并发送到实现存储网络协议的SCSI底层驱动模块;
(4)SCSI底层驱动模块将所述SCSI请求转化为存储网络协议帧,通过存储网络发送目标端处理。
本发明的技术效果是将大量的IO请求根据某种策略分配到多个请求队列中,实现IO请求的并行处理,提升IO请求的处理效率,达到提高IO吞吐率的效果,并可通过给小IO请求分配更多的队列数,提升小IO的处理效率,来减少小IO请求处理的延迟。
附图说明
图1为本发明多请求队列的创建和配置流程;
图2为本发明多请求队列的结构,图中有8个请求队列(可不限于8个);
图3为本发明多请求队列选择策略的结构,其中Q(x)表示请求队列x;
图4为本发明在存储系统中的多请求队列结构;
图5为本发明策略三多请求队列选择流图。
具体实施方式
下面结合附图和具体实施例,对本发明做进一步详细说明。以下实施例仅是说明性的,不构成是对本发明的限定。
本发明是针对多核环境下,通过实现多请求队列和多请求队列的选择策略来提升IO并行处理能力和保证小IO实时性要求的方法。
本发明首先需要建立多请求队列。实现多请求队列,为块设备创建统一的接口,可以为块设备创建enable、mode、bind三个接口。enable为开启和关闭多请求队列的接口,mode为使用请求队列个数的接口,bind为策略选择的接口,可以通过这三个接口修改多请求队列的运行方式。
利用建立的多请求队列,确定选择策略,根据策略选择相应的请求队列进行IO请求的运行。选择策略具体如下:
策略0:使用默认的单个请求队列,不使用多个请求队列。
策略1:开启多个请求队列,并将每个进程pid与一个对应的请求队列Q绑定,绑定条件采用取余运算:Q=pid%nr_q的余数(Q等于pid对nr_q取余,这里pid为进程描述符ID,nr_q为请求队列的个数,Q为待绑定的队列序号),这样使多个进程能够平均地分配到多个请求队列上处理。
在多任务系统中,有大量的用户进程会同时向一个块设备发起IO请求,在开启多个请求队列情况下,通过策略1,可以将大量的用户进程依据进程ID分别绑定到一个请求队列,不同进程的IO请求将会发送到与该进程绑定的请求队列上处理,从而发挥请求队列的作用和实现IO请求并行处理。
进程和一个请求队列绑定是指让一个进程的所用IO请求都分配到一个固定的请求队列上处理,而分配的方式采用取余运算(pid%nr_q)。在请求队列个数确定的情况下,一个进程ID,在该进程的生存期(进程创建到进程销毁)内保持不变,那么pid%nr_q对于一个进程就是一个恒定的值。比如一个进程ID为6(pid=6),当前使用的队列个数为4,那么6%4=2,那么这个进程的请求都会分配到序号为2的队列Q(2)上处理。又比如一个进程ID为7,那么7%4=3,那个该进程的请求都会分配到队列序号为3的队列Q(3)上。
策略1的取余运算也称取摸运算,具体运算符不限于用”%”表示。
策略2:开启多个请求队列,并将每个CPU与一个对应的请求队列Q绑定,绑定条件采用取余运算:Q=cpu%nr_q(Q等于cpu对nr_q取余,这里cpu为IO请求所在的处理器ID,nr_q为请求队列的个数,Q为待绑定的请求队列的序号),可以平均的分配到多个请求队列上处理。
在多核系统中,一个IO请求会在一个CPU上处理,在开启多个请求队列情况下,将CPU与一个请求队列绑定,那么在同一个CPU上处理的请求将会发送到与该CPU绑定的请求队列上处理,这样可以避免IO请求切换到别的CPU,防止在当前CPU上处理的IO请求的Cache缓存失效,从而保证IO性能和实现IO请求的并行处理。
CPU与一个请求队列绑定是指让一个CPU上的所用请求都分配到一个固定的请求队列上进行处理,而分配方式为cpu%nr_q。在一个CPU上所用的请求cpu%nr_q都是一个恒定的值。比如一个IO请求,当前所在的CPU的ID为15,当前使用的队列个数为4,那么15%4=3,那么这个请求会分配到Q(3)上处理,也就是所有在cpu的ID为15上请求,都会被分配到队列序号为3的队列Q(3)上。
策略1有利于同一进程IO请求在请求队列完成IO合并和IO调度,策略2有利于减少IO请求在CPU上切换而产生的Cache失效,但不利于IO合并和IO调度。如果开启请求队列的IO合并和IO调度器功能,则选择策略1,如果关闭请求队列的IO合并和IO调度器功能,则选择策略2。
策略3:开启4个请求队列(0,1,2,3队列),请求队列0,1用来处理小块级别的IO请求(例如块大小为512B~2KB),请求队列2用来处理中等块级别的IO请求(例如块大小4KB~32KB),请求队列3用来处理大块级别的IO请求(例如块大小大于等于64KB的请求),既可以实现IO请求的并行处理,又尤其保证小IO请求处理的实时性要求。
策略4:与策略3的区别是,开启6个请求队列,用请求队列0,1,2,3来处理小IO请求,其它与策略3相同,能更好的保证小IO请求处理的实时性要求。
策略 | enable | mode | bind |
0 | 0 | 0 | 0 |
1 | 1 | 2~8 | 0 |
2 | 1 | 2~8 | 1 |
3 | 1 | 4 | 2 |
4 | 1 | 6 | 4 |
表1:多请求队列选择策略和配置参数对应表
Enable=0/1表示默认单请求队列/开启多请求队列;mode表示使用请求队列个数;bind表示策略,0表示进程与请求队列绑定,1表示CPU与请求队列绑定,2表示使用两个请求队列专门处理小IO请求,4表示使用四个请求队列专门处理小IO请求。
本实施例中策略0是指使用默认的单个请求队列或是在开启多个请求队列时设置队列个数为1,策略0为多请求队列选择策略的一种特殊情况。
策略3和4中的请求队列数量以及mode和bind的具体取值并不限定于上述数值,也可以为其它的,如开启8个请求队列,6个用于小IO请求,其它两个分别用于中IO请求和大IO请求,只要处理小IO请求的队列数大于处理大IO请求的队列数即可。
开启多请求队列和配置策略后,IO请求会按照多请求队列的策略发送到特定的请求队列中,实现IO并行处理。对小IO请求和大IO请求可以进行分队列处理,并且处理小IO请求的队列数大于处理大IO请求的队列数,来保证小IO请求的实时性要求,同时可以满足大IO请求的处理要求。
图4和图5示出了本发明的方法在FC或FCoE存储系统中使用策略3具体应用时,步骤如下:
步骤1:用户发起读写操作,文件系统生成IO请求,将IO请求转化为通用块层IO请求。
步骤2:进入多请求队列的入口,使用策略3(如图5)依据IO请求大小选择请求队列,如果为小IO请求(512B~2KB),则选择请求队列0或1;如果是中IO请求(4KB~32KB),则选择请求队列2;如果是大IO请求(大于等于64KB),则选择请求队列3。将通用块层IO请求发送到选择的请求队列上完成合并,调度,初始化处理等工作。
步骤3:将IO请求发送到SCSI子系统,转化为SCSI请求,并发送到实现存储网络协议的SCSI底层驱动模块。
步骤4:SCSI底层驱动模块将SCSI请求转化为存储网络协议帧,通过存储网络发送目标端处理。
本发明提出的多请求队列和多请求队列的选择策略的方法,可以提升IO并行处理能力,也能保证小IO的实时性要求。本发明对于保证数据传输业务的应用,且实时性要求较高的小IO,效果明显。
以上所述仅为本发明的一种实例而已,并不用以限制本发明,凡在发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (8)
1.一种利用多请求队列提高IO并行性和减少小IO延迟的方法,包括建立多个请求队列的步骤和利用选择策略使IO请求选择相应的请求队列进行处理的步骤,从而实现IO请求并行运行,其特征在于,
所述选择策略包括:
A.将每个进程与一个请求队列绑定,以使多个进程上的IO请求平均分配到多个请求队列上处理;
B.将每个CPU与一个请求队列绑定,以使多个CPU上的IO请求平均的分配到多个请求队列上处理;
其中,先将所述IO请求分为小IO请求和大IO请求,再分别利用选择策略对所述小IO请求和大IO请求进行处理,使各CPU或各进程同时选择各自相应的请求队列并行处理,在开启请求队列的IO合并和IO调度器功能时选择策略A,而关闭请求队列的IO合并和IO调度器功能时选择策略B。
2.根据权利要求1所述的利用多请求队列提高IO并行性和减少小IO延迟的方法,其特征在于,所述请求队列中,用于处理小IO请求的请求队列数大于处理大IO请求的请求队列数。
3.根据权利要求1所述的利用多请求队列提高IO并行性和减少小IO延迟的方法,其特征在于,所述小IO请求指小于4KB的请求。
4.根据权利要求2所述的利用多请求队列提高IO并行性和减少小IO延迟的方法,其特征在于,所述小IO请求指小于4KB的请求。
5.根据权利要求1-4之一所述的利用多请求队列提高IO并行性和减少小IO延迟的方法,其特征在于,所述进程与请求队列的绑定关系通过下式确定:
Q=pid%nr_q
式中,pid为进程描述符ID,nr_q为请求队列的个数,Q为待绑定的请求队列的序号。
6.根据权利要求1-4之一所述的利用多请求队列提高IO并行性和减少小IO延迟的方法,其特征在于,CPU与请求队列的绑定关系通过下式确定:
Q=cpu%nr_q
式中,cpu为IO请求所在的处理器ID,nr_q为请求队列的个数,Q为待绑定的请求队列的序号。
7.根据权利要求1-4之一所述的利用多请求队列提高IO并行性和减少小IO延迟的方法,其特征在于,所述建立多个请求队列的具体步骤:
(1.1)为块设备创建一个通用统一命令接口;
(1.2)通过该命令接口发送创建多请求队列的命令;
(1.3)内核接收到创建多请求队列命令,分配多个请求队列,并对新分配的请求队列进行初始化,完成多请求队列向内核的注册。
8.一种在FC或FCoE存储系统中进行读写操作的方法,其具体包括如下步骤:
(1)用户发起读写操作,FC或FCoE存储系统的文件系统生成IO请求,将IO请求转化为通用块层IO请求;
(2)应用权利要求1-7之一所述的方法选择请求队列,并将通用块层IO请求发送到相应的请求队列上,并完成合并、调度和初始化;
(3)将经步骤(2)处理后的IO请求发送到SCSI子系统,转化为SCSI请求,并发送到实现存储网络协议的SCSI底层驱动模块;
(4)SCSI底层驱动模块将所述SCSI请求转化为存储网络协议帧,通过存储网络发送目标端处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210268098.XA CN102831014B (zh) | 2012-07-30 | 2012-07-30 | 一种利用多请求队列提升io并行性和减少小io延迟的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210268098.XA CN102831014B (zh) | 2012-07-30 | 2012-07-30 | 一种利用多请求队列提升io并行性和减少小io延迟的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102831014A CN102831014A (zh) | 2012-12-19 |
CN102831014B true CN102831014B (zh) | 2016-05-25 |
Family
ID=47334163
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210268098.XA Active CN102831014B (zh) | 2012-07-30 | 2012-07-30 | 一种利用多请求队列提升io并行性和减少小io延迟的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102831014B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045745B (zh) * | 2015-08-31 | 2017-10-27 | 华中科技大学 | 一种FCoE读写处理系统、处理方法及交换ID分配方法 |
CN106598474A (zh) * | 2015-10-16 | 2017-04-26 | 中兴通讯股份有限公司 | Scsi命令的并发处理方法及装置 |
CN106775438B (zh) * | 2015-11-25 | 2019-08-30 | 华中科技大学 | 一种基于固态盘读写特性的i/o调度方法 |
CN106155586B (zh) * | 2016-05-31 | 2019-03-08 | 华为技术有限公司 | 一种存储方法、服务器及存储控制器 |
CN108009006B (zh) * | 2016-11-02 | 2022-02-18 | 华为技术有限公司 | I/o请求的调度方法及装置 |
CN107562383B (zh) * | 2017-09-05 | 2021-06-15 | 联想(北京)有限公司 | 信息处理方法、存储设备及存储介质 |
CN108023936B (zh) * | 2017-11-07 | 2021-02-05 | 深圳市天下房仓科技有限公司 | 一种分布式接口访问控制方法及系统 |
CN107992358B (zh) * | 2017-11-13 | 2020-05-19 | 华中科技大学 | 一种适用于核外图处理系统的异步io执行方法及系统 |
CN108132843B (zh) * | 2017-12-22 | 2021-05-28 | 东软集团股份有限公司 | 多核异构平台下信息交互的内存申请方法、装置及设备 |
CN108536544B (zh) * | 2018-03-21 | 2021-06-25 | 微梦创科网络科技(中国)有限公司 | 基于数据库消息队列的消费方法、装置、服务器和介质 |
CN108536394A (zh) * | 2018-03-31 | 2018-09-14 | 北京联想核芯科技有限公司 | 命令分配方法、装置、设备及介质 |
CN109254933A (zh) * | 2018-09-25 | 2019-01-22 | 郑州云海信息技术有限公司 | 一种io请求的处理方法、系统及相关组件 |
CN110275799B (zh) * | 2019-06-10 | 2020-02-07 | 必成汇(成都)科技有限公司 | 账务系统不停机日切点快照余额的方法 |
CN112988080B (zh) * | 2021-05-10 | 2021-07-30 | 鹏城实验室 | 多数据页同时写入方法、3d闪存装置及计算机存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1633131A (zh) * | 2005-01-14 | 2005-06-29 | 清华大学 | 一种iSCSI存储系统的实现方法 |
CN101634974A (zh) * | 2009-08-26 | 2010-01-27 | 成都市华为赛门铁克科技有限公司 | 一种多中断类型的处理方法、装置和系统 |
-
2012
- 2012-07-30 CN CN201210268098.XA patent/CN102831014B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1633131A (zh) * | 2005-01-14 | 2005-06-29 | 清华大学 | 一种iSCSI存储系统的实现方法 |
CN101634974A (zh) * | 2009-08-26 | 2010-01-27 | 成都市华为赛门铁克科技有限公司 | 一种多中断类型的处理方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102831014A (zh) | 2012-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102831014B (zh) | 一种利用多请求队列提升io并行性和减少小io延迟的方法 | |
US20210019270A1 (en) | Configuration interface to offload capabilities to a network interface | |
TWI694339B (zh) | 一種區塊鏈共識方法、設備及系統 | |
US10452316B2 (en) | Switched direct attached shared storage architecture | |
US9558351B2 (en) | Processing structured and unstructured data using offload processors | |
US9250954B2 (en) | Offload processor modules for connection to system memory, and corresponding methods and systems | |
CN104301430B (zh) | 软件定义存储系统、方法及其集中控制设备 | |
Min et al. | Gimbal: enabling multi-tenant storage disaggregation on SmartNIC JBOFs | |
TW201214284A (en) | Virtualization and dynamic resource allocation aware storage level reordering | |
WO2016196766A2 (en) | Enabling use of non-volatile media - express (nvme) over a network | |
US20220247696A1 (en) | Reliable transport offloaded to network devices | |
CN106293944A (zh) | 虚拟化多核环境下基于非一致性i/o访问系统和优化方法 | |
WO2014183531A1 (zh) | 一种分配远程内存的方法及装置 | |
US20210326221A1 (en) | Network interface device management of service execution failover | |
CN103297499A (zh) | 一种基于云平台的调度方法及系统 | |
Xu et al. | Rethink the storage of virtual machine images in clouds | |
US20210329354A1 (en) | Telemetry collection technologies | |
US11880710B2 (en) | Adaptive data shipment based on burden functions | |
CN113419867A (zh) | 一种面向边云协同计算环境中节能的服务供应方法 | |
US20200133367A1 (en) | Power management for workload offload engines | |
CN103176850A (zh) | 一种基于负载均衡的电力系统网络集群任务分配方法 | |
EP4020208A1 (en) | Memory pool data placement technologies | |
CN104125292A (zh) | 一种数据处理装置、云服务器及其使用方法 | |
Quan et al. | Energy usage and carbon emission optimization mechanism for federated data centers | |
Wen et al. | Load balancing consideration of both transmission and process responding time for multi-task assignment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |