1.本技术涉及到数据包处理领域,具体而言,涉及数据包追踪处理方法、装置、交换机以 及存储介质。
背景技术:2.可编程交换芯片(programmable switching asic)是通过对交换机芯片的编程,将原本依 赖处理器(cpu)计算的软件版网络应用移植(或称为卸载)到交换芯片硬件上,从而提高 交换机的处理能力。在可编程交换芯片中,数据包处理逻辑可以使用专用语言编程定制。可 编程交换机(programmable switch)是装载可编程交换芯片的交换机,以可编程交换芯片和 cpu做为数据包处理核心,二者可以通过高速串行计算机扩展总线标准(peripheral componentinterconnect express,简称为pcie)总线、网卡等形式连接。
3.随着可编程交换机技术的发展,越来越多的数据包处理操作(即按照处理逻辑对数据包 进行处理,也称为数据包处理逻辑)被卸载至可编程交换芯片内,综合利用交换芯片的高吞 吐特性与一定程度的可编程能力,为将数据包按照一定逻辑来进行处理提供了更高性能的实 现。然而,受限于可编程交换芯片编程能力的局限性,运行在可编程交换芯片内的数据包处 理逻辑无法输出传统意义上的日志与调试信息,当运维人员怀疑芯片内的数据包处理逻辑存 在缺陷时,无法进行调试与故障定位,这增加了故障排查的时间成本和人力成本。
技术实现要素:4.本技术实施例提供了数据包追踪处理方法、装置、交换机以及存储介质,以至少解决现 有技术中无法对可编程交换芯片进行调试与故障定位,从而导致故障排查效率低的问题。
5.根据本技术的一个方面,提供了一种数据包追踪处理方法,包括:在数据包进入交换芯 片进行转发的过程中,所述交换芯片记录所述数据包在所述交换芯片内所经过的轨迹信息; 所述交换芯片将所述数据包经过的轨迹信息作为附加数据添加到所述数据包上,其中,所述 附加数据跟随所述数据包被所述交换片进行转发处理;所述交换芯片根据预先配置的规则将 需要发送的数据包发送给处理器,其中,发送给所述处理器的数据包携带有所述附加数据, 所述交换芯片和所述处理器均位于交换机内。
6.根据本技术的另一个方面,还提供了一种数据包追踪处理方法,包括:处理器将预先配 置的规则发送给交换芯片,其中,所述交换芯片记录数据包在所述交换芯片内所经过的轨迹 信息并且将所述数据包经过的轨迹信息作为附加数据添加到所述数据包上,所述附加数据跟 随所述数据包被所述交换片进行转发处理;所述处理器接收所述交换芯片根据所述规则发送 的数据包,其中,发送给所述处理器的数据包携带有所述附加数据,所述交换芯片和所述处 理器均位于交换机内。
7.根据本技术的另一个方面,提供了一种数据包追踪处理装置,位于交换芯片中,包
括:
8.记录模块,用于在数据包进入交换芯片进行转发的过程中,记录所述数据包在所述交换 芯片内所经过的轨迹信息;附加模块,用于将所述数据包经过的轨迹信息作为附加数据添加 到所述数据包上,其中,所述附加数据跟随所述数据包被所述交换片进行转发处理;第一发 送模块,用于根据预先配置的规则将需要发送的数据包发送给处理器,其中,发送给所述处 理器的数据包携带有所述附加数据,所述交换芯片和所述处理器均位于交换机内。
9.根据本技术的另一个方面,还提供了一种数据包追踪处理装置,位于处理器中,包括: 第二发送模块,用于将预先配置的规则发送给交换芯片,其中,所述交换芯片记录数据包在 所述交换芯片内所经过的轨迹信息并且将所述数据包经过的轨迹信息作为附加数据添加到所 述数据包上,所述附加数据跟随所述数据包被所述交换片进行转发处理;接收模块,用于接 收所述交换芯片根据所述规则发送的数据包,其中,发送给所述处理器的数据包携带有所述 附加数据,所述交换芯片和所述处理器均位于交换机内。
10.根据本技术的另一个方面,还提供了一种交换机,包括交换芯片和处理器;其中,所述 交换芯片用于执行上述述的方法步骤,所述处理器用于执行上述的方法步骤。
11.根据本技术的另一个方面,还提供了一种可读存储介质,其上存储有计算机指令,其中, 该计算机指令被处理器执行时实现上述的方法步骤。
12.在本技术实施例中,采用了在数据包进入交换芯片进行转发的过程中,所述交换芯片记 录所述数据包在所述交换芯片内所经过的轨迹信息;所述交换芯片将所述数据包经过的轨迹 信息作为附加数据添加到所述数据包上,其中,所述附加数据跟随所述数据包被所述交换片 进行转发处理;所述交换芯片根据预先配置的规则将需要发送的数据包发送给处理器,其中, 发送给所述处理器的数据包携带有所述附加数据,所述交换芯片和所述处理器均位于交换机 内。通过本技术解决了现有技术中无法对可编程交换芯片进行调试与故障定位,从而导致故 障排查效率低的问题,为可编程交换芯片的调试与故障定位提供了数据支持,在一定程度上 提高了故障的排查效率。
附图说明
13.构成本技术的一部分的附图用来提供对本技术的进一步理解,本技术的示意性实施例及 其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
14.图1是根据本技术实施例的数据包追踪处理方法的流程图一;
15.图2是根据本技术实施例的通过流水线向处理法发送数据包的示意图;
16.图3是根据本技术实施例的数据包追踪处理方法的流程图二;
17.图4是根据本技术实施例的包括存储服务器和管控服务器的系统示意图;
18.图5是根据本技术实施例的片上信息采集模块的结构示意图;以及,
19.图6是根据本技术实施例的上报包头的格式示意图。
具体实施方式
20.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。 下面将参考附图并结合实施例来详细说明本技术。
21.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机 系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此 处的顺序执行所示出或描述的步骤。
22.在相关技术中,可以对标准网络事件进行上报例如因为拥塞丢包等。这种对标准网络事 件进行上报的处理方式,在可编程网络场景下无法涵盖所有的场景。这是因为,在可编程网 络场景下,编程缺陷可能导致交换芯片产生预期之外的行为,而这些预期之外的行为不属于 标准网络事件,因此,无法进行上报。另外,部分数据包处理逻辑被卸载至交换芯片,对于 这部分处理逻辑在执行时无法上报相关的事件。在相关技术的另一种追踪方式中,可以用于 网络内的数据包追踪,上报设备粒度的路径,即数据包在网络内经过了哪些交换机;但不能 追踪数据包在交换机内的路径,即无法上报数据包在每个交换芯片内经过了哪些处理逻辑。 因此,对于可编程交换芯片而言,一旦出现了数据包处理逻辑导致的故障,其定位和故障排 查效率均比较低。
23.为了解决这个问题,在以下实施例中提供了一种数据包追踪处理方法,图1是根据本申 请实施例的数据包追踪处理方法的流程图一,如图1所示,下面对图1中包括的方法步骤进 行说明。
24.步骤s102,在数据包进入交换芯片进行转发的过程中,所述交换芯片记录所述数据包在 所述交换芯片内所经过的轨迹信息。
25.在该步骤中,“轨迹”可以用来描述数据包所经历过的处理过程,因此轨迹信息可以包 括该数据包均经历了哪些处理操作,另外数据包经过这些处理操作时所产生的其他信息(例 如该数据包被丢弃时产生的丢包原因等)也可以记录在该轨迹信息中。即轨迹信息可以包括 多种内容,例如,数据包在可编程交换芯片内依次执行的处理操作等。如果处理操作是通过 不同模块来实现的则可以记录每个模块的信息;如果在交换芯片内设置了不同的处理逻辑, 每个处理逻辑用于进行按照配置的逻辑顺序对数据包进行操作处理,则轨迹信息还可以包括 每个处理逻辑的信息,例如,用于标识该处理逻辑的标识信息、该处理逻辑中所包括的处理 操作、丢包原因等信息。轨迹信息可以根据需要来进行配置,被配置的信息则被交换芯片记 录,没有配置的信息交换芯片不进行记录等。当然,也可以采用默认配置,在默认配置下所 有信息均被记录。轨迹信息中包括的内容以及需要被交换芯片记录的内容在实际应用时可以 根据需要进行灵活的配置。
26.步骤s104,所述交换芯片将所述数据包经过的轨迹信息作为附加数据添加到所述数据包 上,其中,所述附加数据跟随所述数据包被所述交换片进行转发处理;
27.步骤s106,所述交换芯片根据预先配置的规则将需要发送的数据包发送给处理器(发送 给处理器的数据包在下文中也称为信息上报包),其中,发送给所述处理器的数据包携带有 所述附加数据,所述交换芯片和所述处理器均位于交换机内。
28.在上述步骤中,交换芯片可以记录下轨迹信息,并且这些轨迹信息直接被添加到数据包 上随数据包在交换芯片中进行转发,然后交换芯片根据相应的规则将携带有轨迹信息的数据 包发送给处理器,这样处理器就可以得到出现问题的数据包的轨迹信息,轨迹信息用于数据 包的追踪以确定数据包在交换芯片中的路径等,这些信息都能够用于调试和故障定位,因此, 通过上述步骤解决了现有技术中无法对可编程交换芯片进行调试与故障定位,从而导致故障 排查效率低的问题,为可编程交换芯片的调试与故障定位提供了数
据支持,在一定程度上提 高了故障的排查效率。
29.在交换芯片中,可以通过流水线的方式来提供数据包处理逻辑,流水线是指数据包途径 交换芯片时执行的逻辑,例如,对于来自于交换机接口1的数据包需要经过a处理和b处理, 该a处理可以作为一条流水线a,该b处理也可以作为一条流水线b,这样该数据包经过流 水线a和流水线b;或者,可以将a处理和b处理作为一条流水线c,在这种情况下,该数 据包经过流水线c即可。即流水线用于按照预定逻辑对数据包进行处理,流水线可以由硬件 编程语言编程实现。一条流水线可分为入方向和出方向,分别对应数据包进入和离开当前接 口时执行的逻辑。在如下实施方式中,流水线均指逻辑流水线,多条逻辑流水线可以与同一 条物理流水线实现相对应。在使用流水线提供交换芯片内的数据包处理逻辑的情况下,所述 交换芯片记录所述数据包在所述交换芯片内所经过的轨迹信息可以包括:所述交换芯片记录 所述数据包在所述交换芯片内经过的所有流水线。
30.一条流水线一般包括入方向和出方向,数据包从所述入方向进行入所述流水线,在一个 可选实施方式中,在流水线中还增加了缓存管理单元mmu,该mmu可以在入方向和出方 向之间进行数据包的缓存,并且,mmu还可以根据需要将所述数据包转发本流水线的出方 向或者将所述数据包转发至另一条流水线。即数据包从一条流水线的入方向进入之后,可能 从该流水线的出方向离开,也可能进入到另一条流水线,从另一条流水线的出方向离开。因 此,在该可选方式中,所述交换芯片记录所述数据包在所述交换芯片内经过的所有流水线包 括:所述交换芯片在所述数据包经过每一条流水线的入方向和出方向时进行记录。这样就可 以入方向和出方向为基础进行记录可以得到数据包详细的轨迹,为故障的定位和调试提供更 加详实的数据。
31.在记录数据包所经过的所有流水线时,可以采用位图(bitmap)的方式来进行记录。位 图(bitmap)就是用每一个比特位来存放状态。例如,需要记录数据包经过的流水线时,每 一个流水线均有入方向和出方向,则每个一个流水线均需要两个比特位来记录该数据包是否 经过该流水线的入方向和出方向,可以约定如果该比特位的值为1则表示该数据包经过了该 流水线的入方向或出方向。如果交换芯片最多支持16个流水线,则需要32位比特来表示数 据包经过的流水线的入方向和出方向。通过使用位图的方式来进行表示可以更加清楚的标明 该数据包所经过的所有流水线,当然也可以采用其他数据结构来记录数据包经过的流水线, 无论采用哪种数据结构来记录数据包所经过的流水线,只要进行了记录则都可以得到数据包 的轨迹,为调试和故障定位提供数据基础。
32.在使用了流水线的情况下,可以预先配置一个专门的流水线来向处理器转发数据包。在 该可选实施方式中,所述交换芯片将需要发送的数据包发送给所述处理器可以包括如下步骤: 所述交换芯片将需要发送的数据包发送至预定流水线,其中,所述预定流水线为预先建立的; 所述交换芯片通过所述预定流水线将需要发送的数据包发送给所述处理器。该预定流水线就 是专门用于将需要的数据包发送给处理器的。除了使用专用流水线向处理器发送数据包之外, 还可以通过多播(multicast)或摘要(digest)发送给处理器。下面对摘要进行介绍:对一份 数据,进行一个单向的哈希(hash)函数,生成一个固定长度的hash值,这个值就是这份 数据的摘要。对于需要发送给处理器的数据包可以使用哈希函数生成哈希值,然后将数据包 和/或摘要一起发送给处理器。需要注意的是,hash值可以从数据包和/或元数据中选择字段 拼接而成,不必须涉及密码学中的计算过程。
33.图2是根据本技术实施例的通过流水线向处理法发送数据包的示意图,如图2所示,在 图2中配置里流水线1至流水线n,这些流水线均是用于数据包的处理,每条流水线均可以 根据其处理逻辑进行数据包的转发处理,为了与流水线1到流水线n有所区别,在图2中将 用于向处理器发送数据包的流水线称为流水线x。在每条流水线均可以进行数据包的匹配, 将需要发送给处理器的数据包均转发或者复制一份发送给流水线x,然后通过流水线x将接 收到的数据包发送给处理器。当然,在另一种可选的实施方式中,也可以不配置流水线x, 而是每条流水线在需要给处理器发送数据包的时候,各自直接将数据包发送给处理器即可, 但是这种处理方式,无法对发送给处理器的数据包进行整体控制,在增加了流水线x之后, 可以通过流水线x对发送给处理器的数据包的数量或者速率进行控制。
34.例如,在一个可选实施方式中,可以增加如下功能:所述交换芯片根据所述处理器的资 源使用情况确定发送数据包所使用的速率;所述交换芯片根据所述速率发送需要发送的数据 包。在引入了流水线x之后,可以将限速功能配置在流水线的mmu中,通过mmu控制向 处理器发送数据包的速率。需要注意的是,控制向处理器发送数据包的速率可以通过配置流 水x的方式来实现,也可以通过其他方式来实现,例如还可以在交换芯片和处理器之间增加 用于存储数据包的缓存,通过该缓存来控制交换芯片向处理器发送数据包的速率。
35.交换芯片可以根据预先配置的规则向处理器发送与规则匹配的数据包,例如,对于被交 换芯片丢弃的数据包,一般希望能够得到该数据包被丢弃的原因,因此,可以配置规则,该 规则用于指示将被丢弃的数据包均发送给处理器,该规则可以作为默认规则,即在交换芯片 开始运行时就默认执行的规则。通过这样的处理,交换芯片可以将所有被丢弃的数据均发送 给处理器。在交换芯片发送被丢弃的数据包时,还可以将被丢弃的原因写入到附加数据中。 即在该可选实施方式中,所述交换芯片根据预先配置的规则将需要发送的数据包发送给处理 器可以包括如下步骤:所述交换芯片检测到数据包被丢弃;所述交换芯片将该数据包被丢弃 的原因写入到所述附加数据中;所述交换芯片将被丢弃的数据包发送给所述处理器。附加数 据被附加到数据包上,并作为数据包的一部分在交换芯片内部以及交换芯片和处理器之间转 发,因此,处理器接收到被丢弃的数据包之后可以通过附加数据来得到该数据包被丢弃的原 因,从而更好的进行调试和故障定位。
36.在某些情况下,为了调试或故障定位的需要,还希望能够得到具有特定属性的数据包。 例如希望获取到从预定源ip地址发送过来的数据包。对于这些数据包一方面需要其继续在交 换芯片内进行转发,另外一方面也需要发送给处理器进行相应的处理。因此,可以将这一类 数据包进行镜像(也称为复制),并将复制得到的数据包发送给处理器。即在该可选实施方 式中,所述交换芯片根据预先配置的规则将需要发送的数据包发送给处理器可以包括如下步 骤:所述交换芯片根据预先配置的规则中携带的数据包的属性信息对数据包进行匹配;所述 交换芯片将属性信息与所述规则中属性信息相同的数据包进行复制;所述交换芯片将复制后 的数据包发送给所述处理器。
37.数据包的属性信息可以包括多种,例如,数据包的网络属性就可以作为属性信息的一种, 网络属性可以用于标识数据包的源地址、目的地址等网络信息,可以包括源网络(ip)地址、 源端口(port)号、目的ip地址、目的端口号、协议(protocol)类型等,其中,协议类型用 于指示该包头之后的下一个包头所使用的协议;还可以包括用于标识该数据包优先级的网络 属性:优先级控制信息(type of service,简称为tos)。在下文中为了描述方
便,将源网络 (ip)地址、源端口(port)号、目的ip地址、目的端口号和协议类型称为ip五元组。除了 数据包的网络属性,还可以将数据包进入交换芯片的接口编号也做为数据包的属性信息,通 过该属性信息,就可以复制从某个交换芯片接口进入到该交换芯片的所有数据包。数据包的 属性信息还可以包括时间属性,例如该数据包进入交换芯片的时间等。
38.上述数据包的属性信息均可以作为规则来进行配置,例如,配置的规则可以包括以下至 少之一:源地址段、源端口范围、目的地址段、目的端口范围、协议类型、tos、进入交换 芯片的时间范围、进入交换芯片的接口等。当数据包的属性信息与配置的规则相匹配之后, 则将该数据包复制一份发送给处理器。
39.这些规则均可以是通过处理器发送给交换芯片的,图3是根据本技术实施例的数据包追 踪处理方法的流程图二,如图3所示,下面对图3示出的方法所包括的步骤进行说明。
40.步骤s302,处理器将预先配置的规则发送给交换芯片,其中,所述交换芯片记录数据包 在所述交换芯片内所经过的轨迹信息并且将所述数据包经过的轨迹信息作为附加数据添加到 所述数据包上,所述附加数据跟随所述数据包被所述交换片进行转发处理;
41.步骤s304,所述处理器接收所述交换芯片根据所述规则发送的数据包,其中,发送给所 述处理器的数据包携带有所述附加数据,所述交换芯片和所述处理器均位于交换机内。
42.在上述步骤中,处理器将规则下发给交换芯片,交换芯片由于内部记录了数据包的轨迹 信息并将该轨迹信息作为附加数据添加到的数据包上,因此,交换芯片根据规则向处理器发 送的数据包均携带了附加数据,这些轨迹信息都能够用于调试和故障定位,因此,通过上述 步骤解决了现有技术中无法对可编程交换芯片进行调试与故障定位,从而导致故障排查效率 低的问题,为可编程交换芯片的调试与故障定位提供了数据支持,在一定程度上提高了故障 的排查效率。
43.处理器位于交换机中,在一个可选实施方式中,可以通过交换机设置的接口向处理器发 送规则,该接口可以是网络接口也可以是本地接口。如果是网络接口,则还可以设置一个管 控服务器,管控服务器用于对交换机进行管理,通过管控服务器向交换机的处理器发送上述 规则,处理器在接收到来自管控服务器的所述规则之后,将接收到规则配置给交换芯片。
44.在另一个可选实施方式中,考虑到处理器保存数据包的能力有限,还可以设置一个服务 器用于进行数据包的存储。另外,考虑到处理器是具有运算能力的,因此,所述处理器还可 以将来自交换芯片的数据包根据数据包的附加数据进行汇总之后,上报给用于进行数据存储 的服务器(也可以称为存储服务器)。
45.图4是根据本技术实施例的包括存储服务器和管控服务器的系统示意图,如图4所示, 该系统包括交换机(也称为可编程交换机)、存储服务器和管控服务器,其中包括的模块有: 远程管控模块、本地管控模块、片上信息采集模块、本地数据处理模块和数据存储与消费模 块。下面对这几个模块分别进行说明。
46.远程管控模块(在图4中标识为
①
)运行在管控服务器中,负责接收来自用户的请求, 并将该请求发送至对应可编程交换机的本地管控模块(在图4中标识为
②
),该请求用于对 交换芯片(也称为可编程交换芯片)中使用的规则等进行配置,最终将用户请求的执
行结果 返回给用户,例如规则配置成功,则返回配置成功消息;如果规则配置失败,则返回配置失 败消息并返回失败原因。在一个例子中,来自用户的请求可以分为主动抓包请求与丢包上报 请求。在主动抓包请求中,用户可以提供待抓取数据包的属性信息,例如用户可以提供ip五 元组等信息(包括但不限于源地址段、目的地址段、源端口范围、目的端口范围、优先级控 制信息、进入芯片的接口编号)。该主动抓包请求对应的规则通过管控服务器发送给位于处 理器中的本地管控模块,然后由本地管控模块发送给可编程交换芯片的片上信息采集模块, 可编程交换芯片基于接收到的信息完成数据包采集与上报。在丢包上报请求中,用户无需提 供额外信息,可编程交换芯片将自动采集被主动丢弃的数据包并上报。当然,作为另一个可 选的实施方式,用户也可以配置丢包类型,对于用户配置的丢包类型对应的被丢弃的数据包 可以作为优先级高的数据包优先上报给处理器。
47.本地管控模块运行在可编程交换机的cpu中,负责将远程管控模块发来的请求翻译为芯 片配置,下发至可编程交换芯片,以触发片上信息采集模块(在图4中标识为
③
)进行数据 包采集。
48.片上信息采集模块运行在可编程交换机的可编程交换芯片中,负责根据用户配置的规则 (简称为用户配置)将符合规则的数据包镜像(mirror)至cpu,同时将可编程交换芯片对 该数据包的处理过程涉及到的轨迹信息(也可以称为片上运维信息)作为特殊包头(即附加 数据)附加于该数据包上,一并上报至cpu。
49.本地数据处理模块(在图4中标识为
④
)运行在可编程交换机的cpu中,负责收集由可 编程交换芯片上报的数据包,解析数据包携带的片上运维信息,并根据用户请求的不同,对 片上运维信息与原始报文进行不同程度的汇总,周期性的将汇总后的信息写入远程存储服务 器中。汇总的方法有很多种,例如可以利用sketch方法来进行汇总。sketch是一种流数据聚 合结构,可以存储固定数量的条目,使用多个哈希函数将流数据线性投影在保留数据聚合特 征的较低维空间中。在本实施方式中,使用现有的sketch算法对数据包进行汇总即可,在此 不再赘述。
50.数据存储与消费模块(在图4中标识为
⑤
)运行在存储服务器中,负责对本地数据处理 模块写入的数据进行存储,并根据用户请求对已存储的数据进行筛选与处理,将最终处理结 果发送给远程管控模块返回给用户。
51.需要说明的是,上述实施方式中对设备间以及硬件间的连接方式不进行限定,设备间以及硬件间可以使用各种接口和连接方式。例如,可编程交换机、存储服务器、管控服务器三者间的链路(即图4的a、d和e链路)可以直接相连,也可以通过局域网或广域网间接相连;可编程交换机中的可编程交换芯片与cpu二者间的链路(即图4的b、c链路)可以为 pcie,也可以为本地网络。
52.本可选实施方式中主要的处理过程在交换芯片中,可编程交换芯片内包含多条流水线, 每条流水线分为入方向和出方向,两个方向的计算逻辑均可通过硬件编程实现。所有流水线 的入方向与出方向均被同一个mmu连接,mmu可以将数据包从一条流水线的入方向转发 至另一条流水线的出方向。数据包进入可编程交换芯片后,将根据可编程交换机cpu下发的 配置,在一条或多条流水线间转发(如图5灰色实线所示),并依次执行每条途径流水线中 对应方向的逻辑;可编程交换芯片允许用户通过编程的方式将一组元数据(metadata)附加 于每个数据包上,元数据可以随数据包一同在交换芯片内部流动。元数据
又称中介数据、中 继数据,主要是描述数据属性(property)的信息,在本可选实施方式中,由于附加数据记录 的是轨迹信息,这些轨迹信息可以看作是数据包的属性信息,因此,将附加数据也称为元数 据。
53.图5是根据本技术实施例的片上信息采集模块的结构示意图,如图5所示,该片上信息 采集模块用于管理多个流水线,流水线1到流水线n包括入方向、mmu和出方向,其中, 标记子模块位于第一条流水线的入方向,日志子模块和镜像子模块位于每条流水线的入方向 和出方向,偏转子模块位于mmu中。在如图5中,还包括了流水线x,该流水线x用于向 处理发送数据包,包括mmu和出方向,mmu中包括了限速子模块,出方向包括了上报子 模块。下面对这些模块分别进行说明。
54.标记子模块(在图5中标识为
①
)位于数据包进入交换机后途径的第1条流水线的入方 向的起始位置,基于本地管控模块下发的配置,匹配数据包的ip五元组等信息(包括但不限 于源地址段、目的地址段、源端口范围、目的端口范围、协议类型、tos、进入芯片的接口 编号),并在交换机元数据中记录匹配情况(例如当前数据包是否命中匹配规则,或命中了 哪条匹配规则等)。在此可以将记录该模块匹配情况的元数据称为marking_info。
55.日志子模块(在图5中标识为
②
)位于数据包正常转发流程中途径的每一条流水线中, 能够记录数据包经历的处理逻辑。当一条流水线内的芯片逻辑出现分支或数据包被转发到另 一条流水线时,日志子模块以位图的方式记录当前数据包实际执行的分支。位图就是用每一 个比特位来存放状态。例如,需要记录数据包经过的流水线时,每一个流水线均有入方向和 出方向,则每个一个流水线均需要两个比特位来记录该数据包是否经过该流水线的入方向和 出方向,可以约定如果该比特位的值为1则表示该数据包经过了该流水线的入方向或出方向。 如果交换芯片最多支持16个流水线,则至少需要32位比特来表示数据包经过的流水线的入 方向和出方向。
56.当流水线主动丢弃数据包时,日志子模块会记录丢包原因。二者均保存在元数据中,可 随数据包转发进入其他流水线。
57.镜像子模块(在图5中标识为
③
)位于数据包正常转发流程中途径的每一条流水线的入 方向末尾与出方向末尾,基于本地管控模块下发的配置,匹配如下信息:[1]当前数据包是否 被丢弃(is_drop);[2]当前数据包的丢包原因(drop_reason);[3]当前数据包在标记子模 块的匹配情况(marking_info);[4]当前数据包计划去往的下一条流水线及其对应的接口 (next_port)。若命中下发的配置,则将当前数据包镜像(即复制)至与cpu相连的接口(对 应图5中的流水线x),如图5灰色虚线所示。镜像发生时,当前流水线日志子模块记录的 元数据将被一并复制,同时会将当前流水线对应的接口(current_port)、下一条流水线对应 的接口(next_port)、数据包进入芯片的时间戳(timestamp)写入副本数据包(即复制或镜 像得到的数据包)的元数据中。
[0058]
偏转子模块(在图5中标识为
④
)位于mmu内,数据包正常转发流程中每一次途径mmu 时均被触发。mmu可以将数据包由流水线入方向转发至流水线出方向或其他目标流水线, 当mmu因目标流水线(或目标接口)拥塞而丢包时,偏转子模块将本应被丢弃的包“偏转
”ꢀ
(即转发)至与cpu相连的接口(对应图5中的流水线x)以报告mmu丢包,如图5灰色 虚线所示。流水线x使用独立队列,与其他接口不共享队列,因此不受其他接口拥塞的影响。 偏转发生时,当前流水线日志子模块记录的元数据将被一并转发。
[0059]
限速子模块(在图5中标识为
⑤
)位于mmu内,在通过“镜像”或“偏转”将数据包 发往cpu相连的接口(对应图5中的流水线x)时生效。限速子模块可以基于镜像参数或偏 转参数(例如会话序号,数据包截断,队列序号等)对数据包进行分组,并分别对每组数据 包进行限速,以避免速率过高的数据包进入cpu,挤占系统资源。
[0060]
上报子模块(在图5中标识为
⑥
)位于与cpu相连的接口(对应图5中的流水线x)的 出方向内,是所有通过“镜像”或“偏转”发往cpu的数据包在进入cpu前所途径的唯一 处理逻辑。上报子模块将当前数据包携带的元数据写入信息上报包头,并将信息上报包头插 入至数据包起始位置,即以太包头之前。在本可选实施方式中不限制信息上报包头的具体格 式,包括字段长度与字段排布。图6是根据本技术实施例的上报包头的格式示意图,在图6 中仅仅示出了一种包头格式的例子,并不限制于此。图6中示出的包头各个字段的含义如下:
[0061]
path:记录数据包执行路径的位图(32比特,即32bits)。
[0062]
timestamp:数据包进入芯片的高精度时间戳,用于识别同一数据包多次镜像得到的 多个副本(48bits)。由于每个数据包进入芯片的时间均不相同,所以该高精度时间戳可以 用于唯一标识一个数据包。
[0063]
id:用户任务id(4bits)。
[0064]
current_port:数据包镜像时当前流水线对应的端口号(12bits)。
[0065]
fake_ether_type:取固定值,指明当前数据包类型为信息上报包(16bits)。
[0066]
flags:标志位(4bits)。
[0067]
next_port:数据包镜像时,原数据包本应进入的下一条流水线对应的端口号(12bits)。
[0068]
下表1给出了主动抓包与丢包上报两种场景下,各子模块的配置与工作流程。这里假设 数据包只会经过一条流水线,即图5中的流水线1,被镜像或偏转的数据包进入流水线x。
[0069]
表1
[0070][0071]
通过上述可选实施方式,为卸载至可编程交换机的数据包处理操作提供调试与故障定位 等基础运维能力,上述可选实施方式提供了一种可编程交换芯片内的“类单步调试”机制, 可以得到指定数据包在每条流水线内的执行路径与经过每条流水线后发生的变化;上述可选 实施例还提供一种“全因丢包上报”机制,可以捕获被可编程交换芯片丢弃的数据包(包括 处理逻辑原因而丢弃的数据包与网络原因而丢弃的数据包),支持各类统计与原始丢弃报文 的上报。
[0072]
在本实施例中,提供一种电子装置,包括存储器和处理器,存储器中存储有计算机
程序, 处理器被设置为运行计算机程序以执行以上实施例中的方法。
[0073]
上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质), 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实 现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存 储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动 态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、 电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储 器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存 储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按 照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的 数据信号和载波。
[0074]
这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他 可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设 备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方 框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。
[0075]
该一个实施例中就提供了这样的一种装置。该装置被称为一种数据包追踪处理装置,位 于处理器中,包括:第二发送模块(用于实现上述本地管控模块的功能),用于将预先配置 的规则发送给交换芯片,其中,所述交换芯片记录数据包在所述交换芯片内所经过的轨迹信 息并且将所述数据包经过的轨迹信息作为附加数据添加到所述数据包上,所述附加数据跟随 所述数据包被所述交换片进行转发处理;接收模块(用于实现上述本地数据处理模块的功能), 用于接收所述交换芯片根据所述规则发送的数据包,其中,发送给所述处理器的数据包携带 有所述附加数据,所述交换芯片和所述处理器均位于交换机内。
[0076]
可选地,所述第二发送模块还用于接收来自管控服务器的所述规则,其中,所述管控服 务器用于对所述交换机进行管理;和/或,所述接收模块还用于将来自交换芯片的数据包根据 数据包的附加数据进行汇总之后,上报给用于进行数据存储的服务器。
[0077]
在另一个实施例中,还提供了另一种数据包追踪处理装置,位于交换芯片中,包括:记 录模块,用于在数据包进入交换芯片进行转发的过程中,记录所述数据包在所述交换芯片内 所经过的轨迹信息;附加模块,用于将所述数据包经过的轨迹信息作为附加数据添加到所述 数据包上,其中,所述附加数据跟随所述数据包被所述交换片进行转发处理;所述记录模块 和所述附加模块用于实现上述日志子模块的功能;第一发送模块(用于实现上述限速子模块 镜像子模块、偏转子模块和/或上报子模块的功能),用于根据预先配置的规则将需要发送的 数据包发送给处理器,其中,发送给所述处理器的数据包携带有所述附加数据,所述交换芯 片和所述处理器均位于交换机内。
[0078]
该系统或者装置用于实现上述的实施例中的方法的功能,该系统或者装置中的每个模块 与方法中的每个步骤相对应,已经在方法中进行过说明的,在此不再赘述。
[0079]
可选地,所述记录模块用于记录所述数据包在所述交换芯片内经过的所有流水线,其中, 所述流水线用于按照预定逻辑对数据包进行处理。
[0080]
可选地,所述记录模块用于在所述数据包经过每一条流水线的入方向和出方向时进行记 录,其中,所述交换芯片每一条流水线均包括入方向、缓存管理单元mmu和出方向,
所述 数据包从所述入方向进行入所述流水线,所述mmu用于将所述数据包转发本流水线的出方 向或者将所述数据包转发至另一条流水线。
[0081]
可选地,所述第一发送模块用于在检测到数据包被丢弃之后;将该数据包被丢弃的原因 写入到所述附加数据中;将被丢弃的数据包发送给所述处理器。
[0082]
可选地,所述第一发送模块用于根据预先配置的规则中携带的数据包的属性信息对数据 包进行匹配;将属性信息与所述规则中属性信息相同的数据包进行复制;将复制后的数据包 发送给所述处理器。
[0083]
可选地,所述第一发送模块用于将需要发送的数据包发送至预定流水线,其中,所述预 定流水线为预先建立的;通过所述预定流水线将需要发送的数据包发送给所述处理器。
[0084]
可选地,所述第一发送模块用于根据所述处理器的资源使用情况确定发送数据包所使用 的速率,根据所述速率发送需要发送的数据包。
[0085]
通过上述实施方式解决了现有技术中无法对可编程交换芯片进行调试与故障定位,从而 导致故障排查效率低的问题,为可编程交换芯片的调试与故障定位提供了数据支持,在一定 程度上提高了故障的排查效率。
[0086]
以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本申 请可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进 等,均应包含在本技术的权利要求范围之内。