CN117255055B - 报文转发方法、装置及电子设备 - Google Patents
报文转发方法、装置及电子设备 Download PDFInfo
- Publication number
- CN117255055B CN117255055B CN202311521923.7A CN202311521923A CN117255055B CN 117255055 B CN117255055 B CN 117255055B CN 202311521923 A CN202311521923 A CN 202311521923A CN 117255055 B CN117255055 B CN 117255055B
- Authority
- CN
- China
- Prior art keywords
- parameter
- field
- data length
- updated
- atomic operation
- 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
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000012545 processing Methods 0.000 claims abstract description 47
- 238000004590 computer program Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 description 19
- 230000008859 change Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 230000032683 aging Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/46—Interconnection of networks
- H04L12/4641—Virtual LANs, VLANs, e.g. virtual private networks [VPN]
- H04L12/4645—Details on frame tagging
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/76—Routing in software-defined topologies, e.g. routing between virtual machines
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提出一种报文转发方法、装置及电子设备。该方法包括:从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度;若第一参数的数据长度小于等于原子操作对应的目标数据长度,则对第一参数执行原子操作,得到第二参数,以使第二线程探测到原子操作更新完成后基于第二参数转发报文。本申请对于数据长度小于等于原子操作对应的目标数据长度的参数,在参数更新时采用原子操作进行更新,提高了更新数据的效率。且第二线程只需等待一个原子操作的时间即可成功读取更新后的参数值,等待时间很短,不会影响第二线程对报文的处理,减少了因数据更新导致第二线程报文处理断流或丢包的问题发生。
Description
技术领域
本申请涉及通信技术领域,更为具体来说,本申请涉及一种报文转发方法、装置及电子设备。
背景技术
VPP(Vector Packet Processing,矢量数据包处理)是对报文进行批量处理的技术。VPP支持多线程,多个线程通常分布在CPU(Central Processing Unit,中央处理器)的多个内核上。其中,一个线程负责对各级转发表项、节点编排等进行管理维护,将该线程称为第一线程。其他各线程均用于处理报文,其他各线程均称为第二线程。
在报文转发过程中,第二线程需要查询转发表项、邻接表、链路层信息等,以便将报文转发给下一跳节点。而实际应用中转发表项、邻接表、链路层信息这些信息可能需要更新,相关技术中由第一线程进行更新,在更新过程中各第二线程将暂停对报文的处理,直至更新完成各第二线程才继续对报文进行处理。
但上述相关技术中更新过程中第二线程无法处理报文,会降低报文处理效率,甚至导致报文处理断流、丢包等问题。
发明内容
基于上述技术缺陷,本申请提出了一种报文转发方法、装置及电子设备,通过执行原子操作来更新第一参数,无需加锁,需要使用第一参数的第二线程只需等待原子操作所花费的时间即可继续转发报文,不会产生断流或丢包等问题。
本申请第一方面提供了一种报文转发方法,应用于第一线程,所述方法包括:
从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度;
若所述第一参数的数据长度小于等于原子操作对应的目标数据长度,则对所述第一参数执行原子操作,得到第二参数,以使第二线程探测到所述原子操作更新完成后基于所述第二参数转发报文。
本申请第二方面提供了一种报文转发装置,包括:
获取模块,用于从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度;
更新模块,用于若所述第一参数的数据长度小于等于原子操作对应的目标数据长度,则对所述第一参数执行原子操作,得到第二参数,以使第二线程探测到所述原子操作更新完成后基于所述第二参数转发报文。
本申请第三方面提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序以实现如第一方面所述的方法。
本申请第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现第一方面所述方法的步骤。
本申请的有益效果至少包括:
在本申请实施例中,对于数据长度小于等于原子操作对应的目标数据长度的第一参数,在第一参数更新时采用原子操作进行更新,提高了第一线程更新数据的效率。且第二线程只需等待一个原子操作的时间即可成功读取更新得到的第二参数,等待时间很短,不会影响第二线程对报文的处理,减少了因数据更新导致第二线程报文处理断流或丢包的问题发生。
附图说明
构成说明书的一部分的附图描述了本申请的实施例,并且连同描述一起用于解释本申请的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本申请,其中:
图1示出了本申请一示例性实施例提供的VPP批量处理报文的示意图;
图2示出了本申请一示例性实施例提供的一种报文转发方法的流程示意图;
图3示出了本申请一示例性实施例提供的邻接表中链路层头内存的结构示意图;
图4示出了本申请一示例性实施例提供的一种报文转发装置的结构示意图;
图5示出了本申请一示例性实施例所提供的一种电子设备的结构示意图;
图6示出了本申请一示例性实施例所提供的一种存储介质的示意图。
具体实施方式
以下,将参照附图来描述本申请的实施例。但是应该理解的是,这些描述只是示例性的,而并非要限制本申请的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本申请的概念。对于本领域技术人员来说显而易见的是,本申请可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本申请发生混淆,对于本领域公知的一些技术特征未进行描述。
应予以注意的是,这里所使用的术语仅是为了描述具体实施例,而非意图限制根据本申请的示例性实施例。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式。此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组合。
现在,将参照附图更详细地描述根据本申请的示例性实施例。然而,这些示例性实施例可以多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施例。附图并非是按比例绘制的,其中为了清楚表达的目的,可能放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状以及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。
下面描述根据本申请的示例性实施方式。需要注意的是,下述实施方式仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
VPP是对报文进行批量处理,从而提升报文转发性能。报文的整个生命周期可以被分割为多个阶段,如报文的接收、以太处理、IP模块处理等,采用VPP技术处理报文,则每个阶段都处理一批报文,如接收一批报文,之后对这批报文进行以太处理等,每个阶段对一批报文处理完成后再对报文进行下一个阶段的处理,直至完成对该批报文所有阶段的处理,将该批报文批量转发给下一跳节点。
如图1所示,fooA、fooB、fooC是VPP中负责执行不同阶段报文处理的处理模块,从图中可以看出,fooA阶段批量处理完1到256个报文,才把这一批256个报文交给下一个阶段fooB。类似地,fooB阶段批量处理完1到256个报文,才把这一批256个报文交给下一个阶段fooC。
VPP支持多线程,在多线程模式下,第一线程具有管理功能,负责维护各级转发表项及节点编排等,一个或者多个第二线程负责处理报文。多个线程一般分布在CPU的多个内核上,比如第一线程运行在CPU内核1上,多个第二线程分别运行在内核2、3、4、……上。
多个第二线程在处理报文过程中,需要查询转发表项、邻接表、链路层信息等共享资源,以便将报文转发给下一跳节点。实际应用中这些共享资源可能发生变化,在发生变化时第一线程需要对变化的信息进行相应地更新。
在相关技术中,VPP多线程之间数据同步采用的是类似于带信号和超时机制的自旋锁。在第一线程对共享资源进行更新的过程中,各个第二线程会暂停对报文的处理,此时各第二线程处于自旋状态,直至第一线程完成对共享资源的更新之后,各第二线程才能继续对报文进行处理。如此,每次更新共享资源,第二线程都无法处理报文,会降低报文处理效率,甚至会使具有时效要求的报文因第二线程暂停处理而超时导致业务断流,第二线程暂停处理还可能导致丢包等问题。
基于此,本申请的一些实施例提供一种报文转发方法,将需要更新的第一参数组合成操作系统的原子操作对应的数据长度的数据,从而可以通过执行原子操作来完成对第一参数的更新。这样在更新数据时第二线程只需等待执行一个原子操作的时间即可,无需采用自旋锁或读写锁等锁操作,原子操作比锁操作的开销小很多,第二线程只需等待极短的时间即可读取到更新后的数据,因此既不会读取到错误的数据,也不会影响报文转发,提高了报文转发效率,且很大程度上减少了因数据更新导致的断流或丢包问题。
参见图2,该方法包括以下步骤。
步骤101:从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度。
本申请实施例的执行主体可以为第一线程,第一线程为具有多个内核的CPU中其中一个内核上运行的线程,该CPU可以为能够进行报文转发的网络设备的CPU,该网络设备可以采用VPP技术对报文进行转发处理。该网络设备可以为路由器、网关或能够用于报文转发的虚拟机等。该网络设备的CPU的多个内核中每个内核上运行至少一个线程,其中第一线程具有管理功能,负责维护各级转发表项、邻接表、链路层信息等。本申请实施例将除第一线程以外的其他线程称为第二线程,第二线程负责处理报文,上述转发表项、邻接表、链路层信息等被各第二线程共享使用,因此本申请实施例将这些表项或信息称为共享资源存储对象。换句话说,上述共享资源存储对象包括转发表项、邻接表、链路层信息等中的一种或多种。
上述第一参数为共享资源存储对象中的参数,例如,第一参数可以包括链路层信息中的源MAC地址或目的MAC地址等参数中的一种或多种。再如,第一参数可以为邻接表中记录的板卡号等。
第一参数的参数值可能会因为配置修改等原因而发生变化。例如,源MAC地址和目的MAC地址可能会因为人为配置而发生变化。有多块板卡的分布式设备,邻接表从板卡1切换到板卡2时邻接表中记录的板卡号就需要变化更新。
对于第一参数的参数值是在本地发生变化的,用户会向网络设备提交第一参数的更新指令,该更新指令中携带第一参数的目标值。设备接收到该第一参数的更新指令,确定共享资源存储对象中的该第一参数需要更新。
而对于目的MAC地址这种远端设备的参数,在远端设备中参数的参数值发生变化后,远端设备会发送参数配置更新请求给处于通过一个网络中的其他设备,该参数配置更新请求中携带第一参数的目标值。当前设备接收到远端设备发送的参数配置更新请求后,获知相应第一参数的参数值发生了变化,从而确定共享资源存储对象中需要更新的第一参数。
本申请实施例采用原子操作来更新第一参数的参数值,原子操作是指不会被线程调度机制打断的操作,原子操作开始执行后会一直运行到结束,中间不会切换到另一个线程。原子操作能够处理固定数据长度的数据,该固定数据长度可以为4字节或8字节等。作为一种示例,在X86平台的64位CPU中8字节的数据更新是原子操作的。
在本申请的一些实施例中,确定出现第一参数后,由第一线程从该第一参数所属的共享资源存储对象中获取该第一参数的数据长度。判断该第一参数的数据长度是否大于等于当前设备的操作系统中原子操作对应的目标数据长度,该目标数据长度为原子操作所支持的数据长度,如目标数据长度可以为4字节或8字节等。
若判断出第一参数对应的数据长度大于原子操作对应的目标数据长度,则在第一线程更新第一参数的过程中,采用自旋锁或读写锁等锁操作来实现,具体操作过程在此不再赘述。
若判断出第一参数对应的数据长度小于或等于原子操作对应的目标数据长度,则采用步骤102所示的原子操作的方式进行更新。
步骤102:若第一参数的数据长度小于等于原子操作对应的目标数据长度,则对第一参数执行原子操作,得到第二参数,以使第二线程探测到原子操作更新完成后基于第二参数转发报文。
若确定第一参数的数据长度小于等于上述目标数据长度,则第一线程从第一参数所属的共享资源存储对象中,确定出包含第一参数的待更新字段区间,该待更新字段区间的数据长度等于上述目标数据长度。第一线程基于第一参数的目标值,对待更新字段区间中的数据执行原子操作,得到第二参数。其中,第一参数的目标值是,在第一线程从目标共享资源存储对象中获取第一参数的数据长度之前从用户或其他设备处接收到的。
确定出数据长度为目标数据长度且包含第一参数的待更新字段区间,即可将该待更新字段区间中的数据作为一个整体,通过执行原子操作整体更新该待更新字段区间中的所有数据。如此能够确保更新第一参数的准确性,且通过原子操作进行更新花费时间很短,需要访问该待更新字段区间中的数据的第二线程的等待时间很短,对第二线程处理报文的影响非常小,很大程度上减少了因共享资源更新导致报文处理断流或丢包等问题的发生。
在本申请的一些实施例中,对于共享资源存储对象中参数值小于或等于原子操作对应的目标数据长度的各个参数,在为该共享资源存储对象分配内存时就划分好了该共享资源存储对象中各个参数的排列顺序,以及划分好了数据长度小于等于目标数据长度的参数所属的待更新字段区间。
对于数据长度等于目标数据长度的参数,直接将共享资源存储对象中该参数的参数值所在的字段区间划分为该参数所属的待更新字段区间。例如,假设参数A的参数值的数据长度为8字节,则直接将参数A所在共享资源存储表中参数A所在的8个字节确定为参数A对应的待更新字段区间,若参数A的参数值需要更新,则直接更新参数A所在的这8个字节即可。
对于数据长度小于目标数据长度的参数,则在为共享资源存储对象划分内存时,将该参数所在的字段区间与相邻的字段凑成目标数据长度的待更新字段区间。在一些实施例中,相邻的字段可以是预先配置的空字段。例如,对于链路层信息中的目的MAC地址,目的MAC地址的数据长度为6字节,在链路层信息划分内存时可以在目的MAC地址所在的6字节的字段区间前面预留2字节的空字段,将这个2字节的空字段与目的MAC地址的6字节组成8字节的待更新字段区间。
在另一些实施例中,也可以将数据长度小于目标数据长度的参数与相邻的存储其他参数的字段凑成目标数据长度的待更新字段空间。其中相邻的存储其他参数的字段中存储的数据需是其他参数的完整参数值。例如,对于链路层信息中的源MAC地址,源MAC地址的数据长度为6字节,可以将源MAC地址所在的6字节的字段区间与后面相邻的用于存储vlan(虚拟局域网)信息的2字节的字段区间凑成8字节的待更新字段区间。
对于转发表、邻接表、链路层信息等共享资源存储对象中数据长度小于等于目标数据长度的参数,都按照上述方式在为共享资源存储对象划分内存时就分配好参数对应的待更新字段区间。这样在设备像内存中存储共享资源存储对象时,就将参数存储在对应的待更新字段区间中。
当检测到第一参数需要更新时,从第一参数所属的共享资源存储对象中,查询预先划分的包含第一参数的字段区间,该字段区间的数据长度等于目标数据长度。将查询到的该字段区间作为待更新字段区间。
在内存划分时就配置好第一参数对应的待更新字段区间,当需要更新时可以直接对存储该第一参数的待更新字段区间执行原子操作进行更新,更新过程执行的操作简便,更新效率很高,对待更新字段区间内的数据进行整体更新,能够减少更新导致数据出错的概率。且执行原子操作进行更新,更新耗时短,对报文处理影响非常小。
在本申请的另一些实施例中,也可以不在内存划分时就配置好参数所属的待更新字段区间。而是在出现需更新的第一参数时,临时确定第一参数对应的待更新字段区间。
在这些实施例中,对于第一参数的数据长度等于目标数据长度的情况下,将第一参数所属的共享资源存储对象中第一参数所在的字段区间确定为待更新字段区间。
对于第一参数的数据长度小于目标数据长度的情况,从第一参数所属的共享资源存储对象中,查询与第一参数所在字段相邻的候选字段,该候选字段的数据长度等于目标数据长度与第一参数的数据长度之间的差值。将候选字段与第一参数所在字段组成待更新字段区间。
上述候选字段的查询过程包括,在第一参数所属的共享资源存储对象中查找位于该第一参数前面及后面的两处相邻字段,确定这两处相邻字段中是否存在数据长度为目标数据长度与该第一参数的数据长度之差的空字段。若存在这样的空字段,则将该空字段确定为候选字段。
将空字段作为候选字段,后续凑成的待更新字段中仅包括第一参数的参数值,在更新过程中仅更新第一参数的参数值即可,不会对共享资源存储对象中的其他参数的参数值进行处理,从而能够避免因第一参数的更新而使得其他参数的数据出错的情况发生,数据更新的准确性更高。
若确定不存在上述的空字段,则查询与第一参数所在字段相邻且数据长度为差值的字段,若查询到的字段中的参数保持,即查询到的字段中的参数当前无需更新,则将查询到的字段确定为候选字段。
将与第一参数所在字段区间相邻的且所存储的参数无需更新的字段区间作为候选字段。因为该候选字段中的数据当前无需更新,因此后续将该候选字段与第一参数所在字段区间凑成待更新字段区间,并作为一个整体进行原子操作的更新,仅需对第一参数的参数值进行更新,而对该候选字段中的数据进行复制即可,既不会影响候选字段中数据的准确性,又实现了对第一参数采用原子操作进行更新。
进一步地,在不存在空字段的情况下,可以在该第一参数前后相邻,且数据长度为目标数据长度与该第一参数的数据长度之差的两处字段区间中,确定这两处字段区间中是否存在包含完整参数值的字段区间,包含完整参数值的字段区间是指字段区间中的数据是一个或多个参数的所有参数值,不存在一个参数值的一部分在该字段区间中而另一部分不在该字段区间中的情况。
若前后两处字段区间中存在包含完整参数值的字段区间,且包含的参数值当前不需要更新,则从这样的字段区间中选择一个作为候选字段。
将包含完整参数值的字段区间作为候选字段,使得候选字段中参数的参数值能够被整体执行原子操作,而不会被拆分成两部分,一部分执行原子操作,另一部分不执行,从而避免执行原子操作的部分无法被第二线程操作而未执行原子操作的部分能够被第二线程操作所带来的问题。
在本申请的一些实施例中,若上述与第一参数相邻的前后两处字段区间中均包含不完整的参数值,即存在一个参数的一部分在字段区间内,而另一部分不在字段区间内的情况。则可以从这两个字段区间中确定所包含参数无需更新的字段区间,若只有一个字段区间无需更新,则直接将该字段区间作为候选字段。若两个字段区间都无需更新,则从中任选一个作为候选字段区间。若两个字段区间都需要更新,则可以等待这两个字段区间中出现更新完成的字段区间之后再按照上述方式选定候选字段。
由于上述实施例选定的候选字段中存在不完整的参数值,在后续将该候选字段与第一参数所在字段区间凑成待更新字段区间,并对待更新字段区间执行原子操作进行更新时,对于该不完整的参数值所属的参数需进行标记。若在对待更新字段区间更新完成前检测到被标记的参数需要更新,则需要等到待更新字段区间更新完成后,再对被标记的参数进行更新。
通过上述方式,能够使得每个需要更新的参数的所有参数值都能够一起被执行原子操作进行更新,而不会出现同一参数的部分参数值被更新而另外一部分未被更新的情况出现,减小数据更新导致参数值出错的情况发生,进而减少第二线程在处理报文过程中读取到错误数据而导致报文处理出错、失败或丢包等情况。
通过上述任一实施例的方式确定出候选字段之后,将该候选字段与第一参数所在的字段区间组成目标数据长度的待更新字段区间。然后第一线程对该待更新字段区间执行原子操作的更新。
即第一线程复制待更新字段区间中除第一参数的参数值以外的其他数据。按照待更新字段区间中参数的存储顺序,将第一参数值的目标值与复制的其他数据对应替换待更新字段区间中当前存储的数据。
通过上述更新操作,只将第一参数的参数值替换成了目标值,对于第一参数值以外的数据均进行复制,确保第一参数以外的其他数据不会发生变化。通过执行原子操作来更新第一参数,更新过程的耗时很短,提高了第一线程更新共享资源存储对象的效率。而且需使用第一参数的第二线程只需等待一个原子操作的时间,即可读取到更新得到的第二参数,能够防止第二线程读取参数出错,而且第二线程等待时间很短,不会影响第二线程对报文的处理,减少了因共享资源存储对象更新导致报文处理断流或丢包的问题发生。
在第一线程对第一参数执行原子操作进行更新的过程中,第二线程在访问该第一参数时若该原子操作正在执行,则第二线程等待一定时长后再次尝试访问该第一参数,若原子操作仍未执行完则第二线程再次等待该一定时长,第二线程如此反复探测该原子操作是否执行完成,直至探测到该原子操作执行完成后第二线程才能成功访问到更新得到的第二参数,并基于第二参数转发报文。其中,上述一定时长小于原子操作的执行时长。
第二线程探测到原子操作更新完成后,基于第二参数来转发报文。第二线程转发报文的具体过程可以包括,基于报文的入接口对应的VPN(虚拟专用网络)索引,访问该VPN索引对应的转发表,该转发表中包括目的地址、出接口标识及下一跳信息等。根据该报文五元组中包括的目的地址,从该转发表中获取该目的地址对应的出接口标识和下一跳信息。其中,下一跳信息可以包括下一跳的邻接表。从该邻接表中获取该报文对应的链路层头信息。将以太网链路层为例,该链路层头信息包括以太链路层的源MAC地址、目的MAC地址、协议号、VLAN信息等。第二线程将获取到的链路层头信息封装在该报文中,然后将该报文发送给下一跳节点。
在上述转发报文的处理过程中,转发表、邻接表、链路层头信息等表项都属于本申请实施例中的共享资源存储对象,这些表项中数据长度小于等于目标数据长度的参数发生变化时,都可以使用本申请实施例提供的方法进行更新处理。
在本申请实施例中,对于数据长度小于等于原子操作对应的目标数据长度的参数,在参数更新时采用原子操作进行更新,提高了第一线程更新数据的效率。且第二线程只需等待一个原子操作的时间即可成功读取更新后的参数值,等待时间很短,不会影响第二线程对报文的处理,减少了因数据更新导致第二线程报文处理断流或丢包的问题发生。
为了便于理解本申请实施例的报文转发方法,下面以设备的处理器为X86_64位的处理,以链路层头信息中的参数更新为例进行举例说明。
在一种示例中,如图3所示的邻接表中链路层头存储空间的数据排布结构,链路层头中目的MAC地址占用的字段区间为2-8一共6个字节,源MAC地址占用的字段区间为8-14一共6个字节,类型或者VLAN信息占用的字段区间为14-16一共2个字节。
如图3所示,本申请实施例在为邻接表中链路层头划分内存时,就在目的MAC地址前面预留了字段区间为0-2共两个字节的空字段。划分内存时预先配置好0-8一共8个字节的字段区间为目标MAC地址的待更新字段区间。8-16共8个字节的字段区间为源MAC地址的待更新字段区间。
第一线程在存储链路层头信息时就按照图3所示的内存结构来存储,当源MAC地址发生变化时,第一线程对字段区间8-16源MAC地址的待更新字段区间中的数据进行更新,具体将该待更新字段区间中源MAC地址替换为新的源MAC地址,将14-16字段区间中的数据复制。由于该更新操作是对8字节的数据进行操作,而在设备的操作系统中8字节的操作为原子操作。即对源MAC地址的更新操作是通过执行原子操作实现的。
当目的MAC地址发生变化时,第一线程对字段区间0-8目的MAC地址的待更新字段区间中的数据进行更新,具体将该待更新字段区间中目的MAC地址替换为新的目的MAC地址。由于该更新操作是对8字节的数据进行操作,而在设备的操作系统中8字节的操作为原子操作。因此对目的MAC地址的更新操作也是通过执行原子操作实现的。
上述源MAC地址和目的MAC地址各自对应的待更新字段区间,也可以不在划分内存的时候就配置好,而是在需要更新的时候临时确定的。例如,在需要更新源MAC地址时,从源MAC地址前后相邻的字段中选择候选字段。由于源MAC地址自己占6个字节,则只需再凑2个字节即可组成8个字节。因此查看源MAC地址前后各2个字节的字段区间,前面2个字节的字段区间中存储的是目的MAC地址的部分数据,后面2个字节的字段区间中存储的是类型或VLAN信息的完整参数值,因此选择后面2个字节的字段区间作为候选字段,与源MAC地址的6个字节组成待更新字段区间。对该待更新字段区间中的所有数据执行原子操作的更新。
上述对源MAC地址和目的MAC地址的更新操作利用了8字节的原子操作性,无需加锁,第二线程只需等待原子操作的时间就可以继续转发报文,不会断流,且不会获取到错误的链路层头信息。
如图3所示,源MAC地址与目的MAC地址的更新相互之间不会有影响,因此可以同时更新这两个参数,也可以先后更新二者中的任意一个参数。
在X86_64位的处理器中,除了8字节数据操作是原子操作的,4字节数据操作也是原子操作的。因此对于参数的数据长度小于等于4字节的参数,也可以采用凑4字节的方式来利用原子操作更新数据,从而避免加锁,避免报文处理断流。
本申请的实施例除适用于X86_64位的处理器外,对于能够运行VPP且具有原子操作的其他多核处理器均适用。而且本申请的实施例除适用于以太网中的报文处理外,对于串口通信等非以太链路类型的网络中的报文处理也适用。
本申请实施例还提供一种报文转发装置,用于执行上述任一实施例中的报文转发方法,如图4所示,该装置包括:
检测模块201,用于从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度;
更新模块202,用于若第一参数的数据长度小于等于原子操作对应的目标数据长度,则对第一参数执行原子操作,得到第二参数,以使第二线程探测到原子操作更新完成后基于第二参数转发报文。
该装置还包括:接收模块,用于接收第一参数的目标值。
更新模块202,用于确定出包含第一参数的待更新字段区间,待更新字段区间的数据长度等于目标数据长度;基于第一参数的目标值,对待更新字段区间中的数据执行原子操作,得到第二参数。
更新模块202,用于查询预先划分的包含第一参数的字段区间,该字段区间的数据长度等于所述目标数据长度;将查询到的字段区间作为待更新字段区间。
更新模块202,用于若第一参数的数据长度小于目标数据长度,则查询与第一参数所在字段相邻的候选字段,候选字段的数据长度等于目标数据长度与第一参数的数据长度之间的差值;将候选字段与第一参数所在字段组成待更新字段区间。
更新模块202,用于若与第一参数所在字段相邻的字段中存在数据长度为差值的空字段,则将空字段确定为候选字段;若不存在空字段,则查询与第一参数所在字段相邻且数据长度为差值的字段,若查询到的字段中的参数保持,则将查询到的字段确定为候选字段。
更新模块202,用于若第一参数的数据长度等于目标数据长度,则将第一参数所在的字段区间确定为待更新字段区间。
更新模块202,用于对待更新字段区间中除第一参数的参数值以外的其他数据进行复制;按照待更新字段区间中参数的存储顺序,将第一参数的目标值与复制的其他数据对应替换待更新字段区间中当前存储的数据。
在本申请实施例中,共享资源存储对象包括转发表、邻接表中的一种或多种,第一参数包括源MAC、目的MAC中的一种或多种。
本申请实施例提供的报文转发装置与本申请实施例提供的报文转发方法出于相同的申请构思,具有与其采用、运行或实现的方法相同的有益效果。
下面请参考图5,其示出了本申请的一些实施方式所提供的一种电子设备的示意图。如图5所示,所述电子设备7包括:处理器700,存储器701,总线707和通信接口703,所述处理器700、通信接口703和存储器701通过总线707连接;所述存储器701中存储有可在所述处理器700上运行的计算机程序,所述处理器700运行所述计算机程序时执行本申请前述任一实施方式所提供的报文转发方法。
其中,存储器701可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口703(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
总线707可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器701用于存储程序,所述处理器700在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的报文转发方法可以应用于处理器700中,或者由处理器700实现。
处理器700可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器700中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器700可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器701,处理器700读取存储器701中的信息,结合其硬件完成上述方法的步骤。
本申请实施例提供的电子设备与本申请实施例提供的报文转发方法出于相同的申请构思,具有与其采用、运行或实现的方法相同的有益效果。
本申请实施方式还提供一种与前述实施方式所提供的报文转发方法对应的计算机可读存储介质,请参考图6,图6示出的计算机可读存储介质为光盘30,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的报文转发方法。
另外,所述计算机可读存储介质的例子还可以包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器(RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。
本申请的上述实施例提供的计算机可读存储介质与本申请实施例提供的报文转发方法出于相同的申请构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
需要说明的是:在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备有固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。
类似地,应当理解,为了精简本申请并帮助理解各个申请方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,申请方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器( DSP )来实现根据本申请实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序。实现本申请的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种报文转发方法,其特征在于,应用于第一线程,所述方法包括:
从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度;
若所述第一参数的数据长度小于等于原子操作对应的目标数据长度,则对所述第一参数执行原子操作,得到第二参数,以使第二线程探测到所述原子操作更新完成后基于所述第二参数转发报文;
其中,所述第一线程用于维护所述共享资源存储对象,所述第二线程用于负责处理报文,所述共享资源存储对象被各第二线程共享使用;
所述对所述第一参数执行原子操作,包括:确定出数据长度为所述目标数据长度且包含所述第一参数的待更新字段区间,通过执行原子操作整体更新所述待更新字段区间中的所有数据。
2.根据权利要求1所述的方法,其特征在于,所述从与报文转发相关的共享资源存储对象中获取第一参数的数据长度之前,还包括:接收所述第一参数的目标值;
所述对所述第一参数执行原子操作,得到第二参数,包括:
基于所述目标值,对所述待更新字段区间中的数据执行原子操作,得到所述第二参数。
3.根据权利要求2所述的方法,其特征在于,所述确定出包含所述第一参数的待更新字段区间,包括:
查询预先划分的包含所述第一参数的字段区间,所述字段区间的数据长度等于所述目标数据长度;
将查询到的所述字段区间作为所述待更新字段区间。
4.根据权利要求2所述的方法,其特征在于,所述确定出包含所述第一参数的待更新字段区间,包括:
若所述第一参数的数据长度小于所述目标数据长度,则查询与所述第一参数所在字段相邻的候选字段,所述候选字段的数据长度等于所述目标数据长度与所述第一参数的数据长度之间的差值;
将所述候选字段与所述第一参数所在字段组成所述待更新字段区间。
5.根据权利要求4所述的方法,其特征在于,所述查询与所述第一参数所在字段相邻的候选字段,包括:
若与所述第一参数所在字段相邻的字段中存在数据长度为所述差值的空字段,则将所述空字段确定为所述候选字段;
若不存在所述空字段,则查询与所述第一参数所在字段相邻且数据长度为所述差值的字段,若查询到的字段中的参数保持,则将查询到的字段确定为所述候选字段。
6.根据权利要求2所述的方法,其特征在于,所述确定出包含所述第一参数的待更新字段区间,包括:
若所述第一参数的数据长度等于所述目标数据长度,则将所述第一参数所在的字段区间确定为所述待更新字段区间。
7.根据权利要求2-6任一项所述的方法,其特征在于,基于所述目标值,对所述待更新字段区间中的数据执行原子操作,包括:
对所述待更新字段区间中除所述第一参数的参数值以外的其他数据进行复制;
按照所述待更新字段区间中参数的存储顺序,将所述第一参数的目标值与复制的其他数据对应替换所述待更新字段区间中当前存储的数据。
8.根据权利要求1-6任一项所述的方法,其特征在于,所述共享资源存储对象包括转发表、邻接表中的一种或多种,所述第一参数包括源MAC、目的MAC中的一种或多种。
9.一种报文转发装置,其特征在于,包括:
获取模块,用于从与报文转发相关的共享资源存储对象中,获取第一参数的数据长度;
更新模块,用于若所述第一参数的数据长度小于等于原子操作对应的目标数据长度,则对所述第一参数执行原子操作,得到第二参数,以使第二线程探测到所述原子操作更新完成后基于所述第二参数转发报文;
其中,所述第一线程用于维护所述共享资源存储对象,所述第二线程用于负责处理报文,所述共享资源存储对象被各第二线程共享使用;
所述更新模块,用于确定出数据长度为所述目标数据长度且包含所述第一参数的待更新字段区间,通过执行原子操作整体更新所述待更新字段区间中的所有数据。
10.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序以实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311521923.7A CN117255055B (zh) | 2023-11-15 | 2023-11-15 | 报文转发方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311521923.7A CN117255055B (zh) | 2023-11-15 | 2023-11-15 | 报文转发方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117255055A CN117255055A (zh) | 2023-12-19 |
CN117255055B true CN117255055B (zh) | 2024-02-23 |
Family
ID=89131652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311521923.7A Active CN117255055B (zh) | 2023-11-15 | 2023-11-15 | 报文转发方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117255055B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102035690A (zh) * | 2009-09-27 | 2011-04-27 | 中兴通讯股份有限公司 | 基于系统级联合测试行动组织接口的数据传输方法与装置 |
CN105677849A (zh) * | 2016-01-06 | 2016-06-15 | 北京京东尚科信息技术有限公司 | 数据更新方法和装置 |
CN106598747A (zh) * | 2016-12-15 | 2017-04-26 | 东软集团股份有限公司 | 网络数据包的并行处理方法及装置 |
CN108509186A (zh) * | 2018-02-28 | 2018-09-07 | 南京邮电大学 | 一种队列cas原子操作控制方法 |
CN112187647A (zh) * | 2019-07-05 | 2021-01-05 | 华为技术有限公司 | 报文转发方法、设备及计算机可读存储介质 |
CN113141235A (zh) * | 2020-01-20 | 2021-07-20 | 华为技术有限公司 | 处理数据的方法和相关装置 |
CN114064236A (zh) * | 2021-10-27 | 2022-02-18 | 阿里云计算有限公司 | 任务执行方法、装置、设备和存储介质 |
CN114490490A (zh) * | 2020-11-13 | 2022-05-13 | 华为技术有限公司 | 转发表项的处理方法和装置 |
CN116775522A (zh) * | 2022-03-08 | 2023-09-19 | 华为技术有限公司 | 一种基于网络设备的数据处理方法及网络设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120304185A1 (en) * | 2010-02-03 | 2012-11-29 | Nec Corporation | Information processing system, exclusive control method and exclusive control program |
US8458721B2 (en) * | 2011-06-02 | 2013-06-04 | Oracle International Corporation | System and method for implementing hierarchical queue-based locks using flat combining |
US11507559B2 (en) * | 2020-05-25 | 2022-11-22 | Hewlett Packard Enterprise Development Lp | Object sharing by entities using a data structure |
-
2023
- 2023-11-15 CN CN202311521923.7A patent/CN117255055B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102035690A (zh) * | 2009-09-27 | 2011-04-27 | 中兴通讯股份有限公司 | 基于系统级联合测试行动组织接口的数据传输方法与装置 |
CN105677849A (zh) * | 2016-01-06 | 2016-06-15 | 北京京东尚科信息技术有限公司 | 数据更新方法和装置 |
CN106598747A (zh) * | 2016-12-15 | 2017-04-26 | 东软集团股份有限公司 | 网络数据包的并行处理方法及装置 |
CN108509186A (zh) * | 2018-02-28 | 2018-09-07 | 南京邮电大学 | 一种队列cas原子操作控制方法 |
CN112187647A (zh) * | 2019-07-05 | 2021-01-05 | 华为技术有限公司 | 报文转发方法、设备及计算机可读存储介质 |
CN113141235A (zh) * | 2020-01-20 | 2021-07-20 | 华为技术有限公司 | 处理数据的方法和相关装置 |
CN114490490A (zh) * | 2020-11-13 | 2022-05-13 | 华为技术有限公司 | 转发表项的处理方法和装置 |
CN114064236A (zh) * | 2021-10-27 | 2022-02-18 | 阿里云计算有限公司 | 任务执行方法、装置、设备和存储介质 |
CN116775522A (zh) * | 2022-03-08 | 2023-09-19 | 华为技术有限公司 | 一种基于网络设备的数据处理方法及网络设备 |
Non-Patent Citations (1)
Title |
---|
适用于软件定义网络的原子操作技术;吴亚楠;;信息与电脑(理论版)(第24期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117255055A (zh) | 2023-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108353038B (zh) | 支持针对通用多核心系统上的软件流/分组分类的多写入器/多读取器并发的机制 | |
US7287255B2 (en) | System and method for dynamic ordering in a network processor | |
CN102986171B (zh) | 分布式虚拟桥接器环境中的寄存器访问 | |
US10228869B1 (en) | Controlling shared resources and context data | |
CN111937360B (zh) | 最长前缀匹配 | |
US8792498B2 (en) | System and method for enhanced updating layer-2 bridge address table on asymmetric multiprocessing systems | |
EP3441884A1 (en) | Method for managing translation lookaside buffer and multi-core processor | |
CN109802951B (zh) | 一种报文转发方法、设备及存储设备 | |
US9021098B1 (en) | Allocation of interface identifiers within network device having multiple forwarding components | |
US10289384B2 (en) | Methods, systems, and computer readable media for processing data containing type-length-value (TLV) elements | |
US20240152474A1 (en) | On-chip integrated circuit, data processing device, and data processing method | |
CN117255055B (zh) | 报文转发方法、装置及电子设备 | |
CN114710549A (zh) | 一种容器平台中网卡的动态管理方法、系统及业务节点 | |
US10546018B2 (en) | System and method of coalescing writes to a hardware table in a non-disruptive fashion | |
US20030225965A1 (en) | Hitless restart of access control module | |
US20200304368A1 (en) | Accessing processing devices of a network device | |
CN116232894A (zh) | 一种报文处理方法、报文处理装置及存储介质 | |
US7636352B2 (en) | Maintaining filtering database consistency | |
CN113630300B (zh) | 用于报文传输的方法和节点 | |
CN110912797B (zh) | 一种广播报文的转发方法及装置 | |
CN113568863A (zh) | 数据传输方法、路由节点、众核系统、计算机可读介质 | |
CN110365723B (zh) | 非对称服务发现方法及设备 | |
CN117453380B (zh) | 集群的容器组调度方法、系统以及计算机设备 | |
CN111083144B (zh) | 一种服务质量策略配置方法及装置 | |
JP2016015672A (ja) | ネットワーク制御装置、及びネットワーク設定システム |
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 |