技术领域
[0001] 本
说明书实施例涉及网络通信领域,尤其涉及一种报文发送方法及设备。
背景技术
[0002] 目前有些网络交换设备采用中央处理单元(Center Processing Unit,CPU)和现场可编程
门阵列(Field Programmable Gate Array,FPGA)相连的架构。FPGA具有至少一个能够接收CPU发送的报文的内侧面板口与至少一个能够向外发送报文的外侧面板口。
[0003] 实际应用中,内侧面板口的带宽通常大于单个外侧面板口的带宽,这意味着通过内侧面板口向单个外侧面板口发送的网络流量(即FPGA单位时间内接收到的CPU发往单个外侧面板口的报文数量)往往会大于单个外侧面板口能够承载的最大网络流量(即FPGA单位时间内通过单个外侧面板口向外发送的最大报文数量),造成外侧面板口堵塞,容易丢失报文。
发明内容
[0004] 为了减少外侧面板口堵塞时报文的丢失,本
申请公开了一种报文发送方法及设备,技术方案如下:
[0005] 一种报文发送方法,所述方法应用于包括中央处理单元CPU和
现场可编程门阵列FPGA的网络交换设备,所述FPGA包括至少一个用于接收CPU发送的报文的内侧面板口与至少一个用于向外发送报文的外侧面板口;
[0006] 针对每个外侧面板口,为该外侧面板口预先分
配对应的FPGA缓存空间,所述FPGA缓存空间用于缓存报文,所述FPGA从该外侧面板口对应的FPGA缓存空间中获取报文并从该外侧面板口发出;
[0007] 所述报文发送方法包括:
[0008] 所述CPU获取待发送的目标报文;
[0009] 确定所述目标报文
指定的外侧面板口,作为目标外侧面板口;
[0010] 将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间。
[0011] 一种设备,包括中央处理单元CPU和现场可编程门阵列FPGA;所述FPGA包括至少一个用于接收CPU发送的报文的内侧面板口与至少一个用于向外发送报文的外侧面板口;
[0012] 所述CPU,用于针对每个外侧面板口,为该外侧面板口预先分配对应的FPGA缓存空间,所述FPGA缓存空间用于缓存报文;用于获取待发送的目标报文;确定所述目标报文指定的外侧面板口,作为目标外侧面板口;将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间;
[0013] 所述FPGA,用于从每个外侧面板口对应的FPGA缓存空间中获取报文并从该外侧面板口发出。
[0014] 本申请公开的技术方案为FPGA的每个外侧面板口分配有对应的FPGA缓存空间,使每个需要从该外侧面板口发出的报文都存储在对应于该外侧面板口的FPGA缓存空间中。由于FPGA将接收到的报文全部存储于FPGA缓存空间,再从FPGA缓存空间中获取报文从外侧面板口发送出去,因此当FPGA单位时间内接收报文的数量大于FPGA单位时间内从单个外侧面板口发送报文的数量时,来不及从单个外侧面板口发送出去的报文就存储在该外侧面板口对应的FPGA缓存空间中等待发送,减少报文的丢失。
附图说明
[0015] 为了更清楚地说明本说明书实施例或
现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
[0016] 图1是本说明书实施例一提供的一种CPU通过FPGA发送报文的方法的原理示意图;
[0017] 图2是本说明书实施例一提供的一种CPU通过FPGA发送报文的方法的流程示意图;
[0018] 图3是本说明书实施例二提供的一种CPU通过FPGA发送报文的网络交换设备的结构示意图。
具体实施方式
[0019] 有些网络交换设备中装有中央处理单元CPU和现场可编程门阵列FPGA。其中FPGA具有至少一个能够接收CPU发送的报文的内侧面板口与至少一个能够向外发送报文的外侧面板口。
[0020] 当CPU通过FPGA向外发送报文时,先将报文发送到FPGA的内侧面板口,FPGA通过内侧面板口接收到该报文后,该报文中包含外侧面板口的标识信息,FPGA可以根据标识信息确定发出该报文的外侧面板口,通过该外侧面板口将该报文发送出去。
[0021] 但实际应用中,内侧面板口的带宽通常大于单个外侧面板口的带宽,其中带宽指的是单位时间内通过面板口的最
大数据量。这意味着通过内侧面板口向单个外侧面板口发送的网络流量(即FPGA单位时间内接收到的CPU发往单个外侧面板口的报文数量)往往会大于单个外侧面板口能够承载的最大网络流量(即FPGA单位时间内通过单个外侧面板口向外发送的最大报文数量),存在部分报文无法通过该外侧面板口发送出去,造成该外侧面板口堵塞,这种情况下,FPGA通常会直接丢弃堵塞在外侧面板口的报文,造成报文丢失,增大网络时延。
[0022] 本申请的技术方案旨在解决上述技术问题。
[0023] 为了使本领域技术人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。
[0024] 实施例一:
[0025] 图1是本实施例提供的一种CPU通过FPGA发送报文的原理示意图。如图1所示,其中包括CPU和FPGA,FPGA包括至少一个用于接收CPU发送的报文的内侧面板口与至少一个用于向外发送报文的外侧面板口,图1仅为示意性展示;针对每个外侧面板口,为该外侧面板口预先分配对应的FPGA缓存空间,所述FPGA缓存空间用于缓存报文;所述FPGA从该外侧面板口对应的FPGA缓存空间中获取报文并从该外侧面板口发出。CPU向FPGA缓存空间发送报文,FPGA再从FPGA缓存空间中获取报文,通过外侧面板口发送出去。
[0026] 其中,可以由CPU针对每个外侧面板口,为该外侧面板口预先分配对应的FPGA缓存空间,所述FPGA缓存空间用于缓存报文。
[0027] 其中,如图1所示,FPGA缓存空间可以在FPGA里。此外,FPGA缓存空间也可以在CPU管理的内存中。
[0028] 其中,为每个外侧面板口预先分配对应的FPGA缓存空间,具体可以是各外侧面板口共同对应于同一个FPGA缓存空间。此外,也可以是各外侧面板口对应于不同的FPGA缓存空间,即可以为每个外侧面板口预先分配唯一对应的FPGA缓存空间。
[0029] 其中,为每个外侧面板口预先分配唯一对应的FPGA缓存空间时,该外侧面板口对应的FPGA缓存空间中可以包括多个缓存子空间,所述多个缓存子空间的数目与FPGA内侧面板口的数目一致,且缓存子空间与FPGA内侧面板口一一对应。即可以在每个外侧面板口唯一对应的FPGA缓存空间中,为每个内侧面板口预先分配唯一对应的FPGA缓存子空间,以使通过该内侧面板口发往该外侧面板口的报文发送到对应于该内侧面板口和该外侧面板口的FPGA缓存子空间。将不同内侧面板口发送的报文分别存储在不同的FPGA缓存子空间,可以区分不同内侧面板口发送的报文,防止由于一个外侧面板口堵塞从而影响其他正常发送报文的内侧面板口。
[0030] 下面结合具体的步骤流程,如图2所示,对实施例一进行说明。
[0031] S201,CPU获取待发送的目标报文。
[0032] 作为一种示例,CPU可以将生成待发送的报文作为目标报文。
[0033] 作为另一种示例,CPU可以将接收到的需要转发的报文作为待发送的目标报文。
[0034] S202,CPU确定所述目标报文指定的外侧面板口,作为目标外侧面板口。
[0035] 待发送的目标报文包含有外侧面板口的标识信息,用于确定发出所述目标报文的外侧面板口。CPU可以根据所述标识信息,确定所述目标报文指定的外侧面板口,作为目标外侧面板口。
[0036] S203,CPU将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间。
[0037] CPU可以通过FPGA的内侧面板口将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间中,所述FPGA缓存空间用于缓存报文。其中CPU发往FPGA的报文可以都由内侧面板口发送到FPGA缓存空间中,FPGA可以再将报文从FPGA缓存空间中发送到外侧面板口,从外侧面板口将报文发出。
[0038] 作为一种示例,CPU可以将所述目标报文发送到CPU缓存中,再从CPU缓存中获取所述目标报文,将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间中。利用CPU缓存和FPGA缓存空间作为二级缓存,可以进一步减少报文的丢失。
[0039] 作为另一种示例,CPU如果检测到所述目标外侧面板口对应的FPGA缓存空间资源充足,即CPU检测到所述目标报文能够存放到FPGA缓存空间的剩余空间中,可以将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间中。CPU检测FPGA缓存空间的具体方法可以是为每个FPGA缓存空间增加一个表示FPGA缓存空间是否满溢的状态寄存器,当FPGA缓存空间为满时,状态寄存器为1,当FPGA缓存空间未满时,状态寄存器为0,CPU可以
访问该状态寄存器可以得知FPGA缓存空间是否满溢。
[0040] 作为另一种示例,CPU如果检测到所述目标外侧面板口对应的FPGA缓存空间资源不足,可以将所述目标报文直接丢弃,或者可以将所述目标报文发送到CPU缓存中;当检测到所述目标外侧面板口对应的FPGA缓存空间资源充足时,则从所述CPU缓存中获取所述目标报文,并再次向所述目标外侧面板口对应的FPGA缓存空间发送所述目标报文。在由于FPGA缓存空间资源不足,报文在FPGA缓存空间处发生堵塞时,可以利用CPU缓存存储堵塞在FPGA缓存空间的报文,减少报文的丢失。
[0041] 通过实施例一的技术方案,为FPGA的每个外侧面板口分配有对应的FPGA缓存空间,使每个需要从该外侧面板口发出的报文都存储在对应于该外侧面板口的FPGA缓存空间中。由于FPGA将接收到的报文全部存储于FPGA缓存空间,再从FPGA缓存空间中获取报文从外侧面板口发送出去,因此当FPGA单位时间内接收报文的数量大于FPGA单位时间内从单个外侧面板口发送报文的数量时,来不及从单个外侧面板口发送出去的报文就存储在该外侧面板口对应的FPGA缓存空间中等待发送,减少报文的丢失,减小网络时延。还可以通过预先分配的唯一对应于单个外侧面板口的FPGA缓存空间,将不同外侧面板口的报文区分开来,防止由于一个面板口堵塞从而影响其他正常发送报文的外侧面板口。还可以利用CPU缓存与FPGA缓存空间作为二级缓存,在FPGA缓存空间资源不足时,保留当前无法存储到FPGA缓存空间中的报文到CPU缓存中,进一步减少了报文的丢失。
[0042] 实施例二:
[0043] 图3是本实施例提供的一种CPU通过FPGA发送报文的网络交换设备的结构示意图。如图3所示,网络交换设备包括CPU和FPGA,FPGA包括至少一个用于接收CPU发送的报文的内侧面板口与至少一个用于向外发送报文的外侧面板口。CPU针对每个外侧面板口,为该外侧面板口预先分配对应的FPGA缓存空间,所述FPGA缓存空间用于缓存报文,所述FPGA从该外侧面板口对应的FPGA缓存空间中获取报文并从该外侧面板口发出。CPU可以用于向FPGA缓存空间发送报文,FPGA可以用于从FPGA缓存空间中获取报文,通过外侧面板口发送出去。
[0044] 其中,可以由CPU针对每个外侧面板口,为该外侧面板口预先分配对应的FPGA缓存空间,所述FPGA缓存空间用于缓存报文。
[0045] 其中,如图1所示,FPGA缓存空间可以在FPGA里。此外,FPGA缓存空间也可以在CPU管理的内存中。
[0046] 其中,为每个外侧面板口预先分配对应的FPGA缓存空间具体可以是各外侧面板口共同对应于同一个FPGA缓存空间。此外,也可以是各外侧面板口对应于不同的FPGA缓存空间,即可以为每个外侧面板口预先分配唯一对应的FPGA缓存空间。
[0047] 其中,为每个外侧面板口预先分配唯一对应的FPGA缓存空间时,该外侧面板口对应的FPGA缓存空间中可以包括多个缓存子空间,所述多个缓存子空间的数目与FPGA内侧面板口的数目一致,且缓存子空间与FPGA内侧面板口一一对应。即可以在每个外侧面板口唯一对应的FPGA缓存空间中,为每个内侧面板口预先分配唯一对应的FPGA缓存子空间,以使通过该内侧面板口发往该外侧面板口的报文发送到对应于该内侧面板口和该外侧面板口的FPGA缓存子空间。将不同内侧面板口发送的报文分别存储在不同的FPGA缓存子空间,可以区分不同内侧面板口发送的报文,防止由于一个外侧面板口堵塞从而影响其他正常发送报文的内侧面板口。
[0048] 本实施例中,网络交换设备包括FPGA和CPU。
[0049] FPGA,用于从每个外侧面板口对应的FPGA缓存空间中获取报文并通过该外侧面板口发出。
[0050] CPU,用于获取待发送的目标报文;确定所述目标报文指定的外侧面板口,作为目标外侧面板口;将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间。
[0051] 待发送的目标报文包含有外侧面板口的标识信息,用于确定发出所述目标报文的外侧面板口。CPU可以用于根据所述标识信息,确定所述目标报文指定的外侧面板口,作为目标外侧面板口;可以通过FPGA的内侧面板口将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间中,所述FPGA缓存空间用于缓存报文,以使FPGA从该外侧面板口对应的FPGA缓存空间中获取报文并从该外侧面板口发出。
[0052] 作为一种设备示例,CPU可以用于将生成待发送的报文作为目标报文。
[0053] 作为另一种设备示例,CPU可以用于将接收到的需要转发的报文作为待发送的目标报文。
[0054] 作为另一种设备示例,在CPU将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间之前,CPU还可以用于将所述目标报文发送到CPU缓存中,再从CPU缓存中获取所述目标报文,将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间中。利用CPU缓存和FPGA缓存空间作为二级缓存,可以进一步减少报文的丢失。
[0055] 作为另一种设备示例,在CPU将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间之前,CPU可以用于如果检测到所述目标外侧面板口对应的FPGA缓存空间资源充足,即CPU检测到所述目标报文能够存放到FPGA缓存空间的剩余空间中,可以将所述目标报文发送到所述目标外侧面板口对应的FPGA缓存空间中。具体CPU检测FPGA缓存空间的方法可以是为每个FPGA缓存空间增加一个表示FPGA缓存空间是否满溢的状态寄存器,当FPGA缓存空间为满时,状态寄存器为1,当FPGA缓存空间未满时,状态寄存器为0,CPU可以访问该状态寄存器可以得知FPGA缓存空间是否满溢。
[0056] 作为另一种设备示例,CPU还可以用于如果检测到所述目标外侧面板口对应的FPGA缓存空间资源不足,可以将所述目标报文直接丢弃,或者可以将所述目标报文发送到CPU缓存中;当检测到所述目标外侧面板口对应的FPGA缓存空间资源充足时,则从所述CPU缓存中获取所述目标报文,并再次向所述目标外侧面板口对应的FPGA缓存空间发送所述目标报文。在由于FPGA缓存空间资源不足,报文在FPGA缓存空间处发生堵塞时,可以利用CPU缓存存储堵塞在FPGA缓存空间的报文,减少报文的丢失。
[0057] 通过实施例二的技术方案,在设备中为FPGA的每个外侧面板口分配有对应的FPGA缓存空间,使每个需要从该外侧面板口发出的报文都存储在对应于该外侧面板口的FPGA缓存空间中。由于FPGA将接收到的报文全部存储于FPGA缓存空间,再从FPGA缓存空间中获取报文从外侧面板口发送出去,因此当FPGA单位时间内接收报文的数量大于FPGA单位时间内从单个外侧面板口发送报文的数量时,来不及从单个外侧面板口发送出去的报文就存储在该外侧面板口对应的FPGA缓存空间中等待发送,减少报文的丢失,减小网络时延。还可以通过预先分配的唯一对应于单个外侧面板口的FPGA缓存空间,将不同外侧面板口的报文区分开来,防止由于一个面板口堵塞从而影响其他正常发送报文的外侧面板口。还可以利用CPU缓存与FPGA缓存空间作为二级缓存,在FPGA缓存空间资源不足时,保留当前无法存储到FPGA缓存空间中的报文到CPU缓存中,进一步减少了报文的丢失。
[0058] 在通过以上的实施例的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助
软件加必需的通用
硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务设备,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
[0059] 上述实施例阐明的系统、方法、模
块或单元,具体可以由计算
机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、
个人数字助理、媒体播放器、导航设备、
电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0060] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0061] 以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。