CN110768915A - 一种分流方法及装置 - Google Patents
一种分流方法及装置 Download PDFInfo
- Publication number
- CN110768915A CN110768915A CN201911051684.7A CN201911051684A CN110768915A CN 110768915 A CN110768915 A CN 110768915A CN 201911051684 A CN201911051684 A CN 201911051684A CN 110768915 A CN110768915 A CN 110768915A
- Authority
- CN
- China
- Prior art keywords
- cpu
- message
- queue
- cpu queue
- current
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000003860 storage Methods 0.000 claims description 18
- 230000003247 decreasing effect Effects 0.000 claims description 3
- 238000000151 deposition Methods 0.000 claims 1
- 238000009827 uniform distribution Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 238000004590 computer program Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000009826 distribution Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
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/70—Admission control; Resource allocation
- H04L47/78—Architectures of resource allocation
-
- 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
- H04L47/29—Flow control; Congestion control using a combination of thresholds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供一种分流方法及装置,该方法包括:接收第一报文;检查在接收到所述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列;如果是,确定预设CPU序列中存放了所述第二报文的CPU队列的下一个CPU队列为当前CPU队列,所述第二报文为距离当前最近、且在接收到所述第一报文之前接收到的报文;检查所述当前CPU队列是否允许存放所述第一报文,如果是,将所述第一报文存放至所述当前CPU队列,如果否,若所述当前CPU队列不为所述预设CPU序列中最后一个CPU队列,则确定所述预设CPU序列中所述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文。由此能够实现报文的均匀分配。
Description
技术领域
本申请涉及通信技术领域,特别涉及一种分流方法及装置。
背景技术
目前,具备多核CPU的网络设备通常采用多核多队列的报文转发方式,即每个CPU核对应一个用于缓存报文的CPU队列,待转发的报文会被加入CPU队列,当CPU核发现自己的CPU队列中存在报文时会将其转发。
现有的将报文存放到不同CPU队列的方法,即CPU队列分流方法为:当接收到一个报文时,首先获取这个报文的五元组信息,然后根据相应的算法求出该五元组信息的哈希值,再将这一哈希值与设备的CPU核数进行取余运算,得到的余数即为报文要加入的CPU队列序号。如果该CPU队列未满,则将报文存放至该CPU队列;如果该CPU队列已满,则丢弃报文。
但按照现有的方法,如果出现大量五元组信息相同的报文,就会导致严重的报文分配不均,即大量报文集中于某个CPU队列,导致超出该队列的上限而丢包,而其他CPU队列仍未达到队列上限的情况。
发明内容
针对上述问题,本申请提供一种分流方法及装置,以实现将报文均匀地分配至各CPU队列。
本申请提供的技术方案包括:
第一方面,本申请提供一种分流方法,该方法包括:
接收第一报文;
检查在接收到所述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列,所述预设CPU序列由各CPU核对应的CPU队列组成;如果是,确定预设CPU序列中存放了所述第二报文的CPU队列的下一个CPU队列为当前CPU队列,所述第二报文为距离当前最近、且在接收到所述第一报文之前接收到的报文;
检查所述当前CPU队列是否允许存放所述第一报文,如果是,将所述第一报文存放至所述当前CPU队列,如果否,若所述当前CPU队列不为所述预设CPU序列中最后一个CPU队列,则确定所述预设CPU序列中所述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文。
第二方面,本申请提供一种分流装置,该装置包括:
接收单元,用于接收第一报文;
队列确定单元,用于检查在接收到所述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列,所述预设CPU序列由各CPU核对应的CPU队列组成;如果是,确定预设CPU序列中存放了所述第二报文的CPU队列的下一个CPU队列为当前CPU队列,所述第二报文为距离当前最近、且在接收到所述第一报文之前接收到的报文;
报文存放单元,用于检查所述当前CPU队列是否允许存放所述第一报文,如果是,将所述第一报文存放至所述当前CPU队列,如果否,若所述当前CPU队列不为所述预设CPU序列中最后一个CPU队列,则确定所述预设CPU序列中所述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文。
由以上技术方案可见,本申请中,当第一报文并非设备接收到的首个报文时,将存放前一报文的CPU队列的下一CPU队列作为当前CPU队列,检查当前CPU队列是否允许存放该第一报文,若允许,则将第一报文存放至当前CPU队列,由此实现了均匀地存放报文至每个CPU队列,解决了现有分流方法导致的报文分配不均的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本申请提供的分流方法流程图;
图2为本申请提供的预设CPU序列示意图;
图3为本申请实施例提供的步骤103实现流程图;
图4为本申请实施例提供的步骤301的一个实现流程图;
图5为本申请实施例提供的步骤301的另一实现流程图;
图6为本申请提供的报文传输装置结构图;
图7为本申请实施例提供的一种电子设备的硬件结构示意图。
具体实施方式
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
目前,具备多核CPU的网络设备通常采用多核多队列的报文转发方式,即每个CPU核对应一个用于缓存报文的CPU队列,待转发的报文会被加入CPU队列。CPU核会检查自己的CPU队列中是否存在报文,如果发现存在报文则将其转发。
现有的分流方法会将具有相同五元组信息的报文加入相同的CPU队列中。这意味着,如果出现大量五元组信息相同的报文,就会导致严重的报文分配不均,甚至出现大量报文集中于某个CPU队列,导致超出该队列的上限而丢包,而其他CPU队列仍未达到队列上限的情况。
本申请提供一种分流方法,通过将存放前一报文的CPU队列的下一CPU队列作为当前CPU队列,可以将报文存放至当前CPU队列,由此能够实现均匀地将报文分配至多核CPU的各CPU队列。
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本申请进行详细描述。
参见图1,图1为本申请提供的分流方法流程图。作为一个实施例,该流程可应用于具有多核CPU的网络设备(以下简称为多核网络设备)。如图1所示,该方法包括:
步骤101,接收第一报文。
作为一个实施例,可以将接收到的、待存放至CPU队列的报文作为第一报文。
作为一个实施例,这里可以由多核网络设备的网卡驱动接收其他外部设备发来的报文,然后将该报文上传至CPU。
步骤102,检查在接收到上述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列,上述预设CPU序列由各CPU核对应的CPU队列组成;如果是,确定存放了上述第二报文的CPU队列的下一个CPU队列为当前CPU队列,上述第二报文为距离当前最近、且在接收到上述第一报文之前接收到的报文。
本步骤102的目的在于通过判断上述第一报文是否为接收到的首个报文,从预设CPU序列中确定出当前CPU队列。
在一个例子中,这里的CPU序列由各CPU核对应的CPU队列组成,图2举例示出了CPU核、CPU队列以及CPU序列的关系。参考图2,每个CPU核对应有一个CPU队列,图2所示的CPU序列为:CPU队列0、CPU队列1……CPU队列n。
对于在接收第一报文之前没有接收到其他报文的情况,即第一报文为多核网络设备接收到的首个报文,则可以指定一个CPU队列用于存放该第一报文。
作为一个实施例,这里的指定CPU队列可以为CPU序列中的首个CPU队列。以图2所示CPU序列为例,首个CPU队列为CPU队列0,则指定CPU队列为CPU队列0,指定CPU队列的下一CPU队列为CPU队列1。
作为另一个实施例,这里的指定CPU队列可以为CPU序列中的末位CPU队列。依然以图2所示CPU序列为例,末位CPU队列为CPU队列n,则指定CPU队列为CPU队列n,本实施例与上一实施例的预设CPU序列中下一CPU队列的选择顺序相反,指定CPU队列的下一CPU队列为CPU队列n-1。
对于在接收第一报文之前还接收到其他报文的情况,本步骤102通过确定出存放了第二报文的CPU队列,将其在预设CPU序列中的下一个CPU队列确定为当前CPU队列,实现了当前CPU队列的动态确定,即每次将报文存放至当前CPU队列后,在下一次存放报文时,可以将该当前CPU队列的下一CPU队列作为当前CPU队列来存放报文。由此可以实现向各CPU队列中均匀地存放报文。
举一个简单的例子,参考图2的预设CPU序列,假如存放了第二报文的CPU队列为CPU队列1,则根据预设CPU序列,CPU队列1的下一个CPU队列为CPU队列2,则可将CPU队列2确定为当前CPU队列。
作为一个实施例,若经确定,存放了第二报文的CPU队列为预设CPU序列中的最后一个CPU序列,区别于上述末位CPU队列,这里的预设CPU序列中最后一个CPU队列是指,该CPU队列在预设CPU序列中不具有下一CPU队列。针对上述情况,则可以将指定CPU队列确定为当前CPU队列。
作为一个实施例,这里可以从接收第一报文之前接收的其他报文中,选择出距离当前最近接收到的报文作为第二报文。
至此,通过步骤102实现了当前CPU队列的确定。
步骤103,检查上述当前CPU队列是否允许存放上述第一报文,如果是,将上述第一报文存放至上述当前CPU队列,如果否,若上述当前CPU队列不为上述预设CPU序列中最后一个CPU队列,则确定上述预设CPU序列中上述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查上述当前CPU队列是否允许存放上述第一报文。
在具体实现时,本步骤103中的检查上述当前CPU队列是否允许存放上述第一报文有多种实现方式,下文图3举例示出其中一种实现方式,在此暂不赘述。
若当前CPU队列为上述预设CPU序列中最后一个CPU队列,作为一个实施例,可以确定上述指定CPU队列为当前CPU队列,返回检查上述当前CPU队列是否允许存放上述第一报文。本实施例可应用于虽然当前CPU队列不允许存放第一报文,但预设CPU序列中当前CPU队列之前的CPU队列仍允许存放第一报文的情况。
作为另一个实施例,若当前CPU队列为上述预设CPU序列中最后一个CPU队列,则丢弃上述第一报文。本实施例可应用于所有CPU队列都不允许存放第一报文的情况。
为便于理解本步骤103,在此举一个简单的例子,假如预设CPU序列包括:CPU队列0、CPU队列1、CPU队列2和CPU队列3,指定CPU队列为CPU队列0。经步骤102确定出当前CPU队列为CPU队列2,则检查CPU队列2是否允许存放第一报文。
如果允许,则将第一报文存放至CPU队列2;
如果不允许,则将预设CPU序列中CPU队列2的下一个CPU队列,即CPU队列3确定为当前CPU队列,检查CPU队列3是否允许存放第一报文;
如果CPU队列3也不允许存放第一报文,而且根据预设CPU序列可知,CPU队列3为预设CPU序列中的最后一个CPU队列,则可以将指定CPU队列,即CPU队列0确定为当前CPU队列,检查CPU队列0是否允许存放第一报文;或者,将该第一报文丢弃。
至此,完成图1所示流程。
作为一个实施例,上述图1所示流程中报文的接收、当前CPU队列的确定以及将报文存放至确定出的当前CPU队列的过程,可由多核网络设备中的网卡驱动完成。
通过图1所示流程可以看出,本申请通过将存放第二报文的CPU队列的下一CPU队列作为当前CPU队列,在当前CPU队列允许存放报文时,将第一报文存放至当前CPU队列,可以实现将接收到的报文均匀存放至各个CPU队列,解决了现有方式存在的报文分配不均问题。
作为一个实施例,完成图1所示流程后,存放有报文的CPU队列对应的CPU核会将转发队列中的报文,这一过程为现有技术,所以在此不做赘述。
下面对上述步骤103进行举例描述:
作为一个实施例,上述步骤103中的检查上述当前CPU队列是否允许存放上述第一报文,可以根据CPU队列的使用率是否小于阈值来检查。在实际应用时,还可以根据CPU队列的其他属性来判断当前CPU队列是否允许存放上述第一报文,其原理与图3所示流程类似,在此不一一赘述。
参见图3,图3为本申请实施例提供的步骤103实现流程图。如图3所示,该流程包括:
步骤301,确定上述当前CPU队列的使用率。
为了通过判断当前CPU队列的使用率是否小于阈值,来确定当前CPU队列是否允许存放上述第一报文,首先需要确定当前CPU队列的使用率。在具体实现时,本步骤301有多种实现方式,下文会进行举例描述,在此暂不赘述。
步骤302,判断上述使用率是否小于阈值,若是,则允许当前CPU队列存放上述第一报文;若否,则不允许当前CPU队列存放上述第一报文。
这里的使用率小于阈值表示当前CPU队列还未达到报文存放上限,因此可以存放报文;如果使用率大于或等于阈值,则表示当前CPU队列已达报文存放上限,因此不可以存放报文。
作为一个实施例,上述阈值可以针对每个CPU队列预设,也就是说可以为各CPU队列分别设置不同的阈值。本实施例中,上述阈值可以根据各CPU队列的实际工作情况进行调整。
作为一个实施例,这里的阈值可以根据设备的不同进行调整,即对于不同的设备可以设置不同的阈值。
作为另一个实施例,这里的阈值还可以根据设备使用场景的不同进行调整,即对于应用于不同场景的同一设备可以为其设置不同的阈值。
对于上述阈值,作为一个实施例,可以由工作人员根据工作经验和设备的工作情况进行设置、调整,也可以由设备根据预设算法自行设置、调整,本申请对阈值的设置方式不做限制。
至此,完成图3所示流程。
通过图3所示流程实现了检查上述当前CPU队列是否允许存放上述第一报文。需要说明的是,图3只是实现步骤103的一种举例,并非用于限定。
下面对步骤301进行举例描述:
参见图4,图4为本申请实施例提供的步骤301的一个实现流程图。如图4所示,该流程包括:
步骤401,获取上述当前CPU队列的成员计数值,上述成员计数值用于表示当前CPU队列的成员数量,当前CPU队列每存放一个报文,成员计数值加一,当前CPU队列每转发一个报文,成员计数值减一。
作为一个实施例,这里的计数值可由计数器设备实现。CPU队列每入队一个报文,计数器设备将成员计数值加一,每出队一个报文,计数器设备将成员计数值减一。
作为一个实施例,上述成员计数值的初始值为0。
为便于理解本步骤401,举一个简单的例子,假如当前CPU队列在接收到第一报文之前入队3个报文,出队1个报文,则当前CPU队列的成员计数值为2,则本步骤401中获取到的当前CPU队列的成员计数值为2,这表示当前CPU队列中存在2个报文。
步骤402,获取当前CPU队列的最大值,计算上述成员计数值和上述最大值的比值作为当前CPU队列的使用率。
作为一个实施例,这里的比值可以表示为小数、百分比等。
举一个简单的例子,假如本步骤402中获取到的当前CPU队列的最大值为20,步骤401中获取的当前CPU队列的成员计数值为5,则可以计算当前CPU队列的使用率为成员计数值与最大值的比值,即5/20,这一结果可用0.25或25%来表示。
至此,完成图4所示流程。
通过图4所示流程实现了确定上述当前CPU队列的使用率。需要说明的是,图4只是实现步骤301的一种举例,并非用于限定。
以上是以直接获取当前CPU队列的成员计数值为例进行描述。在另一个例子中,还可以分别获取当前CPU队列的入队计数值和出队计数值,然后计算得到CPU队列的成员数量,下面通过图5所示流程进行描述。
参见图5,图5为本申请实施例提供的步骤301的另一实现流程图。如图5所示,该流程包括:
步骤501,获取上述当前CPU队列的入队计数值、出队计数值和最大值。
作为一个实施例,上述入队计数值用于表示当前CPU队列的入队报文数,初始值为0,每入队一个报文,入队计数值加一;上述入队计数值用于表示当前CPU队列的出队报文数,初始值为0,每出队一个报文,出队计数值加一。
当上述入队计数值大于最大值时,入队计数值置为0,从0开始继续计数;当上述出队计数值大于最大值时,出队计数值置为0,从0开始继续计数。
为便于理解入队计数值和出队计数值,下面举一个简单的例子来对其进行描述。假设CPU队列还没有报文入队和出队,则此时入队计数值IN为0,出队计数值OUT也为0,假设该CPU队列的最大值为M。
当第一个报文入队时,入队计数值IN加一,当前入队计数值IN为1;
当第一个报文出队时,出队计数值OUT加一,当前出队计数值OUT为1;
当第M个报文入队时,入队计数值IN加一,当前入队计数值IN为M;
当第M+1个报文入队时,入队计数值IN加一,当前入队计数值IN为M+1,由于此时的入队计数值IN大于最大值M,所以将入队计数值IN置为0;
当第M+2个报文入队时,入队计数值IN加一,当前入队计数值IN为1;
出队计数值的计数方法与入队计数值同理,所以在此不再举例。
作为一个实施例,这里的入队计数值和出队值可以由计数器设备分别计数。
步骤502,根据上述入队计数值、出队计数值和最大值计算得到上述当前CPU队列的成员数量,计算该成员数量与最大值的比值作为当前CPU队列的使用率。
作为一个实施例,当入队计数值大于出队计数值时,可计算入队计数值与出队计数值的差值作为当前CPU队列的成员数量。
作为另一个实施例,当入队计数值小于出队计数值时,可利用如下公式计算当前CPU队列的成员数量:
CPU队列的成员数量=最大值+入队计数值-出队计数值。
这一实施例中出现的入队计数值小于出队计数值的情况,可以参见步骤501中的实施例中,当上述入队计数值大于最大值时,入队计数值置为0,从0开始继续计数;当上述出队计数值大于最大值时,出队计数值置为0,从0开始继续计数的情况。
计算得到当前CPU队列的成员数量后,可以计算该成员数量与最大值的比值作为当前CPU队列的使用率,这里使用率的计算过程与步骤402类似,在此不做赘述。
至此,完成图5所示流程。
通过图5所示流程,实现了根据当前CPU队列的入队计数值和出队计数值计算得到当前CPU队列的成员数量,并进一步计算得到当前CPU队列的使用率。
为便于对图1至图5所示流程进行理解,以下通过一个实施例描述图1至图5所示流程。
实施例1:
以具有四核CPU的网络设备为例进行说明,假设其四核CPU包括的CPU核分别为:CPU0、CPU1、CPU2和CPU3。各CPU核分别对应一个CPU队列,即:CPU0对应CPU队列0、CPU1对应CPU队列1、CPU2对应CPU队列2、CPU3对应CPU队列3。
则预设CPU序列为:CPU队列0、CPU队列1、CPU队列2、CPU队列3。假设其中的CPU队列0为指定CPU队列。
以设备接收到的首个报文(报文1)为例,按照图1所示流程,设备通过检查可以确定在接收报文1之前没有接收到其他报文,因此将上述指定CPU队列,即CPU队列0确定为当前CPU队列。
确定了当前CPU队列(CPU队列0)后,设备按照图3、4或图3、5所示流程,通过计算当前CPU队列(CPU队列0)的使用率,并判断该使用率是否小于阈值来确定当前CPU队列(CPU队列0)是否允许存放报文1。
假如当前CPU队列(CPU队列0)的使用率小于阈值,则当前CPU队列(CPU队列0)允许存放报文1,则将报文1存放至当前CPU队列(CPU队列0)。之后CPU 0会将存放在CPU队列0中的报文1转发。
以上为以报文1为设备接收到的首个报文进行的描述。
再以设备在接收到报文1后,又接收到报文2为例,则按照图1所示流程,设备通过检查可以确定在接收报文2之前还接收到了其他报文,并进一步确定出接收到的其他报文中,距离当前最近接收到的报文是报文1。由此进一步确定出报文1所存放的CPU队列,即CPU队列0,则将预设CPU序列中CPU队列0的下一CPU队列,即CPU队列1作为当前CPU队列。
确定了当前CPU队列(CPU队列1)后,设备按照图3、4或图3、5所示流程,通过计算当前CPU队列(CPU队列1)的使用率,并判断该使用率是否小于阈值来确定当前CPU队列(CPU队列1)是否允许存放报文2。
假如当前CPU队列(CPU队列1)的使用率小于阈值,则当前CPU队列(CPU队列1)允许存放报文2,则将报文2存放至当前CPU队列(CPU队列1)。之后CPU 1会将存放在CPU队列1中的报文2转发。
以上为以报文2为图1所示流程中的第一报文,报文1为图1所示流程中的第二报文进行的描述。
再以设备接收到第N个报文(报文4)为例,则按照图1所示流程,设备通过检查可以确定在接收报文4之前还接收到了其他报文,假设由此进一步确定出接收到的其他报文中,距离当前最近接收到的报文为报文3(第N-1个报文),则进一步确定出报文3所存放的CPU队列,假如该CPU队列为CPU队列1,则将预设CPU序列中CPU队列1的下一CPU队列,即CPU队列2作为当前CPU队列。
确定了当前CPU队列(CPU队列2)后,设备按照图3、4或图3、5所示流程,通过计算当前CPU队列(CPU队列2)的使用率,并判断该使用率是否小于阈值来确定当前CPU队列(CPU队列2)是否允许存放报文4。
假如当前CPU队列(CPU队列2)的使用率等于阈值,则当前CPU队列(CPU队列2)不允许存放报文4,因此将预设CPU序列中当前CPU队列(CPU队列2)的下一CPU队列,即CPU队列3确定为当前CPU队列,检查当前CPU队列(CPU队列3)是否允许存放报文4。
假如当前CPU队列(CPU队列3)允许存放报文4,则将报文4存放至当前CPU队列(CPU队列3)。之后CPU 3会将存放在CPU队列3中的报文4转发;
假如当前CPU队列(CPU队列3)不允许存放报文4,由于CPU队列3为预设CPU序列中的最后一个CPU队列,则在一个实现中,将指定CPU队列(CPU队列0)作为当前CPU队列,检查其是否允许存放报文4;在另一个实现中,将报文4丢弃。
至此,完成对实施例1的描述。
以上对本申请提供的方法进行了描述,下面对本申请提供的装置进行描述:
参见图6,图6为本申请提供的分流装置结构图。如图6所示,该装置包括接收单元601、队列确定单元602、报文存放单元603。
在一个例子中,上述接收单元601用于接收第一报文;
队列确定单元602,用于检查在接收到上述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列,上述预设CPU序列由各CPU核对应的CPU队列组成;如果是,确定预设CPU序列中存放了上述第二报文的CPU队列的下一个CPU队列为当前CPU队列,上述第二报文为距离当前最近、且在接收到上述第一报文之前接收到的报文;
报文存放单元603,用于检查上述当前CPU队列是否允许存放上述第一报文,如果是,将上述第一报文存放至上述当前CPU队列,如果否,若上述当前CPU队列不为上述预设CPU序列中最后一个CPU队列,则确定上述预设CPU序列中上述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查上述当前CPU队列是否允许存放上述第一报文。
作为一个实施例,若当前CPU队列为上述预设CPU序列中最后一个CPU队列,上述报文存放单元还用于:
确定上述指定CPU队列为当前CPU队列,返回检查上述当前CPU队列是否允许存放上述第一报文;或者,丢弃上述第一报文。
作为一个实施例,上述指定CPU队列为预设CPU序列中的首个CPU队列。
作为一个实施例,上述报文存放单元检查上述当前CPU队列是否允许存放上述第一报文,包括:
确定上述当前CPU队列的使用率;
判断上述使用率是否小于阈值,若是,则允许当前CPU队列存放上述第一报文;若否,则不允许当前CPU队列存放上述第一报文。
作为一个实施例,上述报文存放单元确定上述当前CPU队列的使用率,包括:
获取上述当前CPU队列的成员计数值,上述成员计数值用于表示当前CPU队列的成员数量,当前CPU队列每存放一个报文,成员计数值加一,当前CPU队列每转发一个报文,成员计数值减一;
获取当前CPU队列的最大值,计算上述成员计数值和上述最大值的比值作为当前CPU队列的使用率。
上述装置中各模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
请参见图7,图7为本申请实施例提供的一种电子设备的硬件结构示意图。如图7所示,该电子设备可以包括处理器701、存储器702和通信总线703。处理器701以及存储器702通过通信总线703完成相互间的通信。其中,存储器702上存放有计算机程序;处理器701可以通过执行存储器702上所存放的程序,执行上文描述的分流方法。
本文中提到的存储器702可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,存储器702可以是:RAM(Radom AccessMemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
本申请实施例还提供了一种存储有计算机程序的机器可读存储介质,例如图7中的存储器702,所述计算机程序可由图7所示电子设备中的处理器701执行以实现上文中描述的分流方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种分流方法,其特征在于,所述方法包括:
接收第一报文;
检查在接收到所述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列,所述预设CPU序列由各CPU核对应的CPU队列组成;如果是,确定预设CPU序列中存放了所述第二报文的CPU队列的下一个CPU队列为当前CPU队列,所述第二报文为距离当前最近、且在接收到所述第一报文之前接收到的报文;
检查所述当前CPU队列是否允许存放所述第一报文,如果是,将所述第一报文存放至所述当前CPU队列,如果否,若所述当前CPU队列不为所述预设CPU序列中最后一个CPU队列,则确定所述预设CPU序列中所述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文。
2.根据权利要求1所述的方法,其特征在于,若所述当前CPU队列为所述预设CPU序列中最后一个CPU队列,该方法进一步包括:
确定所述指定CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文;
或者,丢弃所述第一报文。
3.根据权利要求1或2所述的方法,其特征在于,所述指定CPU队列为预设CPU序列中的首个CPU队列。
4.根据权利要求1所述的方法,其特征在于,所述检查所述当前CPU队列是否允许存放所述第一报文,包括:
确定所述当前CPU队列的使用率;
判断所述使用率是否小于阈值,若是,则允许当前CPU队列存放所述第一报文;若否,则不允许当前CPU队列存放所述第一报文。
5.根据权利要求4所述的方法,其特征在于,所述确定所述当前CPU队列的使用率,包括:
获取所述当前CPU队列的成员计数值,所述成员计数值用于表示当前CPU队列的成员数量,当前CPU队列每存放一个报文,成员计数值加一,当前CPU队列每转发一个报文,成员计数值减一;
获取当前CPU队列的最大值,计算所述成员计数值和所述最大值的比值作为当前CPU队列的使用率。
6.一种分流装置,其特征在于,所述装置包括:
接收单元,用于接收第一报文;
队列确定单元,用于检查在接收到所述第一报文之前是否还接收到其他报文;如果否,确定预设CPU序列中的指定CPU队列为当前CPU队列,所述预设CPU序列由各CPU核对应的CPU队列组成;如果是,确定预设CPU序列中存放了所述第二报文的CPU队列的下一个CPU队列为当前CPU队列,所述第二报文为距离当前最近、且在接收到所述第一报文之前接收到的报文;
报文存放单元,用于检查所述当前CPU队列是否允许存放所述第一报文,如果是,将所述第一报文存放至所述当前CPU队列,如果否,若所述当前CPU队列不为所述预设CPU序列中最后一个CPU队列,则确定所述预设CPU序列中所述当前CPU队列的下一个CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文。
7.根据权利要求6所述的装置,其特征在于,若当前CPU队列为所述预设CPU序列中最后一个CPU队列,所述报文存放单元还用于:
确定所述指定CPU队列为当前CPU队列,返回检查所述当前CPU队列是否允许存放所述第一报文;
或者,丢弃所述第一报文。
8.根据权利要求6或7所述的装置,其特征在于,所述指定CPU队列为预设CPU序列中的首个CPU队列。
9.根据权利要求6所述的装置,其特征在于,所述报文存放单元检查所述当前CPU队列是否允许存放所述第一报文,包括:
确定所述当前CPU队列的使用率;
判断所述使用率是否小于阈值,若是,则允许当前CPU队列存放所述第一报文;若否,则不允许当前CPU队列存放所述第一报文。
10.根据权利要求9所述的装置,其特征在于,所述报文存放单元确定所述当前CPU队列的使用率,包括:
获取所述当前CPU队列的成员计数值,所述成员计数值用于表示当前CPU队列的成员数量,当前CPU队列每存放一个报文,成员计数值加一,当前CPU队列每转发一个报文,成员计数值减一;
获取当前CPU队列的最大值,计算所述成员计数值和所述最大值的比值作为当前CPU队列的使用率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911051684.7A CN110768915A (zh) | 2019-10-31 | 2019-10-31 | 一种分流方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911051684.7A CN110768915A (zh) | 2019-10-31 | 2019-10-31 | 一种分流方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110768915A true CN110768915A (zh) | 2020-02-07 |
Family
ID=69334938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911051684.7A Pending CN110768915A (zh) | 2019-10-31 | 2019-10-31 | 一种分流方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110768915A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112532531A (zh) * | 2020-11-12 | 2021-03-19 | 杭州迪普科技股份有限公司 | 一种报文调度方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6085277A (en) * | 1997-10-15 | 2000-07-04 | International Business Machines Corporation | Interrupt and message batching apparatus and method |
CN106713185A (zh) * | 2016-12-06 | 2017-05-24 | 瑞斯康达科技发展股份有限公司 | 一种多核cpu的负载均衡方法及装置 |
US20170317944A1 (en) * | 2016-05-02 | 2017-11-02 | Rhidian John | System and method for latency-based queuing |
CN108040019A (zh) * | 2017-12-21 | 2018-05-15 | 杭州迪普科技股份有限公司 | 报文转发的方法及装置 |
CN108259369A (zh) * | 2018-01-26 | 2018-07-06 | 迈普通信技术股份有限公司 | 一种数据报文的转发方法及装置 |
CN109710416A (zh) * | 2019-01-11 | 2019-05-03 | 银清科技(北京)有限公司 | 资源调度方法及装置 |
CN110166380A (zh) * | 2018-02-14 | 2019-08-23 | 华为技术有限公司 | 调度报文的方法、第一网络设备及计算机可读存储介质 |
-
2019
- 2019-10-31 CN CN201911051684.7A patent/CN110768915A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6085277A (en) * | 1997-10-15 | 2000-07-04 | International Business Machines Corporation | Interrupt and message batching apparatus and method |
US20170317944A1 (en) * | 2016-05-02 | 2017-11-02 | Rhidian John | System and method for latency-based queuing |
CN109076026A (zh) * | 2016-05-02 | 2018-12-21 | 维萨国际服务协会 | 用于基于等待时间排队的系统和方法 |
CN106713185A (zh) * | 2016-12-06 | 2017-05-24 | 瑞斯康达科技发展股份有限公司 | 一种多核cpu的负载均衡方法及装置 |
CN108040019A (zh) * | 2017-12-21 | 2018-05-15 | 杭州迪普科技股份有限公司 | 报文转发的方法及装置 |
CN108259369A (zh) * | 2018-01-26 | 2018-07-06 | 迈普通信技术股份有限公司 | 一种数据报文的转发方法及装置 |
CN110166380A (zh) * | 2018-02-14 | 2019-08-23 | 华为技术有限公司 | 调度报文的方法、第一网络设备及计算机可读存储介质 |
CN109710416A (zh) * | 2019-01-11 | 2019-05-03 | 银清科技(北京)有限公司 | 资源调度方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112532531A (zh) * | 2020-11-12 | 2021-03-19 | 杭州迪普科技股份有限公司 | 一种报文调度方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9888048B1 (en) | Supporting millions of parallel light weight data streams in a distributed system | |
CN111245732B (zh) | 一种流量控制方法、装置及设备 | |
CN109343972B (zh) | 任务处理方法及终端设备 | |
CN108632165A (zh) | 一种报文处理方法、装置及设备 | |
CN108334460B (zh) | 数据缓存方法及装置 | |
CN108304272B (zh) | 一种数据io请求的处理方法及装置 | |
CN105978821B (zh) | 网络拥塞避免的方法及装置 | |
CN109905331B (zh) | 队列调度方法及装置、通信设备、存储介质 | |
CN104580008A (zh) | 基于硬件提高多队列随机丢弃报文精度的方法及装置 | |
US20150304227A1 (en) | Queue Management Method and Apparatus | |
CN112148644B (zh) | 处理输入/输出请求的方法、装置和计算机程序产品 | |
CN110768915A (zh) | 一种分流方法及装置 | |
CN113157465B (zh) | 基于指针链表的消息发送方法及装置 | |
CN111190541B (zh) | 存储系统的流控方法以及计算机可读存储介质 | |
CN114189477A (zh) | 一种报文拥塞控制方法及装置 | |
CN114070798B (zh) | 一种报文传输方法、装置及设备 | |
US11003506B2 (en) | Technique for determining a load of an application | |
CN113626221B (zh) | 一种消息入队方法及装置 | |
CN107689979B (zh) | 一种下载请求处理方法和处理设备 | |
CN114039893A (zh) | 一种api网关限速方法及装置 | |
US20180219953A1 (en) | Communication layer with dynamic multi-session management | |
CN111858019B (zh) | 任务调度方法、装置及计算机可读存储介质 | |
CN111488222B (zh) | 一种流聚合方法、装置及电子设备 | |
CN106921607B (zh) | 一种密码服务器集群下的密码运算管理方法及系统 | |
US10439952B1 (en) | Providing source fairness on congested queues using random noise |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200207 |
|
RJ01 | Rejection of invention patent application after publication |