一种报文传输方法、CPU以及网络设备与流程

文档序号:12376440阅读:621来源:国知局
一种报文传输方法、CPU以及网络设备与流程

本申请涉及通信领域,尤其涉及一种报文传输方法、CPU以及网络设备。



背景技术:

网络设备(如路由器、交换机等)是以CPU(Central Processing Unit,中央处理器)为核心,进行网络报文的处理与转发,如图1所示,为网络设备的CPU的结构示意图。在CPU内部集成有CPU核、内存控制器、网络控制器1和网络控制器2。网络控制器1在接收到网络报文后,通过内存控制器,将网络报文写入到系统内存的Buffer(缓冲区)中。CPU核从Buffer中获取网络报文,并对网络报文进行修改(如修改网络报文的源IP地址、目的IP地址等),并将修改后的网络报文存储到系统内存的Buffer中,以替换修改前的网络报文。网络控制器2从Buffer中获取到修改后的网络报文,并完成网络报文的发送。

为了提高网络设备的处理能力,可以在CPU内集成多个CPU核,如图2所示,为集成多个CPU核的结构示意图。但是,由于制造工艺等原因,在CPU内集成的CPU核的数量有限,为了进一步提高网络设备的处理能力,在网络设备内部可以部署多个CPU,这多个CPU之间通过总线连接起来,如图3所示,为两个CPU互联的结构示意图,在每个CPU内均可以集成多个CPU核。

如图3所示,网络控制器1在接收到网络报文后,将网络报文写入到系统内存1的Buffer1中。假设由网络控制器2发送该网络报文,则网络控制器2可以通过内存控制器,从Buffer1中获取到该网络报文,网络报文的转发性能较高。

但是,如果由网络控制器4发送该网络报文,则网络控制器4需要经过两个互联控制器和一个内存控制器,才能够从Buffer1中获取到该网络报文,且互联控制器之间的交互是一个非常耗时的操作,因此,网络报文的转发性能较差。



技术实现要素:

本申请提供一种报文传输方法,应用于网络设备的中央处理器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是网络设备的CPU的结构示意图;

图2是集成多个CPU核的结构示意图;

图3是两个CPU互联的结构示意图;

图4和图5是本申请一种实施方式中的应用场景示意图;

图6是本申请一种实施方式中的报文传输方法的流程图。

具体实施方式

在本申请使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请实施例中提出一种报文传输方法,该方法可以应用于网络设备(如路由器、交换机等)的CPU上,且该网络设备可以包括至少两个CPU。其中,各CPU均可以是基于SOC(System on Chip,系统级芯片)的CPU。

在每个CPU内,可以包括至少一个CPU核、一个内存控制器、至少两个网络控制器(包括至少一个用于接收网络报文的网络控制器,为了方便描述,后续称为接收网络控制器;至少一个用于发送网络报文的网络控制器,为了方便描述,后续称为发送网络控制器)、一个内存镜像控制器、一个互联控制器。

在一个例子中,以图4为本申请实施例的应用场景示意图,以网络设备包括CPU1和CPU2为例进行说明,CPU1和CPU2通过总线连接起来,实际应用中,CPU的数量还可以更多。以每个CPU内包含一个CPU核为例进行说明,实际应用中,CPU核的数量还可以更多。以每个CPU内包含两个网络控制器为例进行说明,实际应用中,网络控制器的数量还可以更多。在CPU1内,网络控制器1为接收网络控制器,用于接收网络报文;网络控制器2为发送网络控制器,用于发送网络报文。在CPU2内,网络控制器3为接收网络控制器,用于接收网络报文;网络控制器4为发送网络控制器,用于发送网络报文。

在一个例子中,如图4所示,可以在CPU内配置内存镜像控制器,该内存镜像控制器是用于执行内存镜像功能的硬件装置。在后续过程中,会详细介绍该内存镜像控制器的内存镜像功能。其中,该内存镜像控制器可以为一个独立的控制器,实现内存镜像功能。也可以将内存镜像控制器的内存镜像功能部署在现有的控制器上,如部署在内存控制器或者互联控制器上,在现有的控制器上实现内存镜像功能。为了方便描述,以一个独立的控制器为例进行说明。

在一个例子中,如图5所示,在CPU内部,CPU内的各CPU核、各网络控制器以及该内存镜像控制器可以挂接到CPU片内高速总线上。此外,内存镜像控制器可以与内存控制器连接,且内存镜像控制器可以与互联控制器连接。该内存控制器连接到系统内存,该互联控制器连接另一个CPU的互联控制器。

在一个例子中,每个CPU对应一个系统内存,且该系统内存中包括有为该CPU划分的第一缓冲区以及第二缓冲区。其中,不同CPU对应的系统内存不同,例如,CPU1对应系统内存1,CPU2对应系统内存2,系统内存1和系统内存2不是同一个系统内存,是各自独立的。因此,每个CPU对应的第一缓冲区和第二缓冲区,与其它CPU对应的第一缓冲区和第二缓冲区也是不同的。

针对为该CPU划分第一缓冲区以及第二缓冲区的过程,内存镜像控制器可以在本端CPU关联的系统内存中划分出第一缓冲区,获取对端CPU的第一缓冲区的地址范围,并按照地址范围,在本端CPU关联的系统内存中划分出第二缓冲区,其中,本端CPU对应的第一缓冲区用于存储本端CPU接收到的网络报文,本端CPU对应的第二缓冲区用于存储对端CPU镜像到本端CPU的网络报文。基于此,针对每个CPU来说,本端CPU对应的第一缓冲区中的地址与除本端CPU外的任一CPU对应的第二缓冲区中的地址存在映射关系。

例如,若CPU1和CPU2的系统内存中不存在重叠的地址,假设CPU1的系统内存1为0x0-0x3FFFFFFF,CPU2的系统内存2为0x40000000-0x7FFFFFFF。

CPU1的内存镜像控制器在系统内存1中划分出第一缓冲区,该第一缓冲区的地址为0x30000000-0x3FFFFFFF,并将地址范围(如地址0x30000000和地址0x3FFFFFFF)发送给CPU2。CPU2的内存镜像控制器按照该地址范围,在系统内存2中划分出第二缓冲区,该CPU2的第二缓冲区用于存储CPU1的第一缓冲区中网络报文的镜像,假设第二缓冲区的地址为0x70000000-0x7FFFFFFF,则,可以认为CPU1的第一缓冲区的地址0x30000000与CPU2的第二缓冲区的地址0x70000000具有映射关系,CPU1的第一缓冲区的地址0x30000001与CPU2的第二缓冲区的地址0x70000001具有映射关系,以此类推,CPU1的第一缓冲区的地址0x3FFFFFFF与CPU2的第二缓冲区的地址0x7FFFFFFF具有映射关系。

CPU2的内存镜像控制器在系统内存2中划分出第一缓冲区,该第一缓冲区的地址为0x40000000-0x4FFFFFFF,并将地址范围(如地址0x40000000和地址0x4FFFFFFF)发送给CPU1。CPU1的内存镜像控制器按照该地址范围,在系统内存1中划分出第二缓冲区,该CPU1的第二缓冲区用于存储CPU2的第一缓冲区中网络报文的镜像,假设第二缓冲区的地址为0x10000000-0x1FFFFFFF,则,可以认为CPU2的第一缓冲区的地址0x40000000与CPU1的第二缓冲区的地址0x10000000具有映射关系,CPU2的第一缓冲区的地址0x40000001与CPU1的第二缓冲区的地址0x10000001具有映射关系,以此类推,CPU2的第一缓冲区的地址0x4FFFFFFF与CPU1的第二缓冲区的地址0x1FFFFFFF具有映射关系。

又例如,若CPU1和CPU2的系统内存中存在重叠的地址,假设CPU1的系统内存1为0x0-0x5FFFFFFF,CPU2的系统内存2为0x40000000-0x9FFFFFFF。两者重叠的地址范围为:0x40000000-0x5FFFFFFF。虽然CPU1和CPU2的系统内存中存在重叠的地址,但是由于CPU1的系统内存与CPU2的系统内存不同,因此重叠的地址并不位于同一块系统内存中,而是在两块不同系统内存中配置了相同的地址范围。

CPU1的内存镜像控制器在系统内存1中划分出第一缓冲区,其地址范围包含在上述重叠的地址范围,例如,CPU1的第一缓冲区的地址为0x40000000-0x4FFFFFFF,并将地址范围(如地址0x40000000和地址0x4FFFFFFF)发送给CPU2。CPU2的内存镜像控制器按照该地址范围,在系统内存2中划分出第二缓冲区,该CPU2的第二缓冲区用于存储CPU1的第一缓冲区中网络报文的镜像,例如,CPU1的第二缓冲区的地址可以为0x40000000-0x4FFFFFFF。则,可以认为CPU1的第一缓冲区的地址0x40000000与CPU2的第二缓冲区的地址0x40000000具有映射关系,CPU1的第一缓冲区的地址0x40000001与CPU2的第二缓冲区的地址0x40000001具有映射关系,以此类推,CPU1的第一缓冲区的地址0x4FFFFFFF与CPU2的第二缓冲区的地址0x4FFFFFFF具有映射关系。

CPU2的内存镜像控制器在系统内存2中划分出第一缓冲区,其地址范围包含在上述重叠的地址范围,例如,CPU2的第一缓冲区的地址为0x50000000-0x5FFFFFFF,并将地址范围(如地址0x50000000和地址0x5FFFFFFF)发送给CPU1。CPU1的内存镜像控制器按照该地址范围,在系统内存1中划分出第二缓冲区,该CPU1的第二缓冲区用于存储CPU2的第一缓冲区中网络报文的镜像,例如,CPU1的第二缓冲区的地址可以为0x50000000-0x5FFFFFFF。则,可以认为CPU2的第一缓冲区的地址0x50000000与CPU1的第二缓冲区的地址0x50000000具有映射关系,CPU2的第一缓冲区的地址0x50000001与CPU1的第二缓冲区的地址0x50000001具有映射关系,以此类推,CPU2的第一缓冲区的地址0x5FFFFFFF与CPU1的第二缓冲区的地址0x5FFFFFFF具有映射关系。

在经过上述处理之后,针对CPU1的第一缓冲区中的每个地址,在CPU2的第二缓冲区中均会映射有一个唯一的地址。此外,针对CPU2的第一缓冲区中的每个地址,在CPU1的第二缓冲区中均会映射有一个唯一的地址。

在一个例子中,还可以在CPU1的内存镜像控制器以及CPU2的内存镜像控制器中记录如下内容:CPU1的第一缓冲区的地址与CPU2的第二缓冲区的地址的映射关系,CPU1的第二缓冲区的地址与CPU2的第一缓冲区的地址的映射关系。以上述存在重叠的地址为例,记录CPU1的第一缓冲区的地址0x40000000与CPU2的第二缓冲区的地址0x40000000的映射关系,以此类推,记录CPU1的第一缓冲区的地址0x4FFFFFFF与CPU2的第二缓冲区的地址0x4FFFFFFF的映射关系。此外,记录CPU1的第二缓冲区的地址0x50000000与CPU2的第一缓冲区的地址0x50000000的映射关系,以此类推,记录CPU1的第二缓冲区的地址0x5FFFFFFF与CPU2的第一缓冲区的地址0x5FFFFFFF的映射关系。

在上述应用场景下,参见图6所示,为报文传输方法的流程图。

步骤601,接收网络控制器接收到网络报文,内存镜像控制器将该网络报文存储到本端CPU对应的第一缓冲区,并向对端CPU发送该网络报文的写操作,以使对端CPU存储该网络报文。

步骤602,内存镜像控制器接收到对端CPU的网络报文的写操作时,将该网络报文存储到本端CPU对应的第二缓冲区。

步骤603,内存镜像控制器接收到网络报文的读操作时,从本端CPU对应的第二缓冲区读取该网络报文并发送,该网络报文为对端CPU的接收网络控制器接收到的网络报文。

针对步骤601-步骤603,对端CPU为除本端CPU以外的任一CPU。

针对步骤601,在一个例子中,针对内存镜像控制器将该网络报文存储到本端CPU对应的第一缓冲区,并向对端CPU发送该网络报文的写操作的过程,可以包括:内存镜像控制器接收该接收网络控制器发送的网络报文的写操作,从该写操作中解析出子地址信息为本端CPU对应的第一缓冲区中的地址,则将该网络报文存储到本端CPU对应的第一缓冲区;将该写操作中的子地址信息替换为对端CPU对应的第二缓冲区中的地址,并将修改后的写操作发送给对端CPU。

针对步骤602,在一个例子中,针对将该网络报文存储到本端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为CPU1,且由CPU2的接收网络控制器接收到该网络报文,并存储到CPU2的第一缓冲区、CPU1的第二缓冲区、CPU3的第二缓冲区,则此处的该CPU为CPU2。基于此,CPU1的内存镜像控制器向CPU2发送修改后的网络报文的写操作(携带CPU2对应的第一缓冲区中的地址),由CPU2在自身的第一缓冲区存储修改后的网络报文,而且,CPU2还可以将修改后的网络报文的写操作(携带CPU3对应的第二缓冲区中的地址)发送给CPU3,由CPU3在自身的第二缓冲区存储修改后的网络报文。

针对步骤603,在一个例子中,针对从本端CPU对应的第二缓冲区读取该网络报文并发送的过程,可以包括:内存镜像控制器从该读操作中解析出子地址信息为对端CPU对应的第一缓冲区中的地址,确定对应的本端CPU对应的第二缓冲区中的地址,从本端CPU对应的第二缓冲区读取该网络报文,通过发送网络控制器发送;其中,该读操作是对端CPU确定由本端CPU的发送网络控制器发送该网络报文时发出的。或者,内存镜像控制器从该读操作中解析出子地址信息为本端CPU对应的第二缓冲区中的地址,从本端CPU对应的第二缓冲区读取该网络报文,通过发送网络控制器发送;其中,该读操作是本端CPU的CPU核确定由本端CPU的发送网络控制器发送该网络报文时发出的。

在上述过程中,各子地址信息均可以包括缓冲区中的一个地址以及一个地址长度,如缓冲区中的地址0x40000000和地址长度10,此子地址信息表示网络报文存储在缓冲区中的地址0x40000000-地址0x40000009之间的位置。

基于上述技术方案,本申请实施例中,当CPU发送网络报文时,可以从本端CPU对应的第二缓冲区内获取网络报文,而不用从对端CPU对应的第一缓冲区内获取网络报文,因此,网络报文不需要跨CPU传输,不需要经过两个互联控制器,在一个CPU内就可以完成网络报文的传输,网络报文的转发性能较高,缩短了网络报文的传输时间,提高了网络报文的转发效率。

在一个例子中,以网络控制器1接收到网络报文,网络控制器4发送网络报文为例,则涉及如下过程:网络控制器1接收到网络报文(后续将其称为网络报文1),CPU1的CPU核对网络报文1进行修改(如修改网络报文1的源IP地址、目的IP地址等),得到修改后的网络报文(后续将其称为网络报文2),CPU1的CPU核通知网络控制器4发送网络报文2,网络控制器4发送网络报文2。或者,网络控制器1接收到网络报文1,CPU2的CPU核对网络报文1进行修改,得到修改后的网络报文2,CPU2的CPU核通知网络控制器4发送网络报文2,网络控制器4发送网络报文2。以下对上述两种情况的处理进行详细说明。

情况一、CPU1的CPU核对网络报文1进行修改,CPU1的CPU核通知网络控制器4发送网络报文2。

步骤1、网络控制器1接收到网络报文1,并向CPU1的内存镜像控制器发送写操作,其中,该写操作可以携带网络报文1和子地址信息,且该子地址信息可以为CPU1的第一缓冲区的地址0x40000000和地址长度10。

步骤2、内存镜像控制器从写操作中解析出地址0x40000000和地址长度10,并利用地址0x40000000和地址长度10将网络报文1存储到CPU1的第一缓冲区。例如,内存镜像控制器可以从CPU1的第一缓冲区的地址0x40000000开始,存储网络报文1,其长度为10,因此网络报文1的尾地址是0x40000009。

在一个例子中,内存镜像控制器可以通过CPU1的内存控制器将网络报文1存储到CPU1的第一缓冲区。例如,内存镜像控制器将携带网络报文1和子地址信息的写操作发送给CPU1的内存控制器,由内存控制器将网络报文1存储到CPU1的第一缓冲区,对此存储过程,本申请实施例中不再赘述。

步骤3、基于CPU1对应的第一缓冲区中的地址与CPU2对应的第二缓冲区中的地址的映射关系,内存镜像控制器从CPU2的第二缓冲区中,确定出与上述子地址信息(如地址0x40000000和地址长度10)对应的子地址信息(即确定出的子地址信息为CPU2的第二缓冲区中的子地址信息),如确定出地址0x40000000和地址长度10,并利用确定出的子地址信息将网络报文1存储到CPU2的第二缓冲区。例如,可以从CPU2的第二缓冲区的地址0x40000000开始,存储网络报文1,其长度为10,因此网络报文1的尾地址是0x40000009。

在一个例子中,CPU1的内存镜像控制器可以将携带网络报文1和确定出的子地址信息(即CPU2的第二缓冲区中的地址0x40000000以及地址长度10)的写操作发送给CPU1的互联控制器,由CPU1的互联控制器将该写操作发送给CPU2的互联控制器,并由CPU2的互联控制器将该写操作发送给CPU2的内存镜像控制器,CPU2的内存镜像控制器将该写操作发送给CPU2的内存控制器,由CPU2的内存控制器将网络报文1存储到CPU2的第二缓冲区。

步骤4、CPU1的CPU核从CPU1的第一缓冲区中读取到网络报文1,并对网络报文1进行修改,得到修改后的网络报文2。其中,CPU核读取网络报文1的方式与传统方式相同,在此不再赘述。CPU核对网络报文1进行修改的方式,可以根据实际情况选择,如修改网络报文1的源IP地址和目的IP地址。

步骤5、CPU1的CPU核向CPU1的内存镜像控制器发送写操作,其中,该写操作中可以携带网络报文2和子地址信息,且该子地址信息可以为CPU1的第一缓冲区的地址0x40000000和地址长度10。而且,该写操作中携带的子地址信息就是网络报文1在CPU1的第一缓冲区中对应的存储地址。

步骤6、内存镜像控制器从写操作中解析出地址0x40000000和地址长度10,并利用地址0x40000000和地址长度10将网络报文2存储到CPU1的第一缓冲区。例如,内存镜像控制器可以从CPU1的第一缓冲区的地址0x40000000开始,存储网络报文2,其长度为10,因此网络报文2的尾地址是0x40000009。

在一个例子中,内存镜像控制器可以通过CPU1的内存控制器将网络报文2存储到CPU1的第一缓冲区。例如,内存镜像控制器将携带网络报文2和子地址信息的写操作发送给CPU1的内存控制器,由内存控制器将网络报文2存储到CPU1的第一缓冲区,对此存储过程,本申请实施例中不再赘述。

步骤7、基于CPU1对应的第一缓冲区中的地址与CPU2对应的第二缓冲区中的地址的映射关系,内存镜像控制器从CPU2的第二缓冲区中,确定出与上述子地址信息(如地址0x40000000和地址长度10)对应的子地址信息(即确定出的子地址信息为CPU2的第二缓冲区中的子地址信息),如确定出地址0x40000000和地址长度10,并利用确定出的子地址信息将网络报文2存储到CPU2的第二缓冲区。例如,可以从CPU2的第二缓冲区的地址0x40000000开始,存储网络报文2,其长度为10,因此网络报文2的尾地址是0x40000009。

在一个例子中,CPU1的内存镜像控制器可以将携带网络报文2和确定出的子地址信息(即CPU2的第二缓冲区中的地址0x40000000以及地址长度10)的写操作发送给CPU1的互联控制器,由CPU1的互联控制器将该写操作发送给CPU2的互联控制器,并由CPU2的互联控制器将该写操作发送给CPU2的内存镜像控制器,CPU2的内存镜像控制器将该写操作发送给CPU2的内存控制器,由CPU2的内存控制器将网络报文2存储到CPU2的第二缓冲区。

步骤8、CPU1的CPU核在完成网络报文的修改后,确定由CPU2的网络控制器4发送修改后的网络报文2,对于CPU1的CPU核来说,网络报文2位于CPU1的第一缓冲区中,因此,CPU1的CPU核将CPU1的第一缓冲区中的子地址信息(如CPU1的第一缓冲区中的地址0x40000000和地址长度10)写入到网络控制器4的地址寄存器中,从而通知网络控制器4发送网络报文。

步骤9、网络控制器4检测到地址寄存器中存在CPU1的第一缓冲区的子地址信息后,向CPU2的内存镜像控制器发送读操作,该读操作携带CPU1的第一缓冲区的子地址信息,如CPU1的第一缓冲区的地址0x40000000和地址长度10。

步骤10、CPU2的内存镜像控制器从该读操作中解析出CPU1的第一缓冲区的子地址信息,基于CPU2对应的第二缓冲区中的地址与CPU1对应的第一缓冲区中的地址的映射关系,从CPU2对应的第二缓冲区中,确定出与上述子地址信息(如地址0x40000000和地址长度10)对应的子地址信息(即确定出的子地址信息为CPU2的第二缓冲区中的子地址信息),如确定出地址0x40000000和地址长度10,利用确定出的子地址信息从CPU2对应的第二缓冲区中获取到网络报文2,而不是从CPU1对应的第一缓冲区中获取到网络报文2。

例如,CPU2的内存镜像控制器从CPU2的第二缓冲区的地址0x40000000开始读取网络报文2,一直读取到尾地址0x40000009,得到完整的网络报文2。

在一个例子中,CPU2的内存镜像控制器可以通过CPU2的内存控制器从CPU2对应的第二缓冲区中获取到网络报文2,对此获取过程,不再赘述。

步骤11、CPU2的内存镜像控制器将网络报文2发送给网络控制器4,由网络控制器4利用网络报文2的目的地址发送网络报文2,具体发送过程不再赘述。

情况二、CPU2的CPU核对网络报文1进行修改,CPU2的CPU核通知网络控制器4发送网络报文2。

步骤1-步骤3,与上述情况一的步骤1-步骤3的处理相同,在此不再赘述。

步骤4、CPU2的CPU核从CPU2的第二缓冲区中读取到网络报文1,并对网络报文1进行修改,得到修改后的网络报文2。其中,CPU核读取网络报文1的方式与传统方式相同,在此不再赘述。CPU核对网络报文1进行修改的方式,可以根据实际情况选择,如修改网络报文1的源IP地址和目的IP地址。

步骤5、CPU2的CPU核向CPU2的内存镜像控制器发送写操作,其中,该写操作中可以携带网络报文2和子地址信息,且该子地址信息可以为CPU2的第二缓冲区的地址0x40000000和地址长度10。而且,该写操作中携带的子地址信息就是网络报文1在CPU2的第二缓冲区中对应的存储地址。

步骤6、CPU2的内存镜像控制器从写操作中解析出地址0x40000000和地址长度10,利用地址0x40000000和地址长度10将网络报文2存储到CPU2的第二缓冲区。例如,内存镜像控制器从CPU2的第二缓冲区的地址0x40000000开始,存储网络报文2,其长度为10,因此网络报文2的尾地址是0x40000009。

在一个例子中,CPU2的内存镜像控制器可以通过CPU2的内存控制器将网络报文2存储到CPU2的第二缓冲区,对此存储过程,在此不再赘述。

步骤7、基于CPU2对应的第二缓冲区中的地址与CPU1对应的第一缓冲区中的地址的映射关系,CPU2的内存镜像控制器从CPU1的第一缓冲区中,确定出与上述子地址信息(如地址0x40000000和地址长度10)对应的子地址信息(即确定出的子地址信息为CPU1的第一缓冲区中的子地址信息),如确定出地址0x40000000和地址长度10,并利用确定出的子地址信息将网络报文2存储到CPU1的第一缓冲区。例如,从CPU1的第一缓冲区的地址0x40000000开始,存储网络报文2,其长度为10,因此网络报文2的尾地址是0x40000009。

在一个例子中,CPU2的内存镜像控制器可以将携带网络报文2和确定出的子地址信息(即CPU1的第一缓冲区中的地址0x40000000以及地址长度10)的写操作发送给CPU2的互联控制器,由CPU2的互联控制器将该写操作发送给CPU1的互联控制器,并由CPU1的互联控制器将该写操作发送给CPU1的内存镜像控制器,CPU1的内存镜像控制器将该写操作发送给CPU1的内存控制器,由CPU1的内存控制器将网络报文2存储到CPU1的第一缓冲区。

步骤8、CPU2的CPU核在完成网络报文的修改后,确定由CPU2的网络控制器4发送修改后的网络报文2,对于CPU2的CPU核来说,网络报文2位于CPU2的第二缓冲区中,因此,CPU2的CPU核将CPU2的第二缓冲区中的子地址信息(如CPU2的第二缓冲区中的地址0x40000000和地址长度10)写入到网络控制器4的地址寄存器中,从而通知网络控制器4发送网络报文。

步骤9、网络控制器4检测到地址寄存器中存在CPU2的第二缓冲区的子地址信息后,向CPU2的内存镜像控制器发送读操作,该读操作携带CPU2的第二缓冲区的子地址信息,如CPU2的第二缓冲区的地址0x40000000和地址长度10。

步骤10、CPU2的内存镜像控制器从该读操作中解析出CPU2的第二缓冲区的子地址信息,并利用该子地址信息从CPU2对应的第二缓冲区中获取到网络报文2,而不是从CPU1对应的第一缓冲区中获取到网络报文2。

例如,CPU2的内存镜像控制器从CPU2的第二缓冲区的地址0x40000000开始读取网络报文2,一直读取到尾地址0x40000009,得到完整的网络报文2。

在一个例子中,CPU2的内存镜像控制器可以通过CPU2的内存控制器从CPU2对应的第二缓冲区中获取到网络报文2,对此获取过程,不再赘述。

步骤11、CPU2的内存镜像控制器将网络报文2发送给网络控制器4,由网络控制器4利用网络报文2的目的地址发送网络报文2,具体发送过程不再赘述。

上述过程是针对网络报文的处理,在实际应用中,内存镜像控制器还可能接收到非网络报文的操作,如针对浏览器的操作。因此,内存镜像控制器在接收到读操作/写操作之后,先区分该读操作/写操作是否为针对网络报文的操作,如果是,则采用上述技术方案进行处理,如果不是,则采用传统方式进行处理。

在一个例子中,内存镜像控制器在接收到读操作/写操作后,可以从读操作/写操作中解析出子地址信息,该子地址信息包括初始地址和地址长度,如地址0x40000000和地址长度10。由于内存镜像控制器中配置本端CPU的第一缓冲区中的地址与对端CPU的第二缓冲区中的地址的映射关系、本端CPU的第二缓冲区中的地址与对端CPU的第一缓冲区中的地址的映射关系,因此,如果解析到的初始地址是映射关系中记录的地址,说明读操作/写操作是针对网络报文的操作,采用上述技术方案进行处理,如果解析到的初始地址不是映射关系中记录的地址,说明读操作/写操作是针对非网络报文的操作,则内存镜像控制器直接将读操作/写操作发送给内存控制器,由内存控制器采用传统方式进行处理。

以下结合一个具体的实施例对上述过程进行说明。本实施例中,在内存镜像控制器中配置寄存器子模块、比较子模块、写操作模块、读操作模块。

在寄存器子模块中记录本端CPU的第一缓冲区中的地址与对端CPU的第二缓冲区中的地址的映射关系、本端CPU的第二缓冲区中的地址与对端CPU的第一缓冲区中的地址的映射关系。

比较子模块在接收到读操作/写操作后,可以从读操作/写操作中解析出子地址信息,该子地址信息包括初始地址和地址长度,如地址0x40000000和地址长度10。比较子模块通过查询寄存器子模块中记录的映射关系,确定解析到的初始地址是否为映射关系中记录的地址。如果是,说明读操作/写操作是针对网络报文的操作,在读操作/写操作中添加镜像标识,对于读操作,则下发到读操作模块,对于写操作,则下发到写操作模块。如果否,说明读操作/写操作是针对非网络报文的操作,在读操作/写操作中添加非镜像标识,对于读操作,则下发到读操作模块,对于写操作,则下发到写操作模块。

读操作模块在接收到读操作后,若读操作中携带镜像标识,则采用本申请的技术方案进行处理,如读操作模块执行上述情况一和情况二中的步骤10、步骤11。若读操作中携带非镜像标识,则读操作模块直接将读操作转发给内存控制器,由内存控制器采用传统方式进行处理。

写操作模块在接收到写操作后,若写操作中携带镜像标识,则采用本申请的技术方案进行处理,如写操作模块执行上述情况一和情况二中的步骤2、步骤3、步骤6、步骤7。若写操作中携带非镜像标识,则写操作模块直接将写操作转发给内存控制器,由内存控制器采用传统方式进行处理。

如图4所示,为本申请提出的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页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1