CN115314439B - 数据存储io请求的流控方法和相关装置 - Google Patents
数据存储io请求的流控方法和相关装置 Download PDFInfo
- Publication number
- CN115314439B CN115314439B CN202210962809.7A CN202210962809A CN115314439B CN 115314439 B CN115314439 B CN 115314439B CN 202210962809 A CN202210962809 A CN 202210962809A CN 115314439 B CN115314439 B CN 115314439B
- Authority
- CN
- China
- Prior art keywords
- flow control
- end block
- block device
- request
- requests
- 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
- 238000013500 data storage Methods 0.000 title claims abstract description 91
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000009825 accumulation Methods 0.000 claims description 59
- 238000012545 processing Methods 0.000 claims description 28
- 230000004044 response Effects 0.000 claims description 19
- 230000001186 cumulative effect Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 10
- 230000008859 change Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 14
- 238000004891 communication Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 239000002184 metal Substances 0.000 description 3
- 230000035945 sensitivity Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种数据存储IO请求的流控方法和相关装置,涉及数据存储领域。该方法包括:通过在当前流控周期内,针对共享请求队列的各前端块设备,分别计算用于衡量该前端块设备对应的后端存储服务状态的指标数据,并根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对前端块设备发往请求队列的数据存储IO请求进行流控。本发明采用软硬件协同流控的方法,可实现在多个前端块设备共享资源的场景下,对每个前端块设备进行独立流控,避免了前端块设备存储访问错误以及不同服务能力的存储设备共存时性能相互影响,有效提升了智能网卡的整机存储IO性能和单个前端块设备的存储IO性能。
Description
技术领域
本发明涉及数据存储领域,具体而言,涉及一种数据存储IO请求的流控方法和相关装置。
背景技术
云数据中心的IT基础设施,如计算服务器、存储服务器,通过给客户提供云端的算力和存储资源来实现云计算、云存储和云服务。而随着数据中心的业务网速率从10GE升级到25GE、100GE,高带宽带来的网络数据处理会消耗服务器大量的计算资源,为提升服务器的有效算力和业务性能,可使用智能网卡(Smart NIC)来进行网络卸载、存储卸载等处理,以释放出服务器的CPU(Central Processing Unit,中央处理器)资源。
目前的智能网卡存储卸载方案中,当前端请求速率超出后端存储服务能力,且这种不平衡持续特定时间后,会造成前端请求超时,从而导致前端存储访问错误。常见的处理方法是,硬件设置静态的流控门限,当达到流控门限时,不再接收前端IO请求,这样就不会再有存储访问错误。
然而,在多个前端块设备共享资源的场景下,由于各前端块设备可能对应不同类型、不同性能的后端存储,如果使用统一的流控门限,则可能导致存储访问错误或者不同服务能力的存储设备共存时性能相互影响,例如,低速存储设备拉低整体性能,尤其是拉低高速存储设备的服务能力,导致高性能存储的IO性能下降。
发明内容
有鉴于此,本发明的目的在于提供一种数据存储IO请求的流控方法和相关装置,以解决多个前端块设备共享资源的场景下,容易出现存储访问错误或者不同服务能力的存储设备共存时性能相互影响的问题。
为了实现上述目的,本发明的技术方案如下:
第一方面,本发明提供一种数据存储IO请求的流控方法,应用于智能网卡,所述智能网卡中设置有请求队列,所述请求队列由一个或多个前端块设备共享,用于存放所述前端块设备发送的数据存储IO请求,每个所述前端块设备对应一个子流控开关;所述方法包括:
在当前流控周期内,针对共享所述请求队列的各前端块设备,分别计算用于衡量所述前端块设备对应的后端存储服务状态的指标数据;
根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对所述前端块设备发往所述请求队列的数据存储IO请求进行流控。
在可选的实施方式中,所述指标数据包括当前流控周期的IO请求数、未完成IO请求数、未完成IO请求累积速率、未完成IO请求累积比例以及拥塞指数;所述分别计算用于衡量所述前端块设备对应的后端存储服务状态的指标数据,包括:
根据所述前端块设备在当前流控周期和上个流控周期的IO请求累计总数,计算所述前端块设备在当前流控周期的IO请求数;所述IO请求累计总数由所述智能网卡在执行IO请求处理任务时统计得到;
根据所述前端块设备在当前流控周期的IO请求累计总数和IO响应累计总数,计算所述前端块设备在当前流控周期的未完成IO请求数;所述IO响应累计总数由所述智能网卡在执行IO响应处理任务时统计得到;
根据所述前端块设备在当前流控周期和上个流控周期的未完成IO请求数,得到所述前端块设备在当前流控周期的未完成IO请求累积速率;
根据所述前端块设备在当前流控周期的未完成IO请求数、当前流控周期的IO请求数以及上个流控周期的未完成IO请求数,计算所述前端块设备在当前流控周期的未完成IO请求累积比例;
根据最近预设数目个流控周期的未完成IO请求累积比例,计算拥塞指数。
在可选的实施方式中,所述根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,包括:
根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,设置各前端块设备的流控标志;所述流控标志表征是否需要对所述前端块设备发送的数据存储IO请求进行流控;
根据各前端块设备的流控标志的变化情况,启动或停止各前端块设备对应的子流控开关。
在可选的实施方式中,所述根据各前端块设备在当前流控周期的未完成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示出了现有的智能网卡存储卸载的一种示意图;
图2示出了适用于本发明实施例的一种应用场景的示意图;
图3示出了本发明实施例提供的数据存储IO请求的流控方法的一种流程示意图;
图4示出了本发明实施例提供的数据存储IO请求的流控方法的另一种流程示意图;
图5示出了适用于本发明实施例的另一种应用场景的示意图;
图6示出了本发明实施例提供的数据存储IO请求的流控装置的一种功能模块图;
图7示出了本发明实施例提供的智能网卡的一种方框示意图。
图标:10-服务器系统;20-云存储系统;100-智能网卡;200-服务器本体;600-数据存储IO请求的流控装置;610-状态检测模块;620-请求流控模块;110-存储器;120-处理器;130-通信模块。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
请参照图1,为现有的智能网卡存储卸载的一种示意图。在此场景中,前端宿主机(HOST)或裸金属服务器的块设备驱动(blk driver)不能直接感知后端存储服务(blkstore)的工作状态,导致前端请求速率可能超出后端存储服务能力,当这种不平衡持续特定时间后,会造成前端请求超时,从而导致前端存储访问错误。常见的处理方法是,硬件设置静态的流控门限,当达到流控门限时,不再接收前端IO请求,这样就不会再有存储访问错误,但又会降低高性能存储的IO卸载性能。
如图1所示,blk1、blk2、blkn是HOST或裸金属服务器中的块设备,blk1对应的后端存储块设备是高速存储,blk2对应的后端存储块设备是低速存储。FPGA(FieldProgrammable Gate Array,现场可编程逻辑门阵列)不能区分后端是高速存储还是低速存储,使用统一的流控门限值。如果硬件流控门限值是以blk1的最高性能为基准设置门限,则当blk2的IO请求速率持续大于blk2的后端存储的服务能力时,就会使blk2出现存储访问错误的问题,而如果以blk2的后端服务能力来设置流控门限值,则会拉低高性能的blk1的IO性能。
另外,当blk1,blk2等多个块设备的IO请求需要共享后端存储服务资源,如FPGA的东侧队列(ETQ)、CPU卸载引擎系统(CPU OE)的处理资源或网络通信等资源时,使用FIFO(First Input First Output,先入先出)的策略,高性能存储的IO请求会被其它低速存储的IO请求所阻塞和延迟,导致高性能存储的IO性能下降。
为了解决上述问题,本发明实施例提出了一种数据存储IO请求的流控方法和相关装置,其通过检测每个前端块设备的后端存储服务状态,来对每个前端块设备发送的数据存储IO请求进行独立流控,从而避免了前端块设备存储访问错误以及高性能存储的IO性能下降的情况,有效提升了智能网卡的整机存储IO性能和单个前端块设备的存储IO性能;并且动态地根据每个前端块设备的存储服务能力,精细化流控,使各个前端块设备的数据存储IO请求可公平地使用共享资源,从而避免了不同服务能力的存储设备共存时的相互影响,如低速存储设备拉低整体性能,尤其是拉低高速存储设备的服务能力。
下面,先对适用于本发明实施例的一种应用场景进行说明。
请参照图2,为适用于本发明实施例的一种应用场景的示意图。如图2所示,服务器系统10包括智能网卡100和服务器本体200,智能网卡100和服务器本体200通过PCIE(Peripheral Component Interface Extend,高速串行计算机扩展总线标准)总线通信连接,智能网卡100可以通过网络与云存储系统20通信连接。
其中,智能网卡100可以采用多核CPU架构、ASIC(Application SpecificIntegrated Circuit,专用集成电路)架构、FPGA+多核CPU的架构,本实施例对此不进行限制。
服务器本体200可以是HOST或裸金属服务器等设备,其使用智能网卡100来进行网络卸载、存储卸载等处理,将数据存储到云存储系统20中。
云存储系统20中可以包括多个具备存储功能的存储设备,用于给前端服务器系统10提供存储服务。
下面,基于图2所示的应用场景,对本发明实施例提供的数据存储IO请求的流控方法进行详细说明。请参照图3,为本发明实施例提供的数据存储IO请求的流控方法的一种流程示意图。需要说明的是,本发明实施例的数据存储IO请求的流控方法并不以图3以及以下的具体顺序为限制,应当理解,在其他实施例中,本发明实施例的数据存储IO请求的流控方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。该数据存储IO请求的流控方法可以应用于上述的智能网卡100,下面将对图3所示的具体流程进行详细阐述。
步骤S301,在当前流控周期内,针对共享请求队列的各前端块设备,分别计算用于衡量前端块设备对应的后端存储服务状态的指标数据。
在本实施例中,智能网卡100中预先设置有一个或者多个请求队列,该请求队列可由服务器本体200中的一个或多个前端块设备共享,用于存放前端块设备发送的数据存储IO请求。其中,该数据存储IO请求可以是数据读取请求或者数据写入请求。
在本实施例中,流控周期可以根据调控精度和调控灵敏度来设置和调整,可取驱动轮询的次数或定时器的时间周期等。例如,一个流控周期可以是以1微秒倍数为单位的固定时间间隔,或以轮询次数为单位的非固定时间间隔的周期。
智能网卡100通过判断是否达到流控周期,当到达时,进入流控处理流程,从而在每个流控周期内,执行流控处理任务。具体的,在执行流控处理任务时,针对共享请求队列的各前端块设备,需要依次计算用于衡量前端块设备对应的后端存储服务状态的指标数据,以实现对各前端块设备的后端存储服务状态的检测。
步骤S302,根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对前端块设备发往请求队列的数据存储IO请求进行流控。
在本实施例中,由于指标数据可以衡量前端块设备的后端存储服务状态,故基于各前端块设备对应的指标数据,可以判断出各前端块设备对应的前端请求速率是否超出后端存储服务能力,进而判断是否需要对前端块设备的数据存储IO请求进行流控;如果需要流控,则启动该前端块设备对应的子流控开关,该前端块设备的数据存储IO请求被流控住,不能发送到后端存储;如果不需要进行流控,则停止该前端块设备对应的子流控开关。通过对各前端块设备对应的子流控开关的启停控制,实现对前端块设备发往请求队列的数据存储IO请求进行流控。
可见,本发明实施例提供的数据存储IO请求的流控方法,通过在当前流控周期内,针对共享请求队列的各前端块设备,分别计算用于衡量该前端块设备对应的后端存储服务状态的指标数据,并根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对前端块设备发往请求队列的数据存储IO请求进行流控。本发明实施例采用软硬件协同流控的方法,实现了在多个前端块设备共享资源的场景下,对每个前端块设备进行独立流控,避免了前端块设备存储访问错误以及不同服务能力的存储设备共存时性能相互影响,有效提升了智能网卡的整机存储IO性能和单个前端块设备的存储IO性能。
可选地,上述的指标数据可以包括如下指标项:当前流控周期的IO请求数、未完成IO请求数、未完成IO请求累积速率、未完成IO请求累积比例以及拥塞指数,通过这些指标项来衡量前端块设备的后端存储服务状态。基于此,上述步骤S301中分别计算用于衡量前端块设备对应的后端存储服务状态的指标数据,可以包括:
根据前端块设备在当前流控周期和上个流控周期的IO请求累计总数,计算前端块设备在当前流控周期的IO请求数;IO请求累计总数由智能网卡在执行IO请求处理任务时统计得到;
根据前端块设备在当前流控周期的IO请求累计总数和IO响应累计总数,计算前端块设备在当前流控周期的未完成IO请求数;IO响应累计总数由智能网卡在执行IO响应处理任务时统计得到;
根据前端块设备在当前流控周期和上个流控周期的未完成IO请求数,得到前端块设备在当前流控周期的未完成IO请求累积速率;
根据前端块设备在当前流控周期的未完成IO请求数、当前流控周期的IO请求数以及上个流控周期的未完成IO请求数,计算前端块设备在当前流控周期的未完成IO请求累积比例;
根据最近预设数目个流控周期的未完成IO请求累积比例,计算拥塞指数。
例如,前端块设备在当前流控周期的IO请求数req_num=当前流控周期的IO请求累计总数req_total-上个流控周期的IO请求累计总数req_total_last;
前端块设备在当前流控周期的未完成IO请求数req_rest=当前流控周期的IO请求累计总数req_total-当前流控周期的IO响应累计总数response_total;
前端块设备在当前流控周期的未完成IO请求累积速率accu_rate=当前流控周期的未完成IO请求数req_rest-上个流控周期的未完成IO请求数req_rest_last。其中,未完成IO请求累积速率可用于衡量前端块设备的数据存储IO请求是否得到及时的响应,例如,当accu_rate>0,表明数据存储IO请求没有得到及时响应,该前端块设备的后端存储服务状态不佳。
前端块设备在当前流控周期的未完成IO请求累积比例accu_percent=当前流控周期的未完成IO请求数req_rest/(当前流控周期的IO请求数req_num+上个流控周期的未完成IO请求数req_rest_last)。其中,如果req_num+req_rest_last=0,则确定accu_percent=0。未完成IO请求累积比例可用于衡量数据存储IO请求累积的快慢程度。
拥塞指数index=最近预设数目(N)个流控周期的未完成IO请求累积比例的均值;通过取最近N个流控周期的accu_percent的均值作为指标,可以平滑波动,避免因指标对服务状态的波动太敏感而引起不必要的启停。其中,N的取值可根据调控精度和调控灵敏度来设置和调整。
可选地,请参照图4,基于上述各项指标,步骤S302中根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,可以包括:
子步骤S3021,根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,设置各前端块设备的流控标志;流控标志表征是否需要对前端块设备发送的数据存储IO请求进行流控。
子步骤S3022,根据各前端块设备的流控标志的变化情况,启动或停止各前端块设备对应的子流控开关。
在本实施例中,智能网卡100根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,为各前端块设备设置流控标志,通过该流控标志指示是否需要对前端块设备发送的数据存储IO请求进行流控。如果前端块设备的流控标志在设置前后没有发生变化,则保持子流控开关的状态不变;如果前端块设备的流控标志在设置前后由指示需要流控变为指示不需要流控,则停止该前端块设备对应的子流控开关;如果前端块设备的流控标志在设置前后由指示不需要流控变为指示需要流控,则启动该前端块设备对应的子流控开关。
可选地,智能网卡根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,可按照如下方式设置各前端块设备的流控标志,即上述子步骤S3021包括:
若前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数符合预设条件,则将前端块设备的流控标志设置为第一流控标志;第一流控标志表征需要对前端块设备发送的数据存储IO请求进行流控;
针对在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数不符合预设条件的各前端块设备,根据各前端块设备在当前流控周期的未完成IO请求累积速率,为各前端块设备分配服务配额;
按照拥塞指数从小到大的顺序,累加各前端块设备分配到的服务配额;在累加目标前端块设备分配到的服务配额后,若所得到的服务配额累加值大于当前总配额,则将目标前端块设备以及排序位于目标前端块设备之后的前端块设备的流控标志设置为第一流控标志,将排序位于目标前端块设备之前的前端块设备的流控标志设置为第二流控标志;第二流控标志表征不需要对前端块设备发送的数据存储IO请求进行流控。
在本实施例中,可设置预设条件为req_rest>X且accu_rate>Y且index>Z;其中,比较基准值X,Y,Z可根据调控精度和调控灵敏度来调整。
也即是说,针对共享请求队列的各前端块设备,当该前端块设备的当前流控周期的未完成IO请求数req_rest、未完成IO请求累积速率accu_rate和拥塞指数index满足req_rest>X且accu_rate>Y且index>Z,则将该前端块设备的流控标志设置为第一流控标志,并设置其服务配额为0。例如,该第一流控标志可以为1,表征需要对前端块设备发送的数据存储IO请求进行流控。
上述预设条件用于表示该前端块设备在快速持续地累积数据存储IO请求,并且累积达到一定阈值,需要进行流控,说明此前端块设备快速累积的程度较严重,其后端存储服务跟不上数据存储IO请求接收的速率,存储服务可能处于拥塞状态,需要暂停数据存储IO请求的接收,故而设置流控标志为1。
对于未完成IO请求数、未完成IO请求累积速率和拥塞指数不符合预设条件的这些前端块设备,可根据各前端块设备在当前流控周期的未完成IO请求累积速率,为各前端块设备分配服务配额。
具体地,若前端块设备在当前流控周期的未完成IO请求累积速率小于或等于预设值,则按照第一预设比例和前端块设备在当前流控周期的IO请求数为前端块设备分配服务配额;若前端块设备在当前流控周期的未完成IO请求累积速率大于预设值,则按照第二预设比例和前端块设备在当前流控周期的IO请求数为前端块设备分配服务配额;第一预设比例大于第二预设比例。
例如,可设置第一预设比例为1,第二预设比例为1/2,预设值为0,则如果前端块设备在当前流控周期的accu_rate≤0,则可分配该前端块设备的服务配额quota=req_num;如果前端块设备在当前流控周期的accu_rate>0,则可分配该前端块设备的服务配额quota=req_num/2。当然,在实际应用中,第一预设比例、第二预设比例以及该预设值的取值可不限定于此。
在为不符合预设条件的各前端块设备初步分配好服务配额后,可按照拥塞指数index从小到大的顺序,累加各个前端块设备分配到的服务配额,直到获得的服务配额累加值大于当前总配额。也即是说,当累加到目标前端块设备分配到的服务配额后,如果满足服务配额累加值大于当前总配额,则将该目标前端块设备以及按照拥塞指数排序位于该目标前端块设备之后的前端块设备的流控标志设置为第一流控标志,并设置其服务配额为0;排序位于目标前端块设备之前的前端块设备的流控标志设置为第二流控标志。例如,该第二流控标志可以为0,表征不需要对前端块设备发送的数据存储IO请求进行流控。
在另一种实现方式中,可先针对流控标志设置为第一流控标志的前端块设备,设置其index=100000,服务配额quota=0;如此设置主要是为了方便后续统一排序和分配计算。将共享请求队列的所有前端块设备,按照index由小到大排序并分配各个前端块设的quota,以及通过服务配额的累加,完成流控标志的设置,具体过程可参考前述内容,此处不再赘述。
可以理解,对于服务配额最终设置为0的这些前端块设备,拥塞都较严重,待本次被流控后,因其变为不活跃的前端块设备,或者其对应的拥塞指数被降低,从而在后面的流控周期中,会优先得到服务,从而实现公平调度。
可见,本发明实施例提供的数据存储IO请求的流控方法,通过动态地根据每个前端块设备的存储服务能力,精细化流控,使各个前端块设备的数据存储IO请求可公平地使用共享资源,从而避免了不同服务能力的存储设备共存时的相互影响,如低速存储设备拉低整体性能,尤其是拉低高速存储设备的服务能力。
可选地,由于在设置各前端块设备的流控标志后,各前端块设备的流控标志要么为第一流控标志,要么为第二流控标志,在此基础上,上述子步骤S3022可以包括:
若前端块设备的流控标志从第二流控标志变为第一流控标志,则启动前端块设备对应的子流控开关;若前端块设备的流控标志从第一流控标志变为第二流控标志,则停止前端块设备对应的子流控开关。
以第一流控标志为1、第二流控标志为0为例,针对每个前端块设备,如果该前端块设备的流控标志从0变为1,则启动该前端块设备对应的子流控开关。如果该前端块设备的流控标志从1变为0,则停止该前端块设备对应的子流控开关。
可选地,为了实现对请求队列所服务的所有前端块设备进行流控,还可在智能网卡100中设置请求队列对应的总流控开关,各子流控开关均与总流控开关相连;智能网卡100通过启动或停止总流控开关,可对共享请求队列的所有前端块设备发往请求队列的数据存储IO请求进行流控,并在启动总流控开关时,累计总流控开关的启动次数。
也即是说,智能网卡100可以自主检测请求队列的队列深度,其中,队列深度可以理解为队列中未完成的IO请求数目;通过判断队列深度是否达到高/低水线状态,来启动或者停止总流控开关,从而停止/启动请求队列对应的所有前端块设备的数据存储IO请求的处理;在启动总流控开关时,累计该总流控开关的启动次数。
在实际应用中,每个请求队列所对应的当前总配额的值,可以进行动态地调整,达到最优的效果。基于此,本发明实施例提供的数据存储IO请求的流控方法还可以包括:
在当前配额调整周期内,获取总流控开关的累计启动次数;
根据当前配额调整周期和上个配额调整周期的总流控开关的累计启动次数,计算当前配额调整周期内的总流控开关的启动次数;
若当前配额调整周期内的总流控开关的启动次数大于预设次数,则将当前总配额缩小第一固定比例;
若共享请求队列的各前端块设备中,有超过第二固定比例的前端块设备对应的子流控开关处于启动状态,则将当前总配额放大第三固定比例。
其中,配额调整周期可以根据流控周期的取值设置,例如,可以取M个流控周期作为一个配额调整周期,M的取值根据实际需求设置。
预设次数、第一固定比例、第二固定比例以及第三固定比例的取值可以根据实现需求设置。以预设次数为0,第一固定比例为10%,第二固定比例为70%,第三固定比例为5%为例,智能网卡100在配额调整周期达到时,进入总配额的调整流程,具体如下:
读取并记录总流控开关的累计启动次数fc_etq_times,计算当前配额调整周期内的总流控开关的启动次数fc_etq_times_diff=当前配额调整周期的总流控开关的累计启动次数fc_etq_times-上个配额调整周期的总流控开关的累计启动次数fc_etq_times_last,如果fc_etq_times_diff>0,则将当前总配额quota_total缩小10%;如果共享请求队列的各前端块设备对应的子流控开关中,有超过70%的子流控开关处于启动状态,即有超过70%的前端块设备需要被流控住,则将当前总配额quota_total扩大5%;否则,不调整当前总配额quota_total。
下面,以一个具体的应用场景为例,对本发明实施例提供的数据存储IO请求的流控方法进行举例说明。请参照图5,智能网卡100包括FPGA和CPU,FPGA实现存储卸载的硬件逻辑,CPU中运行的CPU OE系统实现软件逻辑,通过软硬件协同进行数据存储IO请求的流控。
在硬件上,通过FPGA实现如下功能:1、根据前端blk的PCI(Peripheral ComponentInterconnect,外部设备互联)地址,将前端blk的数据存储IO请求映射到对应的ETQ Rx队列(请求队列);2、自主检测请ETQ Rx队列的队列深度,根据队列深度是否达到高/低水线状态,启动/停止ETQ Rx队列的总流控开关fc-etq,用于停止/启动ETQ Rx队列对应的所有前端blk的数据存储IO请求的处理;在启动fc-etq时,累计fc-etq的启动次数,获得fc-etq的累计启动次数fc_etq_times;3、为每一个前端blk提供独立的子流控开关(fc-sw),并且提供控制接口(fc_api),由软件来启动/停止此子流控开关;当子流控开关启动时,服务器本体200上对应的前端blk的数据存储IO请求被流控住,不能发送到后端存储。
在软件上,CPU OE系统检测后端存储服务状态,并根据后端存储服务状态和存储服务公平调度的结果,调用fc_api触发fc-sw的启动或停止。
假设blk1为高速块设备,blk2为低速块设备,blkn为通用的块设备,该三个前端blk共用一个ETQ Rx队列。其中blk1、blk2为活跃的块设备,而blkn暂时无数据存储IO请求,处于不活跃状态。前端blk1对应的子流控开关为fc-sw1,前端blk2对应的子流控开关为fc-sw2,fc-sw1、fc-sw2均与ETQ Rx队列对应的总流控开关fc-etq相连。
CPU OE系统中的存储驱动,采用轮询加异步方式处理数据存储IO请求。CPU OE系统独立调度IO请求处理任务和IO响应处理任务。
其中,IO请求处理任务的执行过程如下:1、批量地从ETQ Rx队列取出数据存储IO请求(io_req);2、循环处理取出的每一个io_req:首先根据此io_req所属的前端blk,累计此前端blk对应的IO请求总数(req_total),然后处理io_req,将处理后的io_req发往后端存储服务器;3、判断是否达到流控周期(fc_period),如果达到,则进入流控处理流程。如果fc_period的数量级在微秒us以上,则可以将“流控处理”作为一个独立的任务,由CPU OE系统直接调度,不再作为IO请求处理的子流程。
IO响应处理任务的执行过程如下:1、收到对io_req的IO响应(io_response)后,被异步地唤醒;2、累计此io_response所属前端blk的IO响应总数(response_total);3、处理io_response,将处理后的io_response发往服务器本体200;
流控处理的具体流程如下:
首先,依次对ETQ Rx队列的blk1、blk2、blkn分别计算如下的指标项来衡量其后端存储服务状态。下面以blk1为例说明各个指标项的计算:
当前流控周期的IO请求数req_num=当前流控周期的IO请求累计总数req_total-上个流控周期的IO请求累计总数req_total_last;此项数据可用作公平调度时分配服务配额quota的输入参数;
当前流控周期的未完成IO请求数req_rest=req_total-response_total;
当前流控周期的未完成IO请求累积速率accu_rate=当前流控周期的req_rest-上个流控周期的req_rest_last;
当前流控周期的未完成IO请求累积比例accu_percent=当前流控周期的req_rest/(当前流控周期的req_num+上个流控周期的req_rest_last);如果req_num+req_rest_last=0,则accu_percent=0;
拥塞指数index=最近N个fc_period的accu_percent的均值;
接下来,对共享ETQ Rx队列的各个前端blk进行服务配额以及流控标志的设置,以实现公平调度,具体地:
如果req_rest>X且accu_rate>Y且index>Z,则设置流控标志fc_flag=1。
假设总配额为quota_total,当前端blk的fc_flag=1,则设置其index=100000,服务配额quota=0;
对共享ETQ Rx队列的各个前端blk,按index的大小,由小到大,排序并分配各个前端blk的quota。如果前端blk的accu_rate≤0,则其quota=req_num,否则其quota=req_num/2;
按index从小到大的顺序,累加各个前端blk的quota到plan_quota_sum中,当plan_quota_sum>quota_total时,将对应的目标前端blk及index排序位于该目标前端blk之后的其它前端blk的fc_flag设置为1,设置其quota=0;将index排序位于该目标前端blk之前的其它前端blk的fc_flag设置为0。
其中,总配额quota_total的值可按照配额调整周期(quota_adjust_period)进行调整,在配额调整周期达到时,读取并记录总流控开关的累计启动次数fc_etq_times,计算当前配额调整周期内的总流控开关的启动次数fc_etq_times_diff=当前配额调整周期的fc_etq_times-上个配额调整周期的fc_etq_times_last,如果fc_etq_times_diff>0,则缩小总配额quota_total一个固定比例如10%;如果共享请求队列的各前端blk中,有超过70%的前端blk需要被流控住,则扩大总配额quota_total一个固定比例如5%。
最后,根据各前端blk的流控标志的变化情况,对各前端blk的数据存储IO请求进行流控:如果前端blk的fc_flag从0变为1,则调用fc_api,启动该前端blk的fc-sw;如果前端blk的fc_flag从1变为0,则调用fc_api,停止该前端blk的fc-sw。
为了执行上述实施例及各个可能的方式中的相应步骤,下面给出一种数据存储IO请求的流控装置的实现方式。请参阅图6,为本发明实施例提供的数据存储IO请求的流控装置600的一种功能模块图。需要说明的是,本实施例所提供的数据存储IO请求的流控装置600,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及之处,可参考上述的实施例中相应内容。该数据存储IO请求的流控装置600包括:状态检测模块610和请求流控模块620。
该状态检测模块610,用于在当前流控周期内,针对共享请求队列的各前端块设备,分别计算用于衡量前端块设备对应的后端存储服务状态的指标数据。
可以理解,该状态检测模块610可以执行上述步骤S301。
该请求流控模块620,用于根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对前端块设备发往请求队列的数据存储IO请求进行流控。
可以理解,该请求流控模块620可以执行上述步骤S302。
可选地,指标数据包括当前流控周期的IO请求数、未完成IO请求数、未完成IO请求累积速率、未完成IO请求累积比例以及拥塞指数。
该状态检测模块610用于根据前端块设备在当前流控周期和上个流控周期的IO请求累计总数,计算前端块设备在当前流控周期的IO请求数;IO请求累计总数由智能网卡在执行IO请求处理任务时统计得到;根据前端块设备在当前流控周期的IO请求累计总数和IO响应累计总数,计算前端块设备在当前流控周期的未完成IO请求数;IO响应累计总数由智能网卡在执行IO响应处理任务时统计得到;根据前端块设备在当前流控周期和上个流控周期的未完成IO请求数,得到前端块设备在当前流控周期的未完成IO请求累积速率;根据前端块设备在当前流控周期的未完成IO请求数、当前流控周期的IO请求数以及上个流控周期的未完成IO请求数,计算前端块设备在当前流控周期的未完成IO请求累积比例;根据最近预设数目个流控周期的未完成IO请求累积比例,计算拥塞指数。
可选地,该请求流控模块620用于根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,设置各前端块设备的流控标志;流控标志表征是否需要对前端块设备发送的数据存储IO请求进行流控;根据各前端块设备的流控标志的变化情况,启动或停止各前端块设备对应的子流控开关。
可以理解,该请求流控模块620还可以执行上述子步骤S3021、S3022。
可选地,该请求流控模块620用于若前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数符合预设条件,则将前端块设备的流控标志设置为第一流控标志;第一流控标志表征需要对前端块设备发送的数据存储IO请求进行流控;针对在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数不符合预设条件的各前端块设备,根据各前端块设备在当前流控周期的未完成IO请求累积速率,为各前端块设备分配服务配额;按照拥塞指数从小到大的顺序,累加各前端块设备分配到的服务配额;在累加目标前端块设备分配到的服务配额后,若所得到的服务配额累加值大于当前总配额,则将目标前端块设备以及排序位于目标前端块设备之后的前端块设备的流控标志设置为第一流控标志,将排序位于目标前端块设备之前的前端块设备的流控标志设置为第二流控标志;第二流控标志表征不需要对前端块设备发送的数据存储IO请求进行流控。
可选地,该请求流控模块620用于若前端块设备在当前流控周期的未完成IO请求累积速率小于或等于预设值,则按照第一预设比例和前端块设备在当前流控周期的IO请求数为前端块设备分配服务配额;若前端块设备在当前流控周期的未完成IO请求累积速率大于预设值,则按照第二预设比例和前端块设备在当前流控周期的IO请求数为前端块设备分配服务配额;第一预设比例大于第二预设比例。
可选地,智能网卡中还设置有请求队列对应的总流控开关,各子流控开关均与总流控开关相连;智能网卡通过启动或停止总流控开关,对共享请求队列的所有前端块设备发往请求队列的数据存储IO请求进行流控,并在启动总流控开关时,累计总流控开关的启动次数。
该请求流控模块620还可用于在当前配额调整周期内,获取总流控开关的累计启动次数;根据当前配额调整周期和上个配额调整周期的总流控开关的累计启动次数,计算当前配额调整周期内的总流控开关的启动次数;若当前配额调整周期内的总流控开关的启动次数大于预设次数,则将当前总配额缩小第一固定比例;若共享请求队列的各前端块设备中,有超过第二固定比例的前端块设备对应的子流控开关处于启动状态,则将当前总配额放大第三固定比例。
可选地,该请求流控模块620用于若前端块设备的流控标志从第二流控标志变为第一流控标志,则启动前端块设备对应的子流控开关;若前端块设备的流控标志从第一流控标志变为第二流控标志,则停止前端块设备对应的子流控开关。
本发明实施例提供的数据存储IO请求的流控装置,包括状态检测模块和请求流控模块,通过状态检测模块在当前流控周期内,针对共享请求队列的各前端块设备,分别计算用于衡量该前端块设备对应的后端存储服务状态的指标数据,请求流控模块根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对前端块设备发往请求队列的数据存储IO请求进行流控。本发明实施例采用软硬件协同流控的方法,实现了在多个前端块设备共享资源的场景下,对每个前端块设备进行独立流控,避免了前端块设备存储访问错误以及不同服务能力的存储设备共存时性能相互影响,有效提升了智能网卡的整机存储IO性能和单个前端块设备的存储IO性能。
请参照图7,为本发明实施例提供的智能网卡100的一种方框示意图。智能网卡100包括存储器110、处理器120及通信模块130。存储器110、处理器120以及通信模块130各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
其中,存储器110用于存储程序或者数据。存储器110可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(ErasableProgrammable Read-Only Memory,EPROM),电可擦除只读存储器(Electric ErasableProgrammable Read-Only Memory,EEPROM)等。
处理器120可以是具有多个处理核,用于读/写存储器110中存储的数据或程序,并执行相应地功能。例如,当存储器110中存储的计算机程序被处理器120执行时,可以实现上述各实施例所揭示的数据存储IO请求的流控方法。
通信模块130用于通过网络建立智能网卡100与其它通信终端之间的通信连接,并用于通过网络收发数据。
应当理解的是,图7所示的结构仅为智能网卡100的结构示意图,智能网卡100还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。图7中所示的各组件可以采用硬件、软件或其组合实现。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器120执行时实现上述各实施例所揭示的数据存储IO请求的流控方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据存储IO请求的流控方法,其特征在于,应用于智能网卡,所述智能网卡中设置有请求队列,所述请求队列由一个或多个前端块设备共享,用于存放所述前端块设备发送的数据存储IO请求,每个所述前端块设备对应一个子流控开关;所述方法包括:
在当前流控周期内,针对共享所述请求队列的各前端块设备,分别计算用于衡量所述前端块设备对应的后端存储服务状态的指标数据;
根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对所述前端块设备发往所述请求队列的数据存储IO请求进行流控。
2.根据权利要求1所述的方法,其特征在于,所述指标数据包括当前流控周期的IO请求数、未完成IO请求数、未完成IO请求累积速率、未完成IO请求累积比例以及拥塞指数;所述分别计算用于衡量所述前端块设备对应的后端存储服务状态的指标数据,包括:
根据所述前端块设备在当前流控周期和上个流控周期的IO请求累计总数,计算所述前端块设备在当前流控周期的IO请求数;所述IO请求累计总数由所述智能网卡在执行IO请求处理任务时统计得到;
根据所述前端块设备在当前流控周期的IO请求累计总数和IO响应累计总数,计算所述前端块设备在当前流控周期的未完成IO请求数;所述IO响应累计总数由所述智能网卡在执行IO响应处理任务时统计得到;
根据所述前端块设备在当前流控周期和上个流控周期的未完成IO请求数,得到所述前端块设备在当前流控周期的未完成IO请求累积速率;
根据所述前端块设备在当前流控周期的未完成IO请求数、当前流控周期的IO请求数以及上个流控周期的未完成IO请求数,计算所述前端块设备在当前流控周期的未完成IO请求累积比例;
根据最近预设数目个流控周期的未完成IO请求累积比例,计算拥塞指数。
3.根据权利要求2所述的方法,其特征在于,所述根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,包括:
根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,设置各前端块设备的流控标志;所述流控标志表征是否需要对所述前端块设备发送的数据存储IO请求进行流控;
根据各前端块设备的流控标志的变化情况,启动或停止各前端块设备对应的子流控开关。
4.根据权利要求3所述的方法,其特征在于,所述根据各前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数,设置各前端块设备的流控标志,包括:
若所述前端块设备在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数符合预设条件,则将所述前端块设备的流控标志设置为第一流控标志;所述第一流控标志表征需要对所述前端块设备发送的数据存储IO请求进行流控;
针对在当前流控周期的未完成IO请求数、未完成IO请求累积速率和拥塞指数不符合所述预设条件的各前端块设备,根据各前端块设备在当前流控周期的未完成IO请求累积速率,为各前端块设备分配服务配额;
按照拥塞指数从小到大的顺序,累加各前端块设备分配到的服务配额;在累加目标前端块设备分配到的服务配额后,若所得到的服务配额累加值大于当前总配额,则将所述目标前端块设备以及排序位于所述目标前端块设备之后的前端块设备的流控标志设置为所述第一流控标志,将排序位于所述目标前端块设备之前的前端块设备的流控标志设置为第二流控标志;所述第二流控标志表征不需要对所述前端块设备发送的数据存储IO请求进行流控。
5.根据权利要求4所述的方法,其特征在于,所述根据各前端块设备在当前流控周期的未完成IO请求累积速率,为各前端块设备分配服务配额,包括:
若所述前端块设备在当前流控周期的未完成IO请求累积速率小于或等于预设值,则按照第一预设比例和所述前端块设备在当前流控周期的IO请求数为所述前端块设备分配服务配额;
若所述前端块设备在当前流控周期的未完成IO请求累积速率大于所述预设值,则按照第二预设比例和所述前端块设备在当前流控周期的IO请求数为所述前端块设备分配服务配额;所述第一预设比例大于所述第二预设比例。
6.根据权利要求4所述的方法,其特征在于,所述智能网卡中还设置有所述请求队列对应的总流控开关,各所述子流控开关均与所述总流控开关相连;所述智能网卡通过启动或停止所述总流控开关,对共享所述请求队列的所有前端块设备发往所述请求队列的数据存储IO请求进行流控,并在启动所述总流控开关时,累计所述总流控开关的启动次数;所述方法还包括:
在当前配额调整周期内,获取所述总流控开关的累计启动次数;
根据所述当前配额调整周期和上个配额调整周期的总流控开关的累计启动次数,计算所述当前配额调整周期内的总流控开关的启动次数;
若所述当前配额调整周期内的总流控开关的启动次数大于预设次数,则将所述当前总配额缩小第一固定比例;
若共享所述请求队列的各前端块设备中,有超过第二固定比例的前端块设备对应的子流控开关处于启动状态,则将所述当前总配额放大第三固定比例。
7.根据权利要求4所述的方法,其特征在于,所述根据各前端块设备的流控标志的变化情况,启动或停止各前端块设备对应的子流控开关,包括:
若所述前端块设备的流控标志从所述第二流控标志变为所述第一流控标志,则启动所述前端块设备对应的子流控开关;
若所述前端块设备的流控标志从所述第一流控标志变为第二流控标志,则停止所述前端块设备对应的子流控开关。
8.一种数据存储IO请求的流控装置,其特征在于,应用于智能网卡,所述智能网卡中设置有请求队列,所述请求队列由一个或多个前端块设备共享,用于存放所述前端块设备发送的数据存储IO请求,每个所述前端块设备对应一个子流控开关;所述装置包括:
状态检测模块,用于在当前流控周期内,针对共享所述请求队列的各前端块设备,分别计算用于衡量所述前端块设备对应的后端存储服务状态的指标数据;
请求流控模块,用于根据各前端块设备对应的指标数据,启动或停止各前端块设备对应的子流控开关,实现对所述前端块设备发往所述请求队列的数据存储IO请求进行流控。
9.一种智能网卡,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1-7中任一项所述的数据存储IO请求的流控方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的数据存储IO请求的流控方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210962809.7A CN115314439B (zh) | 2022-08-11 | 2022-08-11 | 数据存储io请求的流控方法和相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210962809.7A CN115314439B (zh) | 2022-08-11 | 2022-08-11 | 数据存储io请求的流控方法和相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115314439A CN115314439A (zh) | 2022-11-08 |
CN115314439B true CN115314439B (zh) | 2023-10-24 |
Family
ID=83860032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210962809.7A Active CN115314439B (zh) | 2022-08-11 | 2022-08-11 | 数据存储io请求的流控方法和相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115314439B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435142B (zh) * | 2023-12-12 | 2024-03-01 | 苏州元脑智能科技有限公司 | Io请求调度方法及存储装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111262791A (zh) * | 2020-01-08 | 2020-06-09 | 江苏满运软件科技有限公司 | 一种流量管控方法、装置、电子设备及存储介质 |
CN113986791A (zh) * | 2021-09-13 | 2022-01-28 | 西安电子科技大学 | 一种智能网卡快速dma设计方法、系统、设备及终端 |
US11281602B1 (en) * | 2020-10-26 | 2022-03-22 | Dell Products L.P. | System and method to pipeline, compound, and chain multiple data transfer and offload operations in a smart data accelerator interface device |
CN114513472A (zh) * | 2020-10-29 | 2022-05-17 | 华为技术有限公司 | 网络拥塞控制方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200280518A1 (en) * | 2020-01-28 | 2020-09-03 | Intel Corporation | Congestion management techniques |
US20220078119A1 (en) * | 2020-12-17 | 2022-03-10 | Intel Corporation | Network interface device with flow control capability |
US20220116334A1 (en) * | 2021-12-22 | 2022-04-14 | Intel Corporation | Multi-access management service queueing and reordering techniques |
-
2022
- 2022-08-11 CN CN202210962809.7A patent/CN115314439B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111262791A (zh) * | 2020-01-08 | 2020-06-09 | 江苏满运软件科技有限公司 | 一种流量管控方法、装置、电子设备及存储介质 |
US11281602B1 (en) * | 2020-10-26 | 2022-03-22 | Dell Products L.P. | System and method to pipeline, compound, and chain multiple data transfer and offload operations in a smart data accelerator interface device |
CN114513472A (zh) * | 2020-10-29 | 2022-05-17 | 华为技术有限公司 | 网络拥塞控制方法及装置 |
CN113986791A (zh) * | 2021-09-13 | 2022-01-28 | 西安电子科技大学 | 一种智能网卡快速dma设计方法、系统、设备及终端 |
Non-Patent Citations (2)
Title |
---|
An Offloading Architecture of lossless compression Based on Smart NIC;Can Zhang;《2020 International Conference on Computer Engineering and Intelligent》;全文 * |
用于TCP/IP减荷的智能网卡的设计与实现;杨松岸;《计算机工程》;第30卷(第14期);178-180 * |
Also Published As
Publication number | Publication date |
---|---|
CN115314439A (zh) | 2022-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2942665C (en) | Coordinated admission control for network-accessible block storage | |
US8893146B2 (en) | Method and system of an I/O stack for controlling flows of workload specific I/O requests | |
US9317427B2 (en) | Reallocating unused memory databus utilization to another processor when utilization is below a threshold | |
CN110196770B (zh) | 云系统内存数据处理方法、装置、设备及存储介质 | |
US20190132257A1 (en) | Method, server system and computer program product of managing resources | |
US20160132359A1 (en) | Abnormality detection apparatus, control method, and program | |
CN115314439B (zh) | 数据存储io请求的流控方法和相关装置 | |
WO2020143434A1 (zh) | 读写请求处理方法、装置、电子设备以及存储介质 | |
US20190171489A1 (en) | Method of managing dedicated processing resources, server system and computer program product | |
CN111061570A (zh) | 一种图像计算请求处理方法、装置及终端设备 | |
CN109117279B (zh) | 电子装置及其限制进程间通信的方法、存储介质 | |
CN112600761A (zh) | 一种资源分配的方法、装置及存储介质 | |
CN114153614A (zh) | 内存管理方法、装置、电子设备和自动驾驶车辆 | |
CN111400241B (zh) | 数据重构方法和装置 | |
CN115378885B (zh) | 超融合架构下的虚拟机业务网络带宽管理方法及装置 | |
EP4425334A1 (en) | Storage control method, storage controller, storage chip, network card, and readable medium | |
CN114816766B (zh) | 一种计算资源分配方法及其相关组件 | |
CN107273082B (zh) | 图像的显示方法、装置、终端及存储介质 | |
CN115967677A (zh) | 服务调用的流量控制方法、装置、设备及存储介质 | |
CN107465579B (zh) | 一种端口性能统计系统 | |
CN112527482A (zh) | 基于移动边缘云平台的任务管理方法及系统 | |
CN117891416B (zh) | 基于scsi协议的取消映射操作优化方法、装置及可读介质 | |
CN114760327B (zh) | 云盘资源配置的调整方法及装置 | |
CN115328640B (zh) | 一种任务调度方法、装置、系统及计算机可读存储介质 | |
US11921648B1 (en) | Statistic-based adaptive polling driver |
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 |