CN117336246A - 数据报文的处理方法及装置、电子设备及存储介质 - Google Patents

数据报文的处理方法及装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117336246A
CN117336246A CN202311235819.1A CN202311235819A CN117336246A CN 117336246 A CN117336246 A CN 117336246A CN 202311235819 A CN202311235819 A CN 202311235819A CN 117336246 A CN117336246 A CN 117336246A
Authority
CN
China
Prior art keywords
parameter value
target
slot
hash
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
Application number
CN202311235819.1A
Other languages
English (en)
Inventor
杨主明
董建军
陈翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Metabrain Intelligent Technology Co Ltd
Original Assignee
Suzhou Metabrain Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Metabrain Intelligent Technology Co Ltd filed Critical Suzhou Metabrain Intelligent Technology Co Ltd
Priority to CN202311235819.1A priority Critical patent/CN117336246A/zh
Publication of CN117336246A publication Critical patent/CN117336246A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • H04L47/125Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请实施例提供了一种数据报文的处理方法及装置、电子设备及存储介质,该方法包括:在智能网卡处于负载均衡模式的情况下,通过智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值;在当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与两个目标哈希值对应的多个第一候选槽位;在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位;将当前参数值插入到第一待插入槽位中,并通过目标物理端口转发当前数据报文。

Description

数据报文的处理方法及装置、电子设备及存储介质
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种数据报文的处理方法及装置、电子设备及存储介质。
背景技术
负载均衡(Load balancing)又称负载分担(Load balance)或者负载共享(LoadSharing),是指将流量均匀地通过多个链路转发出去。负载均衡一般用于提高网络的整体处理能力,能够在不改变现有网络结构情况下,扩展网络的带宽、增加网络的吞吐量、加强数据处理能力、提高网络的可用性。
目前,在负载均衡模式下,在进行数据报文的处理时,大多数智能网卡选择数据报文的出端口时通常使用MD(Message Digest Algorithm,消息摘要算法)5、SHA(SecureHash Algorithm,安全哈希算法)等算法进行计算,无法避免哈希冲突,从而导致流量负载不均衡的问题。
由此可见,相关技术中的数据报文的处理方法,存在由于无法避免哈希冲突导致流量负载不均衡的问题。
发明内容
本申请实施例提供了一种数据报文的处理方法及装置、电子设备及存储介质,以至少解决相关技术中的数据报文的处理方法存在由于无法避免哈希冲突导致流量负载不均衡的问题。
根据本申请的一个实施例,提供了一种数据报文的处理方法,包括:在智能网卡处于负载均衡模式的情况下,通过所述智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,其中,所述负载均衡参数是用于进行负载均衡的一个或多个指定参数;使用不同的两个哈希算法分别对所述当前参数值进行哈希处理,得到两个目标哈希值,并遍历一组哈希桶中与所述两个目标哈希值对应的多个候选槽位,其中,所述一组哈希桶中的每个哈希桶中的每个槽位分别与一个哈希值对应,所述每个槽位用于插入对应的两个哈希值包含与所述每个槽位对应的哈希值的参数值,与所述两个目标哈希值对应的多个候选槽位中的每个候选槽位与所述两个目标哈希值中的一个目标哈希值对应;在从所述两个目标哈希值对应的多个候选槽位中均未遍历到所述当前参数值的情况下,从所述两个目标哈希值对应的多个候选槽位中,确定出当前待插入槽位,并将所述当前参数值插入到所述当前待插入槽位中,其中,所述当前待插入槽位为所述一组哈希桶中所述当前参数值待插入到的槽位;在所述当前数据报文为通过目标虚拟端口转发的数据报文、且所述一组哈希桶和与所述目标虚拟端口绑定的、所述智能网卡的多个物理端口具有一一映射关系的情况下,通过目标物理端口转发所述当前数据报文,其中,所述目标物理端口是所述多个物理端口中,与所述当前待插入槽位所在的哈希桶具有映射关系的物理端口。
根据本申请的另一个实施例,提供了一种数据报文的处理装置,包括:第一执行单元,用于在智能网卡处于负载均衡模式的情况下,通过所述智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对所述当前参数值进行哈希处理,得到两个目标哈希值,其中,所述负载均衡参数是用于进行负载均衡的一个或多个指定参数;第一遍历单元,用于在所述当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与所述两个目标哈希值对应的多个第一候选槽位,其中,所述目标虚拟端口与所述智能网卡的多个物理端口绑定,所述第一组哈希桶中的每个第一哈希桶与所述多个物理端口中的一个物理端口对应,所述每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,所述每个第一槽位用于插入对应的两个哈希值包含与所述每个第一槽位对应的哈希值的参数值,所述两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与所述两个目标哈希值中的一个目标哈希值对应;第一确定单元,用于在从所述两个目标哈希值对应的多个第一候选槽位中均未遍历到所述当前参数值的情况下,从所述两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,所述第一待插入槽位为所述第一组哈希桶中所述当前参数值待插入到的槽位;第二执行单元,用于将所述当前参数值插入到所述第一待插入槽位中,并通过目标物理端口转发所述当前数据报文,其中,所述目标物理端口是所述多个物理端口中,与所述第一待插入槽位所在的第一哈希桶对应的物理端口。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请实施例,采用两种哈希算法结合多个哈希桶的方式,在智能网卡处于负载均衡模式的情况下,通过智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值,其中,负载均衡参数是用于进行负载均衡的一个或多个指定参数;在当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与两个目标哈希值对应的多个第一候选槽位,其中,目标虚拟端口与智能网卡的多个物理端口绑定,第一组哈希桶中的每个第一哈希桶与多个物理端口中的一个物理端口对应,每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,每个第一槽位用于插入对应的两个哈希值包含与每个第一槽位对应的哈希值的参数值,两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与两个目标哈希值中的一个目标哈希值对应;在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,第一待插入槽位为第一组哈希桶中当前参数值待插入到的槽位;将当前参数值插入到第一待插入槽位中,并通过目标物理端口转发当前数据报文,其中,目标物理端口是多个物理端口中,与第一待插入槽位所在的第一哈希桶对应的物理端口,由于将多个物理端口与一个虚拟端口进行绑定,每个物理端口与一个哈希桶具有映射关系,对于待转发的数据报文,采用两种哈希算法对与该数据报文对应的参数值进行哈希处理,并使用得到的两个哈希值在多个哈希桶中进行查找可插入的槽位,按照所插入的槽位所属的哈希桶映射到的物理端口,进行数据报文的转发,由于采用两种哈希算法结合多个哈希桶进行数据报文处理,可以避免由于多个参数值映射到同一哈希值时所存在的哈希冲突,从而可以将数据报文更均衡的从多个物理端口转发出去,达到提高智能网卡负载性能的技术效果,解决了相关技术中的数据报文的处理方法存在由于无法避免哈希冲突导致流量负载不均衡的问题。
附图说明
图1是本申请实施例的一种可选的计算机终端的硬件结构框图;
图2是根据本申请实施例的一种可选的数据报文的处理方法的流程示意图;
图3是根据本申请实施例的一种可选的数据报文的处理方法的示意图;
图4是根据本申请实施例的另一种可选的数据报文的处理方法的示意图;
图5是根据本申请实施例的又一种可选的数据报文的处理方法的示意图;
图6是根据本申请实施例的另一种可选的数据报文的处理方法的流程示意图;
图7是根据本申请实施例的又一种可选的数据报文的处理方法的流程示意图;
图8是根据本申请实施例的又一种可选的数据报文的处理方法的流程示意图;
图9是根据本申请实施例的又一种可选的数据报文的处理方法的流程示意图;
图10是根据本申请实施例的又一种可选的数据报文的处理方法的流程示意图;
图11是根据本申请实施例的一种数据报文的处理装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种可选的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的数据报文的处理方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个NIC(Network Interface Controller,网络适配器),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为RF(Radio Frequency,射频)模块,其用于通过无线方式与互联网进行通讯。
根据本申请实施例的一个方面,提供了一种数据报文的处理方法,以由计算机终端中的智能网卡来执行本实施例中的数据报文的处理方法为例,图2是根据本申请实施例的一种可选的数据报文的处理方法的流程示意图,如图2所示,该流程包括如下步骤:
步骤S202,在智能网卡处于负载均衡模式的情况下,通过智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值。
本实施例中的数据报文的处理方法可以应用到通过智能网卡处理数据报文的场景。这里,数据报文(或称,报文数据)可以是网络中交换与传输的数据单元,其可以是不同类型的数据,例如,图片、视频、HTML(HyperText Markup Language,超文本标记语言)文档、软件应用程序、信用卡事务、电子邮件等。对于数据报文,其可以包括将要发送的完整的数据信息,其长短可以不一致,长度不限且可变。其中,对数据报文进行处理可以是对数据报文进行转发处理,也可以对数据报文进行丢弃处理,还可以对数据报文进行其他处理,本实施例中对此不做限定。
智能网卡(Smart NIC)可以包括软件部分和硬件部分,其中,软件部分用来运行网络虚拟化组件,例如,vswitch(Virtual Switch,虚拟网络交换机),而硬件部分一般由FPGA(Field Programmable Gate Array,可编程逻辑器件)或ASIC(Application SpecificIntegrated Circuit,专用集成电路)或NP(Network Processor,网络处理器)实现,用来加速或卸载软件CPU上的相关组件逻辑。
对于智能网卡,可以选择DPU(Data Processing Unit,数据处理器)或者其他网卡。这里,DPU是一种灵活可编程的网卡,与服务器配合使用。DPU一般自带CPU(CentralProcessingUnit,中央处理器),具备一定的计算能力,可以将主机服务器上的部分计算任务卸载到DPU上,例如,将网络、安全、存储中等数据处理功能卸载到可编程硬件芯片执行,从而可以释放主机服务器CPU的算力,降低CPU的消耗,使服务器能够更有效运行关键应用程序和操作系统,优化业务数据处理整体效力。
现有技术中,vswitch通常是宿主机(例如,host)上的一个进程,负责虚拟机之间的网络流量转发。例如,如图3所示,宿主机上的VM(Virtual Machine,虚拟机)的虚拟网卡通过多个硬件队列将数据报文传递到智能网卡上,智能网卡上的vswitch进程通过polling(轮询)的方式依次对每个队列的报文进行收取,然后从物理网卡的MAC(Media AccessControl,媒体存取控制)队列发出。
为了实现网络流量负载均衡,可以将两个或者更多的物理端口绑定成一个虚拟端口,即,网卡bond(绑定),这里,绑定的两个物理端口可以在同一个网卡上,也可以跨网卡。需要说明的是,网卡bond的作用不仅可以实现网络负载均衡,还可以提升带宽,从而提高网卡的吞吐量,还可以增强网络的可用性,例如,当某个端口或者网卡发生故障,流量可以切换到另外一个端口或者网卡。
这里,负载均衡又称负载分担或负载共享,是指将流量均匀地通过多个链路转发出去。负载均衡一般用于提高网络的整体处理能力,能够在不改变现有网络结构情况下,扩展网络的带宽、增加网络的吞吐量、加强数据处理能力、提高网络的可用性。
可选地,网卡bond可以应用在OVS(Open vSwitch,一个支持多层数据转发的高质量虚拟交换机)上。OVS可以支持三种bond模式:
模式一:active-backup(即,一种主备模式)模式,主备模式,一般情况下,只有active转发报文,standby作为备用,当active失效时,standby接替active进行数据转发;
模式二:balance-slb(即,一种负荷分担,根据源MAC地址负荷分担)模式,基于源MAC地址和出方向VLAN(Virtual Local Area Network,虚拟局域网)进行哈希计算确定出端口;
模式三:balance-tcp(即,一种负荷分担,根据源IP地址+TCP端口负荷分担)模式,只在LACP协议下生效,可以基于L2(如目的MAC)、L3(如IP地址)、L4(如TCP端口号)进行哈希计算确定出端口。
对于上述三种bond模式,模式二和模式三具有负载均衡功能,这两种模式在选择出端口时都使用了哈希计算。然而,现有技术中的负载均衡功能纯软件实现,导致开销较大且速度较慢,且哈希计算往往使用常用的MD5、SHA等哈希算法,不能避免哈希冲突,容易出现流量负载不均匀的情况。
需要说明的是,OVS的目的是通过编程扩展支持大规模网络自动化,同时还支持标准的管理接口和协议。随着虚拟化应用普及,需要部署更多的虚拟化交换机,而费用昂贵的闭源虚拟交换机让用户不堪重负,多层虚拟化软件交换机Open vSwitch遵循Apache 2.0开源代-码版权协议,支持跨物理服务器分布式管理、扩展编程、大规模网络自动化和标准化接口,实现了和大多数商业闭源交换机功能类似的软件交换机。
现有大多数智能网卡的负载均衡功能的实现都是调用OVS现有有限的bond(绑定)负载均衡功能,也就是OVS bond中的balance-tcp模式和balance-slb模式。然而通过balance-tcp和balance-slb模式在选择出端口时通常使用使用了MD5、SHA等算法进行计算,无法避免哈希冲突,从而导致流量负载不均衡的问题。
为了至少部分解决上述问题,在本实施例中,可以将多个物理端口与一个虚拟端口进行绑定,每个物理端口与一个哈希桶具有映射关系,对于待转发的数据报文,采用两种哈希算法对与该数据报文对应的参数值进行哈希处理,并使用得到的两个哈希值在多个哈希桶中进行查找可插入的槽位,按照所插入的槽位所属的哈希桶映射到的物理端口,进行数据报文的转发,由于采用两种哈希算法结合多个哈希桶进行数据报文处理,可以避免由于多个参数值映射到同一哈希值时所存在的哈希冲突,从而可以将数据报文更均衡的从多个物理端口转发出去,提高智能网卡的负载性能。
上述两种哈希算法为不同的哈希算法,所映射到的哈希值的位数可以是相同的。两者可以是布谷鸟哈希(Cockoo hash)算法下的哈希算法,这里,布谷鸟哈希是一种解决hash冲突的方法,其目的是使用简单的hash函数来提高hash table(表)的利用率,同时保证O(1)的查询时间。其基本思想是使用2个hash函数来处理碰撞,从而每个key(哈希值)都对应到2个位置。
在本实施例中,在智能网卡处于负载均衡模式的情况下,对于智能网卡上当前待处理的数据报文,即,当前数据报文,可以从当前数据报文中提取出负载均衡参数的参数值,从而得到当前参数值之后,可以使用上述的两种哈希算法对当前参数值进行哈希计算,可以得到对应的两个目标哈希值。上述负载均衡模式可以是balance-tcp或者balance-slb。不同的负载均衡模式的情况下,所对应的从当前数据报文中提取出负载均衡参数是不同的,例如,在负载均衡模式是balance-tcp的情况下,提取出的负载均衡参数可以是源MAC地址和出方向VLAN;在负载均衡模式是balance-slb的情况下,提取出的负载均衡参数可以是五元组(源IP地址,目的IP地址,IP协议类型,源端口号,目的端口号)。
对于获取负载均衡参数的参数值,可以通过智能网卡根据配置的命令获取符合命令的负载均衡参数的参数值,也可以通过人工手动获取的方式,其中,负载均衡参数的数量可以是一个或多个。例如,若配置命令为:port-channel load-balance{src-ip|dst-ip|src-port|dst-port},则表示由源IP、目的IP、源端口以及目的端口的比特序列组成负载均衡参数,此时,可以提取数据报文的报文头中的这四个特征信息,例如,如图4所示,源IP用31比特表示,目的IP用32比特表示,源端口用16比特表示,目的端口用16比特表示,并将源IP、目的IP、源端口和目的端口的比特序组成一个96比特的比特序列用作负载均衡参数的参数值。
可选地,本申请实施例的一种可选的网络架构的简化图,例如,如图5所示,述网络结构包括:流量转发设备510、以及与流量转发设备连接的服务器520,在图5中,流量转发设备510包括n个物理端口,可通过本发明提供的负载均衡方法将接收到的数据报文进行处理后,均衡地通过m个链路转发至服务器520。
步骤S204,在当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与两个目标哈希值对应的多个第一候选槽位。
如果确定出当前数据报文为通过目标虚拟端口转发的数据报文,而该目标虚拟端口与智能网卡的多个物理端口绑定,此时需要确定出该数据报文从哪个物理端口进行转发。对此,可以预先设置第一组哈希桶,该第一组哈希桶中的第一哈希桶与多个物理端口中的物理端口一一对应。每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,每个第一槽位用于插入对应的两个哈希值包含与每个第一槽位对应的哈希值的参数值。
在得到两个目标哈希值之后,可以遍历第一组哈希桶中与两个目标哈希值对应的多个第一候选槽位。两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与两个目标哈希值中的一个目标哈希值对应。第一组哈希桶中的第一哈希桶的数量可以是一个或多个。多个第一候选槽位中的候选槽位的数量与第一哈希桶的数量相关,其可以为第一哈希桶数量的两倍。
这里,目标虚拟端口可以是网络适配器的NIC(network interface card,网卡)交换机上的内部端口,也可以是其他端口。对于NIC交换机中可以包含物理端口,也可以包含虚拟端口。NIC交换机可以将网络流量从物理端口桥接到一个或多个虚拟端口,其可以提供对基础物理网络接口的虚拟化访问。
步骤S206,在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,第一待插入槽位为第一组哈希桶中当前参数值待插入到的槽位。
而每个第一哈希桶中的空余槽位的数量可以为n个,n为大于等于0的正整数,例如,0、1、8等。与两个目标哈希值对应的多个候选槽位中的全部或者部分槽位中已插入有参数值,也可能均未插入参数值。遍历两个目标哈希值对应的多个第一候选槽位可能存在情况是:从两个目标哈希值对应的多个候选槽位中遍历到当前参数值,或者,从两个目标哈希值对应的多个候选槽位中均未遍历到当前参数值。
对于从两个目标哈希值对应的多个候选槽位中遍历到当前参数值的情况,可以将该当前数据报文,从与遍历到的参数值所在的槽位所属的第一哈希桶具有映射关系的物理端口转发。在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值时,可以从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位。当前待插入槽位可以为第一组哈希桶中当前参数值待插入到的槽位,其可以是一个空闲槽位,即,没有插入参数值的槽位,也可以是已插入有参数值的槽位。
在一个示例性实施例中,智能网卡上可以包含两个块随机存储器组,两个块随机存储器组中的每个块随机存储器组包含N个深度为M/2、位数为K比特的块随机存储器,两个块随机存储器组组成M个哈希桶,M个哈希桶中的每个哈希桶包含N个可存储数据的位宽为K的时隙,第一组哈希桶属于M个哈希桶,其中,M和K为大于或者等于1的正整数,M为2的整倍数。
可选地,智能网卡上可以包含两个块随机存储器组,两个块随机存储器组中的每个块随机存储器组可以包含N个深度为M/2、位数为K比特的块随机存储器。两个块随机存储器组可以组成M个哈希桶,M个哈希桶中的每个哈希桶可以包含N个可存储数据的位宽为K的时隙,第一组哈希桶属于M个哈希桶。
例如,硬件实现根据芯片的不同而不同,如硬件为FPGA芯片时,存储器资源可以采用dual-port BRAM(dual-port Block RAM,双端口块随机存储器),M个哈希桶可以由两个块随机存储器组构成,每个块随机存储器组可以包含N个深度为M/2、位数为K比特的块随机存储器,且每个哈希桶可以包含N个可存储数据的位宽为K的时隙。由计算可得,该部分的存储资源开销可以为:
步骤S208,将当前参数值插入到第一待插入槽位中,并通过目标物理端口转发当前数据报文。
在确定出第一待插入槽位之后,与当前待插入槽位所在的哈希桶具有映射关系的物理端口为目标物理端口,可以将当前参数值插入到第一待插入槽位。并通过目标物理端口转发当前数据报文。
在确定出当前待插入槽位之前,可以先预设设定一组哈希桶中的每个哈希桶与各个物理端口的映射关系,组成一个物理端口列表,例如,在物理端口列表中查询哈希桶A可以对应于物理端口A。
例如,如图6所示,可以首先配置负载均衡模式,再根据哈希函数选择模块选择所需要使用的哈希算法,如布谷鸟哈希算法,再将布谷鸟模块初始化,优先建立哈希桶与网卡端口的映射关系表,再根据报文处理模块计算出元素A(即,数据报文的参数值),经过布谷鸟模块,通过哈希计算后根据哈希桶和端口的映射选择输入输出端口。
可选地,布谷鸟哈希算法的查找操作流程,如图7所示,可以首先调用两个布谷鸟哈希算法,算出元素A的两个k位比特的哈希值,此时,布谷鸟模块中已有2的k次幂的哈希桶,且每个哈希桶中有n个槽位,可以读出两个哈希桶中所有槽位并与元素A进行比较,有相等的可以返回1,不相等可以返回0。
可选地,布谷鸟哈希算法的删除操作流程,如图8所示,该查找操作流程与前述布谷鸟哈希算法的查找操作流程的实施例类似,可以首先调用两个布谷鸟哈希算法,算出元素A的两个k位比特的哈希值,此时,布谷鸟模块中已有2的k次幂的哈希桶,且每个哈希桶中有n个槽位,可以读出两个哈希桶中所有槽位并与元素A进行比较,相等的赋值0。
通过上述步骤,在智能网卡处于负载均衡模式的情况下,通过智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,其中,负载均衡参数是用于进行负载均衡的一个或多个指定参数;使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值,并遍历一组哈希桶中与两个目标哈希值对应的多个候选槽位,其中,一组哈希桶中的每个哈希桶中的每个槽位分别与一个哈希值对应,每个槽位用于插入对应的两个哈希值包含与每个槽位对应的哈希值的参数值,与两个目标哈希值对应的多个候选槽位中的每个候选槽位与两个目标哈希值中的一个目标哈希值对应;在从两个目标哈希值对应的多个候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个候选槽位中,确定出当前待插入槽位,并将当前参数值插入到当前待插入槽位中,其中,当前待插入槽位为一组哈希桶中当前参数值待插入到的槽位;在当前数据报文为通过目标虚拟端口转发的数据报文、且一组哈希桶和与目标虚拟端口绑定的、智能网卡的多个物理端口具有一一映射关系的情况下,通过目标物理端口转发当前数据报文,其中,目标物理端口是多个物理端口中,与当前待插入槽位所在的哈希桶具有映射关系的物理端口,解决了相关技术中的数据报文的处理方法存在由于无法避免哈希冲突导致流量负载不均衡的问题,提高了智能网卡的负载性能。
在一个示例性实施例中,在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,包括:
S11,在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,将两个目标哈希值对应的多个第一候选槽位作为多个当前槽位执行以下的槽位确定操作,得到第一目标槽位,其中,两个目标哈希值对应的第一目标槽位为第一待插入槽位:
当多个当前槽位中存在一个空闲的当前槽位时,将一个空闲的当前槽位,确定为第一目标槽位;
当多个当前槽位中存在至少两个空闲的当前槽位时,将至少两个空闲的当前槽位中,所在的哈希桶中空闲的槽位最多的当前槽位,确定为第一目标槽位;
当多个当前槽位中不存在空闲的当前槽位时,将多个当前槽位中随机选取的当前槽位,确定为第一目标槽位;
其中,空闲的槽位是指未插入参数值的槽位。
在从两个目标哈希值对应的多个候选槽位中均未遍历到从当前数据报文中提取出的负载均衡参数的参数值时,此时,可以将两个目标哈希值对应的多个第一候选槽位作为多个当前槽位执行槽位确定操作,其中,多个当前槽位中可以存在一个或多个空闲槽位,也可以不存在空闲槽位。这里,空闲槽位可以是未插入参数值的槽位。
当多个当前槽位中存在一个空闲的当前槽位时,可以将该空闲的当前槽位作为第一目标槽位,此时,可以将当前参数值插入第一目标槽位;当多个当前槽位中存在至少两个空闲的当前槽位时,可以将该至少两个空闲的当前槽位中,所在的哈希桶中空闲的槽位最多的当前槽位作为第一目标槽位,此时,可以将当前参数值插入第一目标槽位;当多个当前槽位中不存在空闲的当前槽位时,可以在多个当前槽位中随机选取当前槽位作为第一目标槽位,此时,可以将当前参数值插入第一目标槽位。
通过本实施例,通过在从两个目标哈希值对应的多个第一候选槽位中均未遍历到所述当前参数值时,确定第一待插入槽位的操作,可以避免哈希冲突,从而避免流量负载不均衡。
在一个示例性实施例中,上述方法还包括:
S21,在第一待插入槽位中存在已插入的历史参数值、且历史参数值被踢出的情况下,循环执行以下的参数值插入操作:
使用两个哈希算法分别对待插入参数值进行哈希处理,得到与待插入参数值对应的两个当前哈希值;
将两个当前哈希值对应的多个第一候选槽位作为多个当前槽位执行槽位确定操作,得到两个当前哈希值对应的第一目标槽位;
在两个当前哈希值对应的第一目标槽位中不存在已插入的参数值的情况下,将待插入参数值插入到两个当前哈希值对应的第一目标槽位,结束执行参数值插入操作;
在两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数达到指定次数的情况下,将待插入参数值插入到两个当前哈希值对应的第一目标槽位,结束执行参数值插入操作;
在两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数未达到指定次数的情况下,将待插入参数值插入到两个当前哈希值对应的第一目标槽位,并将已插入参数值作为待插入参数值执行下一次的参数值插入操作。
当第一待插入槽位中存在已插入的历史参数值、且历史参数值被踢出时,可以循环执行以下的参数值插入操作:
可以使用两种哈希算法分别对待插入参数值进行哈希处理(即,哈希计算),可以计算出待插入参数值所对应的两个当前哈希值。再将两个当前哈希值对应的多个第一候选槽位作为多个当前槽位执行槽位确定操作,从而可以确定两个当前哈希值对应的第一目标槽位,确定第一目标槽位的步骤在前述实施例已做描述,在此不做赘述。
当两个当前哈希值对应的第一目标槽位中不存在已插入的参数值时,可以将待插入参数值插入到两个当前哈希值对应的第一目标槽位中,此时,可以结束执行参数值插入操作。
当两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数未达到指定次数时,可以将待插入参数值插入到两个当前哈希值对应的第一目标槽位中,并且将已插入参数值作为待插入参数值执行下一次的参数值插入操作。
当两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数未达到指定次数时,可以将待插入参数值插入到两个当前哈希值对应的第一目标槽位,并且将已插入参数值作为待插入参数值执行下一次的参数值插入操作。这里,在首次执行参数值插入操作时,待插入参数值可以为历史参数值。
通过本实施例,通过在第一待插入槽位中存在已插入的历史参数值、且历史参数值被踢出的情况下,可以循环执行以下的参数值插入操作,可以避免哈希冲突,从而避免流量负载不均衡。
在一个示例性实施例中,上述方法还包括:
S31,在两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数达到指定次数的情况下,将已插入参数值作为一个缓存参数值写入到缓存队列中;
S32,对缓存队列中的每个缓存参数值分别执行监控操作,其中,监控操作用于监控第一组哈希桶的、每个缓存参数值允许插入的各个槽位中,是否存在满足移除条件的参数值,移除条件为超过预设时长的一段时间内,未接收到对应的数据报文;
S33,在监控到第一组哈希桶中,缓存队列中的第一参数值允许插入的第二目标槽位中所插入的参数值满足移除条件的情况下,将第一参数值插入到第二目标槽位中,并将第一参数值从缓存队列中移除;
S34,在缓存队列中的第二参数值的已缓存时间达到预设时间阈值的情况下,将第二参数值从缓存队列中移除。
当两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数达到指定次数时,可以将已插入参数值写入到缓存队列中。这里,缓存队列中缓存的参数值可以通过epoll方式或者其他方式进行监控。需要说明的是,epoll是通过后台中断的方式来获得就绪的状态。
可选地,如图9所示,以布谷鸟哈希算法为例,在布谷鸟模块插入操作中,可以首先调用两个布谷鸟哈希算法,将元素A(即,数据报文的参数值)分别通过两个布谷鸟哈希算法计算出两个对应的k位比特的哈希值,布谷鸟模块中已有2的k次幂的哈希桶,且每个哈希桶中有n个槽位,此时,可以判断两个哈希桶中是否有空余槽位,若有空余槽位,可以直接将元素A写入空余槽位较多的哈希桶;若两个哈希桶中均没有空余槽位,可以将两个哈希桶中的任意一个槽位的元素随机踢出,再插入之前待插入的元素A,再次判断循环阈值,若参数值插入操作已执行的次数达到指定次数,可以将失败的元素写入到缓存队列中,并采用epoll方式进行监控;若参数值插入操作已执行的次数未达到指定次数,可以将该元素作为待插入参数值执行下一次的参数值插入操作。
可选地,对缓存队列中的每个缓存参数值可以分别对其执行监控操作,以监控第一组哈希桶的、每个缓存参数值允许插入的各个槽位中,是否存在满足移除条件的参数值,这里,移除条件为超过预设时长的一段时间内,未接收到对应的数据报文。
如果监控到第一组哈希桶中,缓存队列中的第一参数值允许插入的第二目标槽位中所插入的参数值满足移除条件,可以将第一参数值插入到第二目标槽位中,并将第一参数值从缓存队列中移除。而第二目标槽位中之前所插入的参数值,可以放入到缓存队列中,也可以直接丢弃。
可选地,还可以监控每个缓存参数值已放入到缓存队列中的时间。如果缓存队列中的第二参数值的已缓存时间达到预设时间阈值,此时继续缓存该参数值的作用不大,可以将第二参数值从缓存队列中移除。
通过本实施例,通过缓存队列缓存从哈希桶中移除的参数值,并对缓存队列中的参数值进行监控,可以避免流量负载不均衡。
在一个示例性实施例中,在使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值之后,上述方法还包括:
S41,遍历第二组哈希桶中与两个目标哈希值对应的多个第二候选槽位,其中,第二组哈希桶中的每个第二哈希桶中的每个第二槽位分别与一个哈希值对应,每个第二槽位用于插入对应的两个哈希值包含与每个第二槽位对应的哈希值的参数值,每个第二哈希桶中的非空槽位下挂有一个流表,两个目标哈希值对应的多个第二候选槽位中的每个第二候选槽位与两个目标哈希值中的一个目标哈希值对应;
S42,在从两个目标哈希值对应的多个第二候选槽位中的目标非空槽位遍历到当前参数值的情况下,对当前数据报文执行目标非空槽位下挂的流表所包含的操作,其中,目标非空槽位下挂的流表所包含的操作包括以下之一:转发,丢弃。
在接收到当前数据报文之后,需要首先确定对其执行的操作。为此,可以设置第二组哈希桶,每个第二哈希桶中的非空槽位下挂有一个流表;并用与前述实施例中类似的方式在第二组哈希桶中的每个第二哈希桶中遍历两个目标哈希值对应的多个第二候选槽位,两个目标哈希值对应的多个第二候选槽位中的每个第二候选槽位与两个目标哈希值中的一个目标哈希值对应。遍历两个目标哈希值对应的多个第二候选槽位的方式与前述实施例中类似,在此不做赘述。
如果从两个目标哈希值对应的多个第二候选槽位中的目标非空槽位遍历到当前参数值时,可以对当前数据报文执行目标非空槽位下挂的流表所包含的操作,目标非空槽位下挂的流表所包含的操作包括以下之一:转发,丢弃。
对于流表的建立,可以当接收到某一参数值对应的第一个数据报文时,将第一个数据报文送入CPU中建立流表,还可以是其他操作。其中,流表中可以记录数据报文的参数值(或者,参数值对应的两个哈希值)与对应动作的关系。
对于流表中的查询处理的整体流程与前述实施例中的查询处理的整体流程类似,如图10所示,可以首先选择好两个哈希算法,完成初始化布谷鸟哈希模块以后,可以建立好布谷鸟哈希模块的哈希元素和流表的映射,哈希桶中每个非空元素都对应一个流表。当收到网络报文时,从报文中提取类似五元组的报文key值,然后调用哈希函数计算两个哈希值,再根据两个哈希值在哈希桶中进行查找。查找到相同的哈希值,则执行其下挂流表所包含的action(即,动作)。
可选地,布谷鸟哈希算法的查找操作流程,如图7所示,可以首先调用两个布谷鸟哈希算法,算出元素A的两个k位比特的哈希值,此时,布谷鸟模块中已有2的k次幂的哈希桶,且每个哈希桶中有n个槽位,可以读出两个哈希桶中所有槽位并与元素A进行比较,有相等的可以返回1,不相等可以返回0。
可选地,布谷鸟哈希算法的删除操作流程,如图8所示,该查找操作流程与前述布谷鸟哈希算法的查找操作流程的实施例类似,在此不做赘述。
需要说明的是,流表是OVS虚拟交换机进行数据转发的依据,可以看做是OVS对网络设备的数据转发能力的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层IP地址路由表,而OVS虚拟交换机中使用的流表原理类似,只是在它的表项中整合了网络中各个层次的网络配置信息(例如报文的五元组:源IP、目的IP、源端口号、目的端口号、协议类型),从而在转发时可以使用更加丰富的规则。
对于流表查找,可以是模糊匹配查找或者精确匹配查找。对于模糊匹配查找,就是查找的字段可以带掩码,例如,10.1.1.0/24,可以匹配10.1.1.1到10.1.1.254共254个IP地址。而对于精确匹配查找的字段不用考虑掩码,换而言之,可以认为所有字段都是全掩码,例如,10.1.1.1/32,只能匹配10.1.1.1一个IP地址。
相关技术中,由于硬件实现模糊匹配查找比较复杂,因此当将OVS卸载到硬件时,绝大多数厂商都只实现精确匹配查找。一般选择报文所有字段或者厂商目前支持的字段(例如,报文的五元组:源IP、目的IP、源端口号、目的端口号、协议类型),结合哈希算法进行流表查找,根据流表查找结果执行对应的action。多数厂商实现中,一个哈希值对应一条流表,而目前常用的CRC16、Toeplitz哈希算法不能避免哈希冲突,一旦出现哈希冲突,很可能出现流量转发不正确的情况。
对于网络设备业务转发模型大致可以分为两种,一种是基于报文进行转发,一种是基于流进行转发。
基于报文转发主要使用在路由器和交换机上,需要对每一个报文独立进行查表(路由主要包括路由表,ARP(Address Resolution Protocol,地址解析协议)表以及其他一些端口控制和QoS(Quality of Service,服务质量)表项,交换主要包括Vlan(VirtualLocal AreaNetwork,虚拟局域网)表,MAC(Media Access Control,媒体访问控制)表和其他一些端口控制和QoS表项,这里不详细描述),然后根据查表结果独立进行转发。这种处理方式每个报文需要查找多次表项,所以对设备的查表性能要求很高。
基于流转发主要使用在网关设备和防火墙上,现在也有部分路由器和交换机使用基于流处理,路由器和交换机是按照上面的表项查找,基于流转发是在流的第一个报文来的时候建立流表,然后把表项的结果放入到流表的结果中,后续报文只需要查找流表即可以转发,可以减少查表次数,对设备的查表性能要求减低,网关设备和防火墙需要按照规则建立流的动作,由于大部分网关和防火墙的规则在流前几个报文中,如果一个报文不能判断动作的话,需要更多的报文进行动作判断,后面该流的报文查流表基于流转发,一般来说,流动作判断在通常CPU完成,流转发在专用转发器件中完成,但也不排除都在其中一个内完成。
通过本实施例,通过流表查询判断当前数据报文所要执行的操作动作,可以避免哈希冲突,从而避免量负载不均匀、流表查找失败导致流量转发不正确的问题,提高了流量转发的准确性。
在一个示例性实施例中,在遍历第二组哈希桶中与两个目标哈希值对应的多个第二候选槽位之后,上述方法还包括:
S51,在从两个目标哈希值对应的多个第二候选槽位中均未遍历到当前参数值的情况下,通过智能网卡向智能网卡所在的目标设备的处理器发送流表获取请求,其中,流表获取请求用于请求获取与当前参数值匹配的流表;
S52,通过智能网卡接收处理器返回的、流表获取请求的响应消息,其中,响应消息中携带有与上述当前参数值匹配的目标流表;
S53,从两个目标哈希值对应的多个第二候选槽位中,确定出第二待插入槽位,其中,第二待插入槽位为第二组哈希桶中当前参数值待插入到的槽位;
S54,将当前参数值插入到第二待插入槽位中,将目标流表下挂到第二待插入槽位,并对当前数据报文执行目标流表所包含的操作,其中,目标流表所包含的操作包括以下之一:转发,丢弃。
在遍历第二组哈希桶中与两个目标哈希值对应的多个第二候选槽位之后,可能出现以下情况:从两个目标哈希值对应的多个第二候选槽位中的目标非空槽位遍历到当前参数值的情况,或者从两个目标哈希值对应的多个第二候选槽位中均未遍历到当前参数值的情况。
当从两个目标哈希值对应的多个第二候选槽位中均未遍历到当前参数值时,可以通过智能网卡向智能网卡所在的目标设备的处理器发送流表获取请求,用于请求获取与当前参数值匹配的流表。
当接收到智能网卡接收处理器返回的、流表获取请求的响应消息,在该响应消息中可以携带与当前参数值匹配的目标流表,再从两个目标哈希值对应的多个第二候选槽位中,确定出第二待插入槽位(即,第二组哈希桶中当前参数值待插入到的槽位),将当前参数值插入到第二待插入槽位中,并对当前数据报文执行目标流表所包含的操作,操作可以是转发,丢弃或其他。
通过本实施例,通过流表查询判断当前数据报文所要执行的操作动作,可以避免哈希冲突,从而避免量负载不均匀、流表查找失败导致流量转发不正确的问题,提高了流量转发的准确性。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
根据本申请实施例的另一方面,还提供了一种数据报文的处理装置,该装置用于实现上述实施例中所提供的数据报文的处理方法,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图11是根据本申请实施例的一种数据报文的处理装置的结构框图,如图10所示,该装置包括:
第一执行单元1102,用于在智能网卡处于负载均衡模式的情况下,通过智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值,其中,负载均衡参数是用于进行负载均衡的一个或多个指定参数;
第一遍历单元1104,用于在当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与两个目标哈希值对应的多个第一候选槽位,其中,目标虚拟端口与智能网卡的多个物理端口绑定,第一组哈希桶中的每个第一哈希桶与多个物理端口中的一个物理端口对应,每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,每个第一槽位用于插入对应的两个哈希值包含与每个第一槽位对应的哈希值的参数值,两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与两个目标哈希值中的一个目标哈希值对应;
第一确定单元1106,用于在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,第一待插入槽位为第一组哈希桶中当前参数值待插入到的槽位;
第二执行单元1108,用于将当前参数值插入到第一待插入槽位中,并通过目标物理端口转发当前数据报文,其中,目标物理端口是多个物理端口中,与第一待插入槽位所在的第一哈希桶对应的物理端口。
通过本申请实施例,在智能网卡处于负载均衡模式的情况下,通过智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对当前参数值进行哈希处理,得到两个目标哈希值,其中,负载均衡参数是用于进行负载均衡的一个或多个指定参数;在当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与两个目标哈希值对应的多个第一候选槽位,其中,目标虚拟端口与智能网卡的多个物理端口绑定,第一组哈希桶中的每个第一哈希桶与多个物理端口中的一个物理端口对应,每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,每个第一槽位用于插入对应的两个哈希值包含与每个第一槽位对应的哈希值的参数值,两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与两个目标哈希值中的一个目标哈希值对应;在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,从两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,第一待插入槽位为第一组哈希桶中当前参数值待插入到的槽位;将当前参数值插入到第一待插入槽位中,并通过目标物理端口转发当前数据报文,其中,目标物理端口是多个物理端口中,与第一待插入槽位所在的第一哈希桶对应的物理端口,可以解决相关技术中的数据报文的处理方法存在由于无法避免哈希冲突导致流量负载不均衡的问题,提高了智能网卡的负载性能。
在一个示例性实施例中,第一确定单元包括:
执行模块,用于在从两个目标哈希值对应的多个第一候选槽位中均未遍历到当前参数值的情况下,将两个目标哈希值对应的多个第一候选槽位作为多个当前槽位执行以下的槽位确定操作,得到第一目标槽位,其中,两个目标哈希值对应的第一目标槽位为第一待插入槽位:
当多个当前槽位中存在一个空闲的当前槽位时,将一个空闲的当前槽位,确定为第一目标槽位;
当多个当前槽位中存在至少两个空闲的当前槽位时,将至少两个空闲的当前槽位中,所在的哈希桶中空闲的槽位最多的当前槽位,确定为第一目标槽位;
当多个当前槽位中不存在空闲的当前槽位时,将多个当前槽位中随机选取的当前槽位,确定为第一目标槽位;其中,空闲的槽位是指未插入参数值的槽位。
在一个示例性实施例中,上述装置还包括:
第三执行单元,用于在第一待插入槽位中存在已插入的历史参数值、且历史参数值被踢出的情况下,循环执行以下的参数值插入操作:
使用两个哈希算法分别对待插入参数值进行哈希处理,得到与待插入参数值对应的两个当前哈希值;
将两个当前哈希值对应的多个第一候选槽位作为多个当前槽位执行槽位确定操作,得到两个当前哈希值对应的第一目标槽位;
在两个当前哈希值对应的第一目标槽位中不存在已插入的参数值的情况下,将待插入参数值插入到两个当前哈希值对应的第一目标槽位,结束执行参数值插入操作;
在两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数达到指定次数的情况下,将待插入参数值插入到两个当前哈希值对应的第一目标槽位,结束执行参数值插入操作;
在两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数未达到指定次数的情况下,将待插入参数值插入到两个当前哈希值对应的第一目标槽位,并将已插入参数值作为待插入参数值执行下一次的参数值插入操作;
其中,在首次执行参数值插入操作时,待插入参数值为历史参数值。
在一个示例性实施例中,上述装置还包括:
写入单元,用于在两个当前哈希值对应的第一目标槽位中存在已插入参数值、且参数值插入操作已执行的次数达到指定次数的情况下,将已插入参数值作为一个缓存参数值写入到缓存队列中;
第四执行单元,用于对缓存队列中的每个缓存参数值分别执行监控操作,其中,监控操作用于监控第一组哈希桶的、每个缓存参数值允许插入的各个槽位中,是否存在满足移除条件的参数值,移除条件为超过预设时长的一段时间内,未接收到对应的数据报文;
第五执行单元,用于在监控到第一组哈希桶中,缓存队列中的第一参数值允许插入的第二目标槽位中所插入的参数值满足移除条件的情况下,将第一参数值插入到第二目标槽位中,并将第一参数值从缓存队列中移除;
移除单元,用于在缓存队列中的第二参数值的已缓存时间达到预设时间阈值的情况下,将第二参数值从缓存队列中移除。
在一个示例性实施例中,上述装置还包括:
第二遍历单元,用于遍历第二组哈希桶中与两个目标哈希值对应的多个第二候选槽位,其中,第二组哈希桶中的每个第二哈希桶中的每个第二槽位分别与一个哈希值对应,每个第二槽位用于插入对应的两个哈希值包含与每个第二槽位对应的哈希值的参数值,每个第二哈希桶中的非空槽位下挂有一个流表,两个目标哈希值对应的多个第二候选槽位中的每个第二候选槽位与两个目标哈希值中的一个目标哈希值对应;
第六执行单元,用于在从两个目标哈希值对应的多个第二候选槽位中的目标非空槽位遍历到当前参数值的情况下,对当前数据报文执行目标非空槽位下挂的流表所包含的操作,其中,目标非空槽位下挂的流表所包含的操作包括以下之一:转发,丢弃。
在一个示例性实施例中,上述装置还包括:
发送单元,用于在从两个目标哈希值对应的多个第二候选槽位中均未遍历到当前参数值的情况下,通过智能网卡向智能网卡所在的目标设备的处理器发送流表获取请求,其中,流表获取请求用于请求获取与当前参数值匹配的流表;
接收单元,用于通过智能网卡接收处理器返回的、流表获取请求的响应消息,其中,响应消息中携带有与上述当前参数值匹配的目标流表;
第二确定单元,用于从两个目标哈希值对应的多个第二候选槽位中,确定出第二待插入槽位,其中,第二待插入槽位为第二组哈希桶中当前参数值待插入到的槽位;
第七执行单元,用于将当前参数值插入到第二待插入槽位中,将目标流表下挂到第二待插入槽位,并对当前数据报文执行目标流表所包含的操作,其中,目标流表所包含的操作包括以下之一:转发,丢弃。
在一个示例性实施例中,智能网卡上包含两个块随机存储器组,两个块随机存储器组中的每个块随机存储器组包含N个深度为M/2、位数为K比特的块随机存储器,两个块随机存储器组组成M个哈希桶,M个哈希桶中的每个哈希桶包含N个可存储数据的位宽为K的时隙,第一组哈希桶属于M个哈希桶,其中,M和K为大于或者等于1的正整数,M为2的整倍数。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
根据本申请实施例的又一方面,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
根据本申请实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请的优选实施例而已,并不用于限制本申请实施例,对于本领域的技术人员来说,本申请实施例可以有各种更改和变化。凡在本申请实施例的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。

Claims (10)

1.一种数据报文的处理方法,其特征在于,包括:
在智能网卡处于负载均衡模式的情况下,通过所述智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对所述当前参数值进行哈希处理,得到两个目标哈希值,其中,所述负载均衡参数是用于进行负载均衡的一个或多个指定参数;
在所述当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与所述两个目标哈希值对应的多个第一候选槽位,其中,所述目标虚拟端口与所述智能网卡的多个物理端口绑定,所述第一组哈希桶中的每个第一哈希桶与所述多个物理端口中的一个物理端口对应,所述每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,所述每个第一槽位用于插入对应的两个哈希值包含与所述每个第一槽位对应的哈希值的参数值,所述两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与所述两个目标哈希值中的一个目标哈希值对应;
在从所述两个目标哈希值对应的多个第一候选槽位中均未遍历到所述当前参数值的情况下,从所述两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,所述第一待插入槽位为所述第一组哈希桶中所述当前参数值待插入到的槽位;
将所述当前参数值插入到所述第一待插入槽位中,并通过目标物理端口转发所述当前数据报文,其中,所述目标物理端口是所述多个物理端口中,与所述第一待插入槽位所在的第一哈希桶对应的物理端口。
2.根据权利要求1所述的方法,其特征在于,所述在从所述两个目标哈希值对应的多个第一候选槽位中均未遍历到所述当前参数值的情况下,从所述两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,包括:
在从所述两个目标哈希值对应的多个第一候选槽位中均未遍历到所述当前参数值的情况下,将所述两个目标哈希值对应的多个第一候选槽位作为多个当前槽位执行以下的槽位确定操作,得到第一目标槽位,其中,所述两个目标哈希值对应的所述第一目标槽位为所述第一待插入槽位:
当所述多个当前槽位中存在一个空闲的当前槽位时,将所述一个空闲的当前槽位,确定为所述第一目标槽位;
当所述多个当前槽位中存在至少两个空闲的当前槽位时,将所述至少两个空闲的当前槽位中,所在的哈希桶中空闲的槽位最多的当前槽位,确定为所述第一目标槽位;
当所述多个当前槽位中不存在空闲的当前槽位时,将所述多个当前槽位中随机选取的当前槽位,确定为所述第一目标槽位;
其中,空闲的槽位是指未插入参数值的槽位。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第一待插入槽位中存在已插入的历史参数值、且所述历史参数值被踢出的情况下,循环执行以下的参数值插入操作:
使用所述两个哈希算法分别对待插入参数值进行哈希处理,得到与所述待插入参数值对应的两个当前哈希值;
将所述两个当前哈希值对应的多个第一候选槽位作为所述多个当前槽位执行所述槽位确定操作,得到所述两个当前哈希值对应的所述第一目标槽位;
在所述两个当前哈希值对应的所述第一目标槽位中不存在已插入的参数值的情况下,将所述待插入参数值插入到所述两个当前哈希值对应的所述第一目标槽位,结束执行所述参数值插入操作;
在所述两个当前哈希值对应的所述第一目标槽位中存在已插入参数值、且所述参数值插入操作已执行的次数达到指定次数的情况下,将所述待插入参数值插入到所述两个当前哈希值对应的所述第一目标槽位,结束执行所述参数值插入操作;
在所述两个当前哈希值对应的所述第一目标槽位中存在已插入参数值、且所述参数值插入操作已执行的次数未达到指定次数的情况下,将所述待插入参数值插入到所述两个当前哈希值对应的所述第一目标槽位,并将所述已插入参数值作为所述待插入参数值执行下一次的所述参数值插入操作;
其中,在首次执行所述参数值插入操作时,所述待插入参数值为所述历史参数值。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述两个当前哈希值对应的所述第一目标槽位中存在已插入参数值、且所述参数值插入操作已执行的次数达到指定次数的情况下,将所述已插入参数值作为一个缓存参数值写入到缓存队列中;
对所述缓存队列中的每个缓存参数值分别执行监控操作,其中,所述监控操作用于监控所述第一组哈希桶的、所述每个缓存参数值允许插入的各个槽位中,是否存在满足移除条件的参数值,所述移除条件为超过预设时长的一段时间内,未接收到对应的数据报文;
在监控到所述第一组哈希桶中,所述缓存队列中的第一参数值允许插入的第二目标槽位中所插入的参数值满足所述移除条件的情况下,将所述第一参数值插入到所述第二目标槽位中,并将所述第一参数值从所述缓存队列中移除;
在所述缓存队列中的第二参数值的已缓存时间达到预设时间阈值的情况下,将所述第二参数值从所述缓存队列中移除。
5.根据权利要求1所述的方法,其特征在于,在所述使用不同的两个哈希算法分别对所述当前参数值进行哈希处理,得到两个目标哈希值之后,所述方法还包括:
遍历第二组哈希桶中与所述两个目标哈希值对应的多个第二候选槽位,其中,所述第二组哈希桶中的每个第二哈希桶中的每个第二槽位分别与一个哈希值对应,所述每个第二槽位用于插入对应的两个哈希值包含与所述每个第二槽位对应的哈希值的参数值,所述每个第二哈希桶中的非空槽位下挂有一个流表,所述两个目标哈希值对应的多个第二候选槽位中的每个第二候选槽位与所述两个目标哈希值中的一个目标哈希值对应;
在从所述两个目标哈希值对应的多个第二候选槽位中的目标非空槽位遍历到所述当前参数值的情况下,对所述当前数据报文执行所述目标非空槽位下挂的流表所包含的操作,其中,所述目标非空槽位下挂的流表所包含的操作包括以下之一:转发,丢弃。
6.根据权利要求5所述的方法,其特征在于,在所述遍历第二组哈希桶中与所述两个目标哈希值对应的多个第二候选槽位之后,所述方法还包括:
在从所述两个目标哈希值对应的多个第二候选槽位中均未遍历到所述当前参数值的情况下,通过所述智能网卡向所述智能网卡所在的目标设备的处理器发送流表获取请求,其中,所述流表获取请求用于请求获取与所述当前参数值匹配的流表;
通过所述智能网卡接收所述处理器返回的、所述流表获取请求的响应消息,其中,所述响应消息中携带有与上述当前参数值匹配的目标流表;
从所述两个目标哈希值对应的多个第二候选槽位中,确定出第二待插入槽位,其中,所述第二待插入槽位为所述第二组哈希桶中所述当前参数值待插入到的槽位;
将所述当前参数值插入到所述第二待插入槽位中,将所述目标流表下挂到所述第二待插入槽位,并对所述当前数据报文执行所述目标流表所包含的操作,其中,所述目标流表所包含的操作包括以下之一:转发,丢弃。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述智能网卡上包含两个块随机存储器组,所述两个块随机存储器组中的每个块随机存储器组包含N个深度为M/2、位数为K比特的块随机存储器,所述两个块随机存储器组组成M个哈希桶,所述M个哈希桶中的每个哈希桶包含N个可存储数据的位宽为K的时隙,所述第一组哈希桶属于所述M个哈希桶,其中,M和K为大于或者等于1的正整数,M为2的整倍数。
8.一种数据报文的处理装置,其特征在于,包括:
第一执行单元,用于在智能网卡处于负载均衡模式的情况下,通过所述智能网卡从当前数据报文中提取出负载均衡参数的参数值,得到当前参数值,并使用不同的两个哈希算法分别对所述当前参数值进行哈希处理,得到两个目标哈希值,其中,所述负载均衡参数是用于进行负载均衡的一个或多个指定参数;
第一遍历单元,用于在所述当前数据报文为通过目标虚拟端口转发的数据报文的情况下,遍历第一组哈希桶中与所述两个目标哈希值对应的多个第一候选槽位,其中,所述目标虚拟端口与所述智能网卡的多个物理端口绑定,所述第一组哈希桶中的每个第一哈希桶与所述多个物理端口中的一个物理端口对应,所述每个第一哈希桶中的每个第一槽位分别与一个哈希值对应,所述每个第一槽位用于插入对应的两个哈希值包含与所述每个第一槽位对应的哈希值的参数值,所述两个目标哈希值对应的多个第一候选槽位中的每个第一候选槽位与所述两个目标哈希值中的一个目标哈希值对应;
第一确定单元,用于在从所述两个目标哈希值对应的多个第一候选槽位中均未遍历到所述当前参数值的情况下,从所述两个目标哈希值对应的多个第一候选槽位中,确定出第一待插入槽位,其中,所述第一待插入槽位为所述第一组哈希桶中所述当前参数值待插入到的槽位;
第二执行单元,用于将所述当前参数值插入到所述第一待插入槽位中,并通过目标物理端口转发所述当前数据报文,其中,所述目标物理端口是所述多个物理端口中,与所述第一待插入槽位所在的第一哈希桶对应的物理端口。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
10.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
CN202311235819.1A 2023-09-22 2023-09-22 数据报文的处理方法及装置、电子设备及存储介质 Pending CN117336246A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311235819.1A CN117336246A (zh) 2023-09-22 2023-09-22 数据报文的处理方法及装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311235819.1A CN117336246A (zh) 2023-09-22 2023-09-22 数据报文的处理方法及装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117336246A true CN117336246A (zh) 2024-01-02

Family

ID=89294441

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311235819.1A Pending CN117336246A (zh) 2023-09-22 2023-09-22 数据报文的处理方法及装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117336246A (zh)

Similar Documents

Publication Publication Date Title
Chaudhary et al. Optimized big data management across multi-cloud data centers: Software-defined-network-based analysis
CN111371779B (zh) 一种基于dpdk虚拟化管理系统的防火墙及其实现方法
Miao et al. Silkroad: Making stateful layer-4 load balancing fast and cheap using switching asics
CN102104541B (zh) 报头处理引擎
US7181742B2 (en) Allocation of packets and threads
US8799507B2 (en) Longest prefix match searches with variable numbers of prefixes
CN1875585B (zh) 利用mac限制来控制动态未知l2泛滥的方法和系统
US7096277B2 (en) Distributed lookup based on packet contents
US11936562B2 (en) Virtual machine packet processing offload
US20130239193A1 (en) Phased bucket pre-fetch in a network processor
JP2002538731A (ja) 高性能ネットワークインターフェースにおけるダイナミックな構文解析
WO2006055691A2 (en) Queued, asynchronous communication architecture interface
US20110258694A1 (en) High performance packet processing using a general purpose processor
EP3844911B1 (en) Systems and methods for generating network flow information
US9729446B1 (en) Protocol-independent packet routing
EP3744066B1 (en) Method and device for improving bandwidth utilization in a communication network
EP3742307A1 (en) Managing network traffic flows
US7248584B2 (en) Network packet processing
CN111740910A (zh) 一种报文处理方法、装置、网络传输设备及报文处理系统
CN111309700B (zh) 一种面向多共享目录树的控制方法及系统
WO2024114703A1 (zh) 一种数据处理方法、智能网卡和电子设备
JP2001211190A (ja) 通信管理装置及び通信管理方法
Pan et al. Nb-cache: Non-blocking in-network caching for high-performance content routers
US9137158B2 (en) Communication apparatus and communication method
CN107659511B (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