CN107046508A - 报文接收方法及网络设备 - Google Patents
报文接收方法及网络设备 Download PDFInfo
- Publication number
- CN107046508A CN107046508A CN201610082702.8A CN201610082702A CN107046508A CN 107046508 A CN107046508 A CN 107046508A CN 201610082702 A CN201610082702 A CN 201610082702A CN 107046508 A CN107046508 A CN 107046508A
- Authority
- CN
- China
- Prior art keywords
- core
- message
- kernel
- state
- value
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
- H04L49/9068—Intermediate storage in different physical parts of a node or terminal in the network interface card
- H04L49/9073—Early interruption upon arrival of a fraction of a packet
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Multi Processors (AREA)
Abstract
本发明实施例涉及报文处理技术,尤其涉及一种报文接收方法及装置,其中,该方法应用于多核CPU中,多核CPU包括主核及多个从核,主核用于确定多个从核中每个从核的运行状态,并通过位图映射每个从核的运行状态,所述方法包括:多个从核中运行在内核态的第一从核确定来自中断控制器的中断信号是否为收包中断信号;若是,则第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,以使报文地址对于处于内核态及用户态的从核均可见,且第一从核执行的步骤基于预设的专用寄存器执行,预设的专用寄存器为仅供处于内核态的从核使用的寄存器。本发明实施例的报文接收方法及装置,能够提高报文的接收效率。
Description
技术领域
本发明实施例涉及报文处理技术,尤其涉及一种报文接收方法及网络设备。
背景技术
随着网络技术的飞速发展,使得网络应用越来越多,流量规模也越来越大,传统的万兆路由器或防火墙逐步被TB(TrillionByte,兆字节)级设备代替。如何对大流量数据进行快速收取保存,用于后续业务的处理,成为现今的一个重要的研究方向。
现有技术中,常规的报文接收方法多是基于中断收包,具体过程包括:网络接口接收到报文后,中断控制器向CPU(Central Processing Unit,中央处理器)发送中断请求信号,CPU接收到中断请求信号后暂停当前主处理进程,并依次执行关闭中断、保护断点、中断源识别及保护现场等操作后,执行报文接收程序。其中在保护现场操作中,CPU需要保存当前主处理进程所使用的标志寄存器(Eflags),CS(Code Segment,代码段)寄存器,指令指针寄存器(Eip)等,CPU在中断进程中接收完报文后退出中断,并恢复主处理进程现场,返回继续执行主处理进程。
从上述报文接收方法中可以看出,为了在报文接收完毕后从中断处继续执行主处理进程,每次中断时CPU都需要保存主处理进程的现场,并在出中断时恢复主处理进程现场,保存现场和恢复现场的过程不仅占用CPU资源,而且影响报文接收效率。
发明内容
本发明实施例提供了一种报文接收方法及网络设备,以提高报文的接收效率。
第一方面,本发明实施例提供了一种报文接收方法,所述方法应用于多核中央处理器CPU中,所述多核CPU包括主核及多个从核,所述主核用于确定所述多个从核中每个从核的的运行状态,并通过位图映射每个从核的运行状态,其中,所述运行状态包括用户态和内核态,所述位图中的每个比特位分别对应一个从核,如果一个比特位的值为第一值,则指示该比特位所对应的从核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的从核运行在用户态;
所述方法包括:
所述多个从核中运行在内核态的第一从核确定来自中断控制器的中断信号是否为收包中断信号;
若是,则所述第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,以使所述报文地址对于处于内核态及用户态的从核均可见,且所述第一从核执行的步骤基于预设的专用寄存器执行,所述预设的专用寄存器为仅供处于内核态的从核使用的寄存器。
上述方案中,第一内核在中断进程中基于预设的专用寄存器执行报文接收步骤,该预设的专用寄存器为仅供处于内核态的从核使用的寄存器,不会对主处理进程所使用的寄存器产生影响,因此,本发明实施例的报文接收方法在进入中断进程时无需保存主处理进程现场,出中断时也无需恢复主处理进程的现场,因此本方案在报文接收过程中可以节约占用的CPU资源,提高报文的接收效率。
可选的,所述第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,包括:
所述第一从核从所述共享内存中申请至少一片处于空闲状态的报文描述符,其中,所述报文描述符中包含用于指示所述报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址,所述第一从核申请的所述至少一片报文描述符中的状态标识位指示所述报文描述符处于空闲状态;
所述第一从核将获取的所述至少一片报文描述符中包含的所述内存空间的地址发送给直接内存访问DMA,用于所述DMA将网络接口寄存器中的报文移动到所述至少一片报文描述符中包含的内存空间地址所对应的内存空间中;
所述第一从核将获取的所述至少一片报文描述的状态标识位更改为指示所述报文描述符处于使用状态。
本方案中,第一内核通过报文描述符映射报文在内存空间中的存储地址,一方面可以提高内核态从核的报文接收效率,另一方面便于用户态从核对内存空间中存储的报文访问。
可选的,所述第一从核将获取的所述至少一片报文描述的状态标识位更改为指示所述报文描述符处于使用状态之后,所述方法还包括:
所述第一从核确定所述网络接口寄存器中是否还有未接收的报文;
若有,则所述第一从核返回执行所述获取至少一片处于空闲状态的报文描述符的步骤;
若没有未接收的报文,则所述第一从核退出所述中断进程。
可选的,所述第一从核退出所述中断进程后还包括:
所述多个从核中运行在用户态的第二从核根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文;
所述第二从核对已移动到所述内存空间的报文进行业务处理。
本方案中,第二内核可以通过处于使用状态的报文描述符中的内存空间地址,访问内存空间中已接收到的报文,实现了用户态从核对内存空间中已接收报文的业务处理,进而可以提高已接收报文的业务处理效率。
可选的,所述共享内存为所述多核CPU初始化时预留的部分内存,且所述共享内存为环形内存。
本方案中,共享内存为多核CPU初始化时预留的部分内存,便于处于内核态和用户态的从核对共享内存的访问,进一步,共享内存为环形内存,有利于共享内存存储空间的循环使用,提高共享内存的利用效率。
可选的,所述方法还包括:
所述主核按照预设的时间间隔,获取所述位图中的第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息;
所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行状态进行调整。
本方案中,主核按照预设的时间间隔采集处于内核态从核以及处于用户态从核的运行状态信息,从而可以根据采集到的从核的运行状态信息,调整从核的运行状态,实现内核态从核及用户态从核个数的合理分配,提高报文接收及报文业务处理的效率。
可选的,所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行空间进行调整,包括:
所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,确定控制因子,其中,所述控制因子包括以下至少一种:所述共享内存的长度、所述共享内存中的报文数量、内核态运行时间与用户态运行时间的比值;
所述主核根据所述控制因子,确定运行于内核态的从核的个数以及运行于用户态的从核的个数;
所述主核根据确定出的运行于内核空间的从核的个数以及运行于用户空间的从核的个数,对所述多个从核的运行状态进行调整。
可选的,所述对所述多个从核的运行状态进行调整,包括:
所述主核将至少一个运行在内核态的从核的运行状态更改为运行在用户态;
和/或,
所述主核将至少一个运行在用户态的从核的运行状态更改为运行在内核态。
可选的,所述对所述多个从核的运行状态进行调整之后,所述方法还包括:
所述主核根据所述调整的结果,将运行状态由内核态更改为用户态的从核在所述位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的从核在所述位图上所对应的比特位的值更改为第一值;
所述主核将所述更改后的位图发送给中断控制器,用于所述网络接口接收到报文后所述中断控制器根据所述位图向运行于内核态的从核发送收包中断信号。
第二方面,本发明实施例提供了一种网络设备,所述设备包括:多核中央处理器CPU、通信接口及存储器,所述多核CPU、所述通信接口及所述存储器通过通信总线相连;
所述多核CPU包括主核及多个从核,所述主核用于确定所述多个从核中每个从核的运行状态,并通过位图映射每个从核的运行状态,其中,所述运行状态包括用户态和内核态,所述位图中的每个比特位分别对应一个从核,如果一个比特位的值为第一值,则指示该比特位所对应的从核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的从核运行在用户态;
所述通信接口,用于接收来自中断控制器的中断信号,并将所述中断信号通过所述通信总线传输给所述多个从核中运行在内核态的第一从核;
所述第一从核,用于读取所述存储器中存储的程序代码,执行以下操作:
确定所述中断信号是否为收包中断信号;
若是,则在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,以使所述报文地址对于处于内核态及用户态的从核均可见,且所述第一从核执行的步骤基于预设的专用寄存器执行,所述预设的专用寄存器为仅供处于内核态的从核使用的寄存器。
可选的,所述第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,包括执行:
所述第一从核从所述共享内存中申请至少一片处于空闲状态的报文描述符,其中,所述报文描述中包含用于指示所述报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址,所述第一从核申请的所述至少一片报文描述中的状态标识位指示所述报文描述符处于空闲状态;
将获取的所述至少一片报文描述符中包含的所述内存空间的地址发送给直接内存访问DMA,用于所述DMA将网络接口寄存器中的报文移动到所述至少一片报文描述符中包含的内存空间地址所对应的内存空间中;
将获取的所述至少一片报文描述符的状态标识位更改为指示所述报文描述符处于使用状态。
可选的,所述第一从核,还用于:
将获取的所述至少一片报文描述的状态标识位更改为指示所述报文描述符处于使用状态之后,确定所述网络接口寄存器中是否还有未接收的报文;
若有,则返回执行所述获取至少一片处于空闲状态的报文描述符的步骤;
若没有未接收的报文,则退出所述中断进程。
可选的,所述多个从核中运行在用户态的第二从核,用于:
所述第一从核退出所述中断进程后,根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文;
对已移动到所述内存空间的报文进行业务处理。
可选的,所述共享内存为所述多核CPU初始化时预留的部分内存,且所述共享内存为环形内存。
可选的,所述主核,还用于:
按照预设的时间间隔,获取所述位图中的第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息;
根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行状态进行调整。
可选的,所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行空间进行调整,包括执行:
所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,确定控制因子,其中,所述控制因子包括以下至少一种:所述共享内存的长度、所述共享内存中的报文数量、内核态运行时间与用户态运行时间的比值;
根据所述控制因子,确定运行于内核态的从核的个数以及运行于用户态的从核的个数;
根据确定出的运行于内核空间的从核的个数以及运行于用户空间的从核的个数,对所述多个从核的运行状态进行调整。
可选的,所述主核对所述多个从核的运行状态进行调整,包括执行:
所述主核将至少一个运行在内核态的从核的运行状态更改为运行在用户态;
和/或,
将至少一个运行在用户态的从核的运行状态更改为运行在内核态。
可选的,所述主核对所述多个从核的运行状态进行调整之后,所述主核还用于:
根据所述调整的结果,将运行状态由内核态更改为用户态的从核在所述位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的从核在所述位图上所对应的比特位的值更改为第一值;
将所述更改后的位图发送给中断控制器,用于所述网络接口接收到报文后所述中断控制器根据所述位图向运行于内核态的从核发送收包中断信号。
上述方案中,第一内核在中断进程中基于预设的专用寄存器执行报文接收步骤,该预设的专用寄存器为仅供处于内核态的从核使用的寄存器,不会对主处理进程所使用的寄存器产生影响,因此,本发明实施例的报文接收方法在进入中断进程时无需保存主处理进程现场,出中断时也无需恢复主处理进程的现场,因此本方案在报文接收过程中可以节约占用的CPU资源,提高报文的接收效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了通用的中断处理流程示意图;
图2示出了执行NAPI方法的一种框架图;
图3示出了本申请实施例提供的一种应用场景示意图;
图4示出了本发明实施例报文接收方法的一种流程图;
图5示出了本申请实施例提供的另一种应用场景示意;
图6示出了用户空间与内核空间的交互示意图;
图7示出了共享内存初始化方法流程图;
图8示出了本发明实施例报文接收方法的另一种流程图;
图9示出了本发明实施例多核CPU负载调度方法的一种流程图;
图10示出了本发明实施例报文接收方法的框架流程图;
图11示出了本发明实施例报文接收方法的具体流程图;
图12示出了本发明实施例网络设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
中断:在当前主处理进程中,系统出现了一个必须立即处理的情况,此时CPU暂时中止主处理进程转而处理这个新的情况的过程称为中断。
图1示出了通用的中断处理流程示意图,从图1可以看出,通用的中断处理流程分为三个阶段,以下主要论述与本申请报文接收方法强相关的第一阶段,其它两个阶段由于与本发明实施例的报文接收方法关系较小,不详细展开:
第一阶段:获取中断向量
计算机中的许多组件,例如声卡、硬盘、网络接口等需要定期中断CPU当前正在执行的任务,让CPU为其做一些特定的工作,在这种情况下,这些组件会向CPU发送中断请求。每个CPU(Central Processing Unit,中央处理器)都具有响应中断请求,为发送中断请求的组件执行特定功能的能力,这里被简称为CPU具有响应中断的能力。每个CPU响应中断时都走相同的流程,这个流程就是CPU内核提供的中断服务程序。
在进入中断服务程序时,CPU已经自动禁止了本CPU上的中断响应,从而禁止其它中断服务程序重入。中断重入是指在一个中断程序执行过程中又被另一个中断打断,转而又去执行另一个中断程序。
中断服务程序的第一步要做两件事情:
1、将中断向量压入栈中,其中,不同中断向量的中断对应不同的中断服务程序入口。
2、保存中断现场,即将当前主处理进程的寄存器信息压入栈中以便退出中断时恢复主处理进程现场。
显然,上述步骤1及步骤2都是不可重入的,若在保存寄存器信息时被中断,那么另外的操作很可能会改写主处理进程所用寄存器信息,主处理进程现场将无法恢复,因此,CPU进入中断服务程序时要自动禁止中断。
第二阶段:中断串行化。
第三阶段:关中断条件下的中断处理。
基于图1所示的通用的中断处理方法,可以进行报文收取。现有的基于中断接收报文的过程包括:
每次有来自于其他网络设备的报文经由传输介质,例如以太网线,到达一个计算机的网络接口,如以太网卡时,网络接口触发一次中断给CPU,CPU响应接收到的中断信号,暂停当前主处理进程,并在中断进程中接收报文。
基于中断接收报文的方法虽然开发简单,易于上手,但网络接口收一次报文,就要触发一次中断,而且每次进入中断时CPU均需要保存主处理进程的中断现场,出中断后CPU还需要根据保存的中断现场恢复主处理进程的现场,从而才可以保证出中断后CPU能够从主处理进程的中断处继续执行主处理进程,不仅占用CPU资源,而且影响报文接收效率,尤其当外设接口接收到大量报文时,基于中断方式接收报文会使系统性能全面下降。
鉴于基于中断接收报文带来的中断频繁,收包效率较低的问题,现有方法中提出了基于轮询的收包方法。
linux系统或者裸核系统上,数据平面基于轮询接收报文的过程包括:CPU通过单个用户态进程轮询特定接收缓存,当接收缓存中存在报文时,CPU接收报文;当接收缓存中没有报文时,CPU进入轮询等待状态或者消息等待(msgwait)状态,其中msgwait是CPU专有指令,能保证CPU没有报文时保持低功耗。
上述基于轮询接收报文的方法虽然能够减少主处理进程被中断的次数,但在轮询时即使接收缓存中没有报文,CPU也无法被调度去处理其它工作,因此CPU的利用率仍然相对比较低。
为了提高报文接收效率,现有技术中提出了NAPI(New ApplicationProgram Interface,新应用程序编程接口)接收方法。NAPI的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后以POLL的方法来轮询数据,其中POLL是Linux系统中字符设备驱动中的一个函数,作用是把当前的文件指针挂到设备内部定义的等待队列中。
图2示出了执行NAPI方法的一种框架图。如图1所示,基于NAPI接收报文的流程包括:
(1)网络接口中接收到的报文数据量较低时,采用中断方法接收报文。
(2)网络接口中接收到的报文数据量较大时,关闭硬件中断,并触发软中断。
(3)在软中断处理例程中,调用轮询函数(xxx_poll)收取报文,此时若再有数据达到,则无需触发中断,因为软中断处理例程中会基于轮询收取数据。
(4)将接收到的数据交付上层协议栈处理。
可以看出,NAPI技术主要是结合中断和轮询的优点,提出了一种中间道路,轻负载时趋于中断,重负载时趋于轮询。但对于大报文低速率的情况,接收中断就会急剧增加,直到最后每个报文都需要一次POLL的方法来进行处理,最后的结果就是每个中断都需要一次POLL的方法,最后造成效率的急剧下降,以至于系统的效率就会大大降低,所以NAPI适用于大量的报文,而且尽可能是小的报文,但是对于大的报文,而且低速率的,反而会造成系统速度的下降。
可见,现有的报文接收方法均存在着报文接收效率较低的问题。为了提高报文接收效率,本发明实施例提供了一种基于快速中断处理机制的报文接收方法,该方法在中断进程中基于预设的专用寄存器执行报文接收程序,报文接收过程对中断的主处理进程所使用的寄存器中的数据没有影响,因此本发明实施例方法在进入中断时无需保存主处理进程现场,退出中断时也无需恢复主处理进程现场,不仅降低CPU资源消耗,而且可以简化报文接收程序,提高报文接收效率。
图3示出了本申请实施例提供的一种应用场景示意图,如图3所示,计算机设备10中包括多核CPU101,多核CPU101用于执行算机设备10中的存储器存储的程序,实现计算机设备10中的报文接收进程。
如图3所示,多核CPU101中包括主核1011及多个从核,如图3中的从核1021、从核1022……从核102n,主核1011用于确定多个从核中每个从核的运行状态。常见的一种MIPS架构的多核中共有32个核,其中通常有1个主核和31个从核。不同架构的多核CPU中主核和从核的数量也会有所不同。
其中,从核的运行状态包括用户态及内核态,内核态及用户态是操作系统的两种运行级别,当从核执行当前进程的系统调用而陷入内核代码中执行时,可称该从核运行于内核态,此时该从核处于特权级别最高的内核代码中执行,执行的内核代码会使用当前进程的内核栈;当从核执行用户代码时,可称该从核运行于用户态,此时该从核处于特权级别最低的用户代码中运行。
内核态是一种高特权、不受限制的运行状态,从核运行于内核态时,对任何输入/输出设备均具有全部的访问权,且还能够访问任何虚拟地址和控制虚拟内存的硬件;对应的,用户态是一种受到访问限制的运行状态,从核运行于用户态时,硬件防止特权指令的执行,对内存和输入/输出设备的访问操作进行检查,捕捉违反系统完整性的任何行为。
多核CPU101中一般提供Ring0~Ring3四种级别的运行模式,Ring0级别最高,Ring3级别最低,Linux系统中使用Ring3级别运行用户态,Ring0级别运行内核态,Ring3不能访问Ring0的地址空间,例如,Linux进程的4GB地址空间中,0G-3G是用户态的地址空间(也称为用户空间),用户空间中存放用户代码,3G-4G是内核态的地址空间(也可称为内核空间),内核空间中存放整个内核的代码、所有的内核模块以及内核所维护的数据。
为了便于对多个从核的运行状态进行监测管理,主核1011通过位图映射每个从核的运行状态,其中位图中的每个比特位分别对应一个从核,如果一个比特位的值为第一值,则指示该比特位所对应的从核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的从核运行在用户态。例如,以32个核的MIPS CPU为例,该MIPS CPU中包括1个主核和31个从核,假设主核设置的bitmap为{1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1},该位图中通过数值“0”及数值“1”指示从核的运行状态,如“1”表示运行在内核态,“0”表示运行在用户态,进一步MIPS CPU中的31个从核分别编号为1~31,位图中的第1个比特位至第31个比特位分别对应第1号至第31号从核,因此通过该位图可以确定编号为1、4、7、8、9、12、15、16、17、20、23、24、25、28、31的从核运行在内核态,其它从核运行在用户态。
图4示出了本发明实施例报文接收方法的一种流程图,图4所示的报文接收方法应用于包括多核CPU的硬件平台中,例如,硬件平台可以是图3所示的硬件平台,多核CPU可以是图3中所示的多核CPU。
下面将结合图4对本申请实施例提供的报文接收方法进行详细阐述,如图4所示,方法的主要处理步骤包括:
步骤S11:多个从核中运行在内核态的第一从核确定来自中断控制器的中断信号是否为收包中断信号。
网络接口接收到报文时,中断控制器根据主核配置的位图确定运行于内核态的从核,并向运行在内核态的第一从核发送中断信号。
第一从核接收到中断控制器发送的中断信号后,确定该中断信号是否为收包中断信号。
第一从核确定接收到的中断信号的类型是否为收包中断信号的方法可以包括:
(1)当第一从核接收到的中断信号为硬件触发的中断信号时,第一从核可以在中断信号到来时从总线上读取中断信号所对应的中断向量,并根据中断向量确定中断信号的类型。
其中,中断控制器传输的所有中断信号均进行了编码(一共256个:0~255),这个编码称为中断向量,每个中断向量所表示的中断类型是固定好的,有时也可以对给定编号范围内的中断向量自行设定。
(2)当第一从核接收到的中断信号为软件中断信号时,软件中断信号中包含中断向量,第一从核可以直接根据软件中断信号中的中断向量确定中断类型。
步骤S12:第一从核确定接收到的中断信号为收包中断信号时,第一从核在中断进程中将报文的内存地址写入到用户态和内存态共享的共享内存中。
第一从核确定接收到的中断信号为收包中断信号时,中断当前主处理进程并进入中断进程,其中在中断当前主处理进程中,图3所示的硬件平台中的中断响应装置自动将主处理进程的断点保存在堆栈中。
第一从核在中断进程中,将网络接口接收到的报文的内存地址写入到用户态和内存态共享的共享内存中,以使报文地址对于处于内核态及用户态的从核均可见,可选的,该共享内存为多核CPU初始化时预留的部分内存,且该共享内存为环形内存,以利于该共享内存空间的循环使用。
本实施例中,第一从核执行的步骤基于预设的专用寄存器执行,其中该预设的专用寄存器是指仅供处于内核态的从核使用的寄存器,优选的,第一从核执行的代码程序基于汇编语言编写。
本发明实施例中,第一从核在中断进程中基于预设的专用寄存器接收报文,由于中断进程中所用的专用寄存器与主处理进程中所用的寄存器无关,接收报文过程中的数据不会对主处理进程所用寄存器中的数据及寄存器状态产生影响,由此,本发明实施例的报文接收方法在进入中断时不保存主处理进程现场,出中断时也不恢复主处理进程现场,第一从核可以直接根据硬件装置自动记录的主处理进程中断前的位置继续使用主处理进程中断前使用的寄存器继续执行主处理进程,由此可以节约报文接收程序,提高报文接收效率。
本发明实施例中,第一从核在中断进程中将报文的内存地址写入到用户态和内存态共享的内存中的实现方法包括:
(1)第一从核从共享内存中申请至少一片处于空闲状态的报文描述符,其中,在报文描述符中包含用于指示报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址,第一从核申请的至少一片报文描述符中的状态标识位指示报文描述符处于空闲状态。
(2)第一从核将获取的至少一片报文描述符中包含的内存空间的地址发送给DMA(Directional Memory Access,直接内存访问),用于DMA将网络接口寄存器中的报文移动到至少一片报文描述符中包含的内存空间地址所对应的内存空间中,DMA将报文移动到内存空间地址所对应的内存空间中即实现了对网络接口寄存器中报文的接收。
(3)为便于后续对存储到内存空间的报文进行业务处理,第一从核将获取的至少一片报文描述的状态标识位更改为指示报文描述符处于使用状态。
第一从核将获取的至少一片报文描述符的状态标识位更改为指示报文描述符处于使用状态后,第一从核进一步确定网络接口寄存器中是否还有未接收的报文,若在网络接口寄存器中还有未接收的报文,第一从核返回执行获取至少一片处于空闲状态的报文描述符的步骤,以继续对网络接口寄存器中的报文进行接收;若在网络接口寄存器中已经没有未接收的报文,说明已完成对网络接口寄存器中报文的接收,第一从核退出中断进程。
第一从核退出中断进程后,第一从核接收到的报文存储在内存空间中,多核CPU中的运行在用户态的第二从核根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文;第二从核对已移动到内存空间的报文进行业务处理。
综上可以看出,报文接收处理过程中,多核CPU的部分从核运行于内核态,执行在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中的步骤,部分从核运行于用户态,执行对已移动到内存空间的报文进行业务处理的步骤。在实际的报文接收处理过程中,如何分配分别运行在内核态及用户态的从核的数量,直接影响报文接收及业务处理效率,同时影响多核CPU的资源调度。
为了合理配置报文接收处理过程中多个从核的运行状态,主核按照预设的时间间隔,获取位图中的第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息。
进一步,主核根据第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息,对多个从核的运行状态进行调整。
通过上述调整,可以实现对多个从核运行状态的合理配置,提高报文从接收到业务处理整个进程的处理效率。
可选的,主核根据第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息,对多个从核的运行空间进行调整,包括:
步骤A:主核根据第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息,确定控制因子,其中,控制因子包括以下至少一种:共享内存的长度、共享内存中的报文数量、内核态运行时间与用户态运行时间的比值。
步骤B:主核根据控制因子,确定运行于内核态的从核的个数以及运行于用户态的从核的个数;
步骤C:主核根据确定出的运行于内核空间的从核的个数以及运行于用户空间的从核的个数,对多个从核的运行状态进行调整。
上述方法中,主核对多个从核的运行状态进行调整是指:主核将至少一个运行在内核态的从核的运行状态更改为运行在用户态;和/或,主核将至少一个运行在用户态的从核的运行状态更改为运行在内核态。
主核对多个从核的运行状态进行调整之后,主核进一步根据调整的结果,将运行状态由内核态更改为用户态的从核在位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的从核在位图上所对应的比特位的值更改为第一值,以使位图中各比特位的指示状态与从核的实际运行状态相匹配。
另外,主核还将更改后的位图发送给中断控制器,以用于网络接口接收到报文后中断控制器根据位图向运行于内核态的从核发送收包中断信号。
图5示出了本申请实施例提供的另一种应用场景示意。其中,图5所示的硬件平台中的CPU结构架构为基于MIPS(Million Instructions Per Second,单字长定点指令平均执行速度)的多核CPU架构,从图5中可以看出,多核CPU中包括主核(图中未画出)及多个内核(本图中的内核与图3中的从核相对应),多个内核之间共享一块高速缓存L2_Cache,每个内核(core)独立使用自己的D-cache和I-Cache,物理地址多核可见,每个内核有独立的寄存器组,内核之间可以通过核间消息或者共享内存进行通信。
图5所示的多核CPU架构可以基于linux系统运行本发明实施例的报文接收方法。其中,linux操作系统中,内核态及用户态是两种基本运行级别,多核CPU总处于以下状态中的一种:
1、内核态(以非中断方式进入),运行于进程上下文,内核代表进程运行于内核空间;
2、内核态(以中断方式进入),运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
图6示出了用户空间与内核空间的交互示意图,如图6所示,从用户空间到内核空间有两种触发手段包括:
1、用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的应用程序要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户空间应用程序的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用于进程传递给内核的参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。
2、硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其它环境(主要是当前被打断执行的进程环境)。
基于图5所示的多核CPU架构,本发明实施例的报文接收方法包括共享内存初始化过程和数据内核态向用户态传输过程。
图7示出了共享内存初始化方法流程图。如图7所示,共享内存初始化步骤包括:
步骤S201:内核建立环形缓冲区(ringbuf)。
多核CPU内核初始化时预留一块内存作为ringbuf,其中ringbuf为内核态和用户态共享内存。
步骤S202:用户态映射同一块ringbuf地址。
在用户态通过mmap函数映射出ringbuf的虚拟地址,其中ringbuf的虚拟地址的物理地址制定为内核的ringbuf地址。mmap是一种映射函数,用于将一个文件或者其它对象映射进内存。
步骤S203:初始化报文描述符
内核初始化若干片报文描述符,其中,初始化后的报文描述符中包含用于指示报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址。
步骤S204:将报文描述符注入ringbuf。
本步骤中,将报文描述符交给ringbuf进行管理,具体方式是将报文描述符地址依次挂接到ringbuf中。
步骤S205:用户态通过mmap实现报文描述符多核共享
用户态收包初始化,将步骤S203中初始化的报文描述符的虚实地址映射复制到用户空间。
步骤S206:中断控制器初始化
中断控制器初始化过程中包括对用于指示内核运行状态的位图的初始化,其中多核CPU中,不同的内核可能运行于不同的状态,例如,图5所示的多核CPU架构中,内核0(Core0)~内核k(Corek)运行于内核态,内核k+1(Core0)~内核N(Corek)运行于用户态。中断控制器初始化的位图中每个比特位分别对应一个内核,如果一个比特位的值为第一值,则指示该比特位所对应的内核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的内核运行在用户态。
多核CPU的内核空间还进一步提供内核态信息采集接口,用户空间还进一步提供用户态信息采集接口。
初始化时还可以进一步包括对内核态信息采集接口以及用户态信息采集接口进行初始化。
图8示出了本发明实施例报文接收方法的另一种流程图,图8所示的方法在图7所示的共享内存初始化基础上执行,图8所示的方法对应上文的数据内核态向用户态传输过程,该方法的执行主体为多核CPU,包括:
步骤S31:多核CPU中运行在内核态的第一内核确定来自中断控制器的中断信号是否为收包中断信号。
网络接口接收到报文放入网络接口寄存器中,并通知中断控制器。
中断控制器根据预先存储的位图(bitmap)向运行于内核态的第一内核发送中断信号。
收到中断信号的内核确定接收到的中断信号是否为收包中断信号,若是则执行步骤S32,否则按照通用的中断方法进行处理。
本实施例中确定中断信号是否为收包中断信号的方法与图4所示方法中确定收包中断信号的方法相同,本实施例不再赘述。
步骤S32:第一内核从共享内存中申请至少一片处于空闲状态的报文描述符,其中,第一内核申请的至少一片报文描述符中的状态标识位指示报文描述符处于空闲状态。
本步骤中的上述至少一片报文描述符在多核CPU初始化时生成,此处的处于空闲状态的报文描述符可以指初始化后的报文描述符也可以是在某进程中使用释放后的报文描述符。
本实施例中,报文描述符依次挂接于用户态-内核态共享的环形缓冲区(ringbuf)下,该ringbuf即指多核CPU初始化时预留的部分内存。
步骤S33:第一内核将获取的至少一片报文描述符中包含的内存空间的地址发送给直接内存访问DMA,用于DMA将网络接口寄存器中的报文移动到至少一片报文描述符中包含的内存空间地址所对应的内存空间中。
步骤S34:第一内核将获取的至少一片报文描述的状态标识位更改为指示报文描述符处于使用状态。
步骤S35:第一内核确定网络接口寄存器中是否还有未接收的报文。
步骤S36:若已没有未接收的报文,第一内核退出中断进程,并基于主处理进程所用寄存器继续执行主处理进程。
进一步,若网络接口寄存器中还有未接收的报文,第一内核返回执行获取至少一片处于空闲状态的报文描述符的步骤。
上述步骤S32~S36在内核空间执行,执行运算过程基于内核各自的专用寄存器,如基于k0和k1寄存器执行上述步骤S32~S36,并且为了避免执行报文接收程序时使用除专用寄存器外的寄存器编译报文接收程序,上述步骤S32~S36采用汇编语言编写。
步骤S37:多个内核中运行在用户态的第二内核根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文。
步骤S38:第二内核对已移动到内存空间的报文进行业务处理。
上述步骤S37及步骤S38为用户态执行步骤,用于对接收的报文进行业务处理。
本发明实施例的报文接收方法基于MIPS CPU快速报文传递技术,通过快速中断处理机制以及共享ringbuf实现整体系统的最优收包处理性能。
多核CPU系统中,多核CPU的各个内核分别处理相同或不同的任务,以本实施例的报文结合方法为例,多核CPU的部分内核在内核空间执行报文接收进程,多核CPU的另一部分内核在用户空间执行报文业务处理进程,各个内核各司其职,但在多核CPU的实际运行过程中,可能会出现多核负载调度不均衡的问题,例如内核空间用于接收报文的内核远远大于用户空间用于业务处理的内核,此时可能会出现报文堆积处理不及时的问题,为了实现多核负载均衡调度的目的,本发明实施例在图8所示方法的基础上进一步提供了多核CPU负载调度的处理过程,其中,图9示出了本发明实施例多核CPU负载调度方法的一种流程图,该方法的执行主体可以为多核CPU中的主核,本方法具体步骤包括:
步骤S41:主核按照预设的时间间隔,获取位图中的第一值所对应的至少一个内核的执行状态信息以及位图中的第二值所对应的至少一个内核的执行状态信息。
步骤S42:主核根据第一值所对应的至少一个内核的执行状态信息以及位图中的第二值所对应的至少一个内核的执行状态信息,对多个内核的运行状态进行调整。
本发明实施例中,主核根据第一值所对应的至少一个内核的执行状态信息以及位图中的第二值所对应的至少一个内核的执行状态信息,对多个内核的运行空间进行调整,包括:
(1)主核根据第一值所对应的至少一个内核的执行状态信息以及位图中的第二值所对应的至少一个内核的执行状态信息,确定控制因子,其中,控制因子包括以下至少一种参数:共享内存的长度、共享内存中的报文数量、内核态运行时间与用户态运行时间的比值。
(2)主核根据控制因子,确定运行于内核态的内核的个数以及运行于用户态的内核的个数。具体地,主核可以基于预定算法,根据控制因子计算运行于内核态的内核的个数以及运行于用户态的内核的个数。主核也可以基于预先设置的控制因子中各参数的取值范围、内核态的内核的个数以及运行于用户态的内核的个数的映射关系,根据(1)中的当前的控制因子,查询对应的内核态的内核的个数以及运行于用户态的内核的个数。
(3)主核根据确定出的运行于内核空间的内核的个数以及运行于用户空间的内核的个数,对多个内核的运行状态进行调整。
其中,主核对多个内核的运行状态进行调整,具体可以为:
(1)主核将至少一个运行在内核态的内核的运行状态更改为运行在用户态;
(2)主核将至少一个运行在用户态的内核的运行状态更改为运行在内核态。
在调整过程中,上述(1)及(2)可以只执行其中一种方式,也可以同时执行(1)及(2)。
步骤S43:主核根据调整的结果,将运行状态由内核态更改为用户态的内核在位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的内核在位图上所对应的比特位的值更改为第一值。
步骤S44:主核将更改后的位图发送给中断控制器,用于网络接口接收到报文后中断控制器根据位图向运行于内核态的内核发送收包中断信号。
利用本发明实施例的方法,能够解决多核负载均衡调度的问题。
图10示出了本发明实施例报文接收方法的框架流程图。图11示出了本发明实施例报文接收方法的具体流程图。图11所示的报文接收方法基于图5所示的多核CPU架构实现,其中多核CPU的CPU_core0~CPU_coreN用于执行内核态快速中断处理进程,CPU_coreN+1~CPU_coreN+M用于执行用户态报文业务处理进程,内核态与用户态共享环形内存区ringbuf,如图10及图11所示,该方法的具体步骤包括:
步骤S51:网络接口接收报文。
网络接口具体可以为用于接收报文的网卡,当网络接口接收到报文后通知中断控制器。
步骤S52:中断控制器根据预先存储的位图(bitmap)向运行于内核态的第一内核发送中断信号。
步骤S53:接收到中断信号的内核基于快速中断处理机制执行报文接收程序。
具体的,该快速中断处理机制为如图4或图8所示的报文接收处理机制,中断收包过程中仅使用专用寄存器k0及k1,在进入中断时不保存主处理进程现场,出中断时不恢复现场,且该报文接收程序采用汇编语言实现,接收到的报文存储在内存空间中。
步骤S54:多核CPU的运行于用户态的第二内核移动到内存空间中的报文进行业务处理。
多核CPU运行过程中,多核CPU中的主核还进一步执行如下步骤:
步骤S55:主核通过内核态信息采集接口以及用户态信息采集接口按照预设的时间间隔,获取位图中的第一值所对应的至少一个内核的执行状态信息以及位图中的第二值所对应的至少一个内核的执行状态信息。
步骤S56:主核根据第一值所对应的至少一个内核的执行状态信息以及位图中的第二值所对应的至少一个内核的执行状态信息,确定控制因子。
得到的控制因子包括以下至少一种:共享内存的长度、共享内存中的报文数量、内核态运行时间与用户态运行时间的比值。
步骤S57:主核根据控制因子,确定运行于内核态的内核的个数以及运行于用户态的内核的个数。
步骤S58:主核根据确定出的运行于内核空间的内核的个数以及运行于用户空间的内核的个数,对多个内核的运行状态进行调整。
步骤S59:主核根据调整的结果,将运行状态由内核态更改为用户态的内核在位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的内核在位图上所对应的比特位的值更改为第一值。
步骤S60:主核将更改后的位图发送给中断控制器,用于网络接口接收到报文后中断控制器根据位图向运行于内核态的内核发送收包中断信号。
本实施例中,利用控制因子调整bitmap的位数,并将调整后的bitmap配置到中断控制器中,实现接收报文的内核与处理报文业务的内核动态调整达到最优处理性能的目的。
可以看出本发明实施例的报文接收方法基于MIPS CPU快速报文传递技术,通过快速中断处理机制、共享ringbuf以及中断位图负反馈机制三者结合实现CPU整体系统的最优处理性能。
图12示出了本发明实施例网络设备的结构示意图,如图12所示,该设备1200包括:多核CPU1202、通信接口1201及存储器1203,多核CPU1202、通信接口1201及存储器1203通过通信总线1204相连;总线1204可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口1201用于与发送端通信。存储器1203,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器1203可能包含随机存取存储器1203(random access memory,简称RAM),也可能还包括非易失性存储器1203(non-volatile memory),例如至少一个磁盘存储器1203。
多核CPU1202包括主核及多个从核,主核用于确定多个从核中每个从核的运行状态,并通过位图映射每个从核的运行状态,其中,运行状态包括用户态和内核态,位图中的每个比特位分别对应一个从核,如果一个比特位的值为第一值,则指示该比特位所对应的从核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的从核运行在用户态;
通信接口1201,用于接收来自中断控制器的中断信号,并将中断信号通过通信总线1204传输给多个从核中运行在内核态的第一从核;
第一从核,用于读取存储器1203中存储的程序代码,执行以下操作:
确定中断信号是否为收包中断信号;
若是,则在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,以使报文地址对于处于内核态及用户态的从核均可见,且第一从核执行的步骤基于预设的专用寄存器执行,预设的专用寄存器为仅供处于内核态的从核使用的寄存器。
可选的,第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,包括执行:
第一从核从共享内存中申请至少一片处于空闲状态的报文描述符,其中,报文描述中包含用于指示报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址,第一从核申请的至少一片报文描述中的状态标识位指示报文描述符处于空闲状态;
将获取的至少一片报文描述符中包含的内存空间的地址发送给直接内存访问DMA,用于DMA将网络接口寄存器中的报文移动到至少一片报文描述符中包含的内存空间地址所对应的内存空间中;
将获取的至少一片报文描述符的状态标识位更改为指示报文描述符处于使用状态。
可选的,第一从核,还用于:
将获取的至少一片报文描述的状态标识位更改为指示报文描述符处于使用状态之后,确定网络接口寄存器中是否还有未接收的报文;
若有,则返回执行获取至少一片处于空闲状态的报文描述符的步骤;
若没有未接收的报文,则退出中断进程。
可选的,多个从核中运行在用户态的第二从核,用于:
第一从核退出中断进程后,根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文;
对已移动到内存空间的报文进行业务处理。
可选的,共享内存为多核CPU1202初始化时预留的部分内存,且共享内存为环形内存。
可选的,主核,还用于:
按照预设的时间间隔,获取位图中的第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息;
根据第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息,对多个从核的运行状态进行调整。
可选的,主核根据第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息,对多个从核的运行空间进行调整,包括执行:
主核根据第一值所对应的至少一个从核的执行状态信息以及位图中的第二值所对应的至少一个从核的执行状态信息,确定控制因子,其中,控制因子包括以下至少一种:共享内存的长度、共享内存中的报文数量、内核态运行时间与用户态运行时间的比值;
根据控制因子,确定运行于内核态的从核的个数以及运行于用户态的从核的个数;
根据确定出的运行于内核空间的从核的个数以及运行于用户空间的从核的个数,对多个从核的运行状态进行调整。
可选的,主核对多个从核的运行状态进行调整,包括执行:
主核将至少一个运行在内核态的从核的运行状态更改为运行在用户态;
和/或,
主核将至少一个运行在用户态的从核的运行状态更改为运行在内核态。
可选的,主核对多个从核的运行状态进行调整之后,主核还用于:
根据调整的结果,将运行状态由内核态更改为用户态的从核在位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的从核在位图上所对应的比特位的值更改为第一值;
将更改后的位图发送给中断控制器,用于网络接口接收到报文后中断控制器根据位图向运行于内核态的从核发送收包中断信号。
本发明实施例的装置,在中断进程中基于预设的专用寄存器执行报文接收程序,由于中断进程中所用的专用寄存器与主处理进程中所用的寄存器无关,接收报文过程中的数据不会对主处理进程所用寄存器中的数据及寄存器状态产生影响,由此,本发明实施例的报文接收方法在进入中断时不保存主处理进程现场,出中断时也不恢复主处理进程现场,处理器可以直接根据硬件装置自动记录的主处理进程中断前的位置继续使用主处理进程中断前使用的寄存器继续执行主处理进程,由此可以节约报文接收程序,提高报文接收效率。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (18)
1.一种报文接收方法,其特征在于,所述方法应用于多核中央处理器CPU中,所述多核CPU包括主核及多个从核,所述主核用于确定所述多个从核中每个从核的运行状态,并通过位图映射每个从核的运行状态,其中,所述运行状态包括用户态和内核态,所述位图中的每个比特位分别对应一个从核,如果一个比特位的值为第一值,则指示该比特位所对应的从核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的从核运行在用户态;
所述方法包括:
所述多个从核中运行在内核态的第一从核确定来自中断控制器的中断信号是否为收包中断信号;
若是,则所述第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,以使所述报文地址对于处于内核态及用户态的从核均可见,且所述第一从核执行的步骤基于预设的专用寄存器执行,所述预设的专用寄存器为仅供处于内核态的从核使用的寄存器。
2.根据权利要求1所述的方法,其特征在于,所述第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,包括:
所述第一从核从所述共享内存中申请至少一片处于空闲状态的报文描述符,其中,所述报文描述符中包含用于指示所述报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址,所述第一从核申请的所述至少一片报文描述符中的状态标识位指示所述报文描述符处于空闲状态;
所述第一从核将获取的所述至少一片报文描述符中包含的所述内存空间的地址发送给直接内存访问DMA,用于所述DMA将网络接口寄存器中的报文移动到所述至少一片报文描述符中包含的内存空间地址所对应的内存空间中;
所述第一从核将获取的所述至少一片报文描述的状态标识位更改为指示所述报文描述符处于使用状态。
3.根据权利要求2所述的方法,其特征在于,所述第一从核将获取的所述至少一片报文描述的状态标识位更改为指示所述报文描述符处于使用状态之后,所述方法还包括:
所述第一从核确定所述网络接口寄存器中是否还有未接收的报文;
若有,则所述第一从核返回执行所述获取至少一片处于空闲状态的报文描述符的步骤;
若没有未接收的报文,则所述第一从核退出所述中断进程。
4.根据权利要求3所述的方法,其特征在于,所述第一从核退出所述中断进程后还包括:
所述多个从核中运行在用户态的第二从核根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文;
所述第二从核对已移动到所述内存空间的报文进行业务处理。
5.根据权利要求1~4中任一项所述的方法,其特征在于,所述共享内存为所述多核CPU初始化时预留的部分内存,且所述共享内存为环形内存。
6.根据权利要求1~5中任一项所述的方法,其特征在于,所述方法还包括:
所述主核按照预设的时间间隔,获取所述位图中的第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息;
所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行状态进行调整。
7.根据权利要求6所述的方法,其特征在于,所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行空间进行调整,包括:
所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,确定控制因子,其中,所述控制因子包括以下至少一种:所述共享内存的长度、所述共享内存中的报文数量、内核态运行时间与用户态运行时间的比值;
所述主核根据所述控制因子,确定运行于内核态的从核的个数以及运行于用户态的从核的个数;
所述主核根据确定出的运行于内核空间的从核的个数以及运行于用户空间的从核的个数,对所述多个从核的运行状态进行调整。
8.根据权利要求6或7所述的方法,其特征在于,所述对所述多个从核的运行状态进行调整,包括:
所述主核将至少一个运行在内核态的从核的运行状态更改为运行在用户态;
和/或,
所述主核将至少一个运行在用户态的从核的运行状态更改为运行在内核态。
9.根据权利要求8所述的方法,其特征在于,所述对所述多个从核的运行状态进行调整之后,所述方法还包括:
所述主核根据所述调整的结果,将运行状态由内核态更改为用户态的从核在所述位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的从核在所述位图上所对应的比特位的值更改为第一值;
所述主核将所述更改后的位图发送给中断控制器,用于网络接口接收到报文后所述中断控制器根据所述位图向运行于内核态的从核发送收包中断信号。
10.一种网络设备,其特征在于,所述设备包括:多核中央处理器CPU、通信接口及存储器,所述多核CPU、所述通信接口及所述存储器通过通信总线相连;
所述多核CPU包括主核及多个从核,所述主核用于确定所述多个从核中每个从核的运行状态,并通过位图映射每个从核的运行状态,其中,所述运行状态包括用户态和内核态,所述位图中的每个比特位分别对应一个从核,如果一个比特位的值为第一值,则指示该比特位所对应的从核运行在内核态,如果一个比特位的值为第二值,则指示该比特位所对应的从核运行在用户态;
所述通信接口,用于接收来自中断控制器的中断信号,并将所述中断信号通过所述通信总线传输给所述多个从核中运行在内核态的第一从核;
所述第一从核,用于读取所述存储器中存储的程序代码,执行以下操作:
确定所述中断信号是否为收包中断信号;
若是,则在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,以使所述报文地址对于处于内核态及用户态的从核均可见,且所述第一从核执行的步骤基于预设的专用寄存器执行,所述预设的专用寄存器为仅供处于内核态的从核使用的寄存器。
11.根据权利要求10所述的网络设备,其特征在于,所述第一从核在中断进程中将报文的内存地址写入到用户态和内核态共享的共享内存中,包括执行:
所述第一从核从所述共享内存中申请至少一片处于空闲状态的报文描述符,其中,所述报文描述中包含用于指示所述报文描述符处于空闲状态或使用状态的状态标识位以及一段内存空间的地址,所述第一从核申请的所述至少一片报文描述中的状态标识位指示所述报文描述符处于空闲状态;
将获取的所述至少一片报文描述符中包含的所述内存空间的地址发送给直接内存访问DMA,用于所述DMA将网络接口寄存器中的报文移动到所述至少一片报文描述符中包含的内存空间地址所对应的内存空间中;
将获取的所述至少一片报文描述符的状态标识位更改为指示所述报文描述符处于使用状态。
12.根据权利要求11所述的网络设备,其特征在于,所述第一从核,还用于:
将获取的所述至少一片报文描述的状态标识位更改为指示所述报文描述符处于使用状态之后,确定所述网络接口寄存器中是否还有未接收的报文;
若有,则返回执行所述获取至少一片处于空闲状态的报文描述符的步骤;
若没有未接收的报文,则退出所述中断进程。
13.根据权利要求12所述的网络设备,其特征在于,所述多个从核中运行在用户态的第二从核,用于:
所述第一从核退出所述中断进程后,根据处于使用状态的报文描述符中的内存空间的地址,获取已移动到内存空间的报文;
对已移动到所述内存空间的报文进行业务处理。
14.根据权利要求10~13中任一项所述的网络设备,其特征在于,所述共享内存为所述多核CPU初始化时预留的部分内存,且所述共享内存为环形内存。
15.根据权利要求10~14任一项所述的网络设备,其特征在于,所述主核,还用于:
按照预设的时间间隔,获取所述位图中的第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息;
根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行状态进行调整。
16.根据权利要求15所述的网络设备,其特征在于,所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,对所述多个从核的运行空间进行调整,包括执行:
所述主核根据所述第一值所对应的至少一个从核的执行状态信息以及所述位图中的第二值所对应的至少一个从核的执行状态信息,确定控制因子,其中,所述控制因子包括以下至少一种:所述共享内存的长度、所述共享内存中的报文数量、内核态运行时间与用户态运行时间的比值;
根据所述控制因子,确定运行于内核态的从核的个数以及运行于用户态的从核的个数;
根据确定出的运行于内核空间的从核的个数以及运行于用户空间的从核的个数,对所述多个从核的运行状态进行调整。
17.根据权利要求15或16所述的网络设备,其特征在于,所述主核对所述多个从核的运行状态进行调整,包括执行:
所述主核将至少一个运行在内核态的从核的运行状态更改为运行在用户态;
和/或,
将至少一个运行在用户态的从核的运行状态更改为运行在内核态。
18.根据权利要求17所述的网络设备,其特征在于,所述主核对所述多个从核的运行状态进行调整之后,所述主核还用于:
根据所述调整的结果,将运行状态由内核态更改为用户态的从核在所述位图上所对应的比特位的值更改为第二值,将运行状态由用户态更改为内核态的从核在所述位图上所对应的比特位的值更改为第一值;
将所述更改后的位图发送给中断控制器,用于网络接口接收到报文后所述中断控制器根据所述位图向运行于内核态的从核发送收包中断信号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610082702.8A CN107046508B (zh) | 2016-02-05 | 2016-02-05 | 报文接收方法及网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610082702.8A CN107046508B (zh) | 2016-02-05 | 2016-02-05 | 报文接收方法及网络设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107046508A true CN107046508A (zh) | 2017-08-15 |
CN107046508B CN107046508B (zh) | 2020-01-31 |
Family
ID=59543701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610082702.8A Active CN107046508B (zh) | 2016-02-05 | 2016-02-05 | 报文接收方法及网络设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107046508B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107547566A (zh) * | 2017-09-29 | 2018-01-05 | 新华三信息安全技术有限公司 | 一种处理业务报文的方法及装置 |
CN108521351A (zh) * | 2018-03-21 | 2018-09-11 | 东软集团股份有限公司 | 会话流量统计方法、处理器核心、存储介质、电子设备 |
CN109857677A (zh) * | 2018-12-28 | 2019-06-07 | 晶晨半导体(上海)股份有限公司 | 内核栈的分配方法及装置 |
CN111181736A (zh) * | 2019-12-31 | 2020-05-19 | 奇安信科技集团股份有限公司 | 数据传输方法、装置、系统、介质及程序产品 |
CN111240853A (zh) * | 2019-12-26 | 2020-06-05 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
CN111294285A (zh) * | 2018-12-07 | 2020-06-16 | 网宿科技股份有限公司 | 一种网络数据的分发方法及负载均衡器 |
CN111651282A (zh) * | 2020-05-08 | 2020-09-11 | 南京南瑞继保电气有限公司 | 报文处理方法、报文处理装置及电子设备 |
CN112256502A (zh) * | 2020-09-25 | 2021-01-22 | 新华三半导体技术有限公司 | 一种内存性能测试方法、装置及芯片 |
CN112765091A (zh) * | 2021-02-04 | 2021-05-07 | 南方电网科学研究院有限责任公司 | 一种SoC核间通信方法和装置 |
CN113010275A (zh) * | 2019-12-20 | 2021-06-22 | 大唐移动通信设备有限公司 | 一种中断处理方法和装置 |
CN113204517A (zh) * | 2021-04-30 | 2021-08-03 | 南京国电南自电网自动化有限公司 | 一种电力专用以太网控制器的核间共享方法 |
CN113821257A (zh) * | 2021-09-29 | 2021-12-21 | 杭州迪普科技股份有限公司 | 处理器内核调用栈信息查询方法及装置 |
CN114073053A (zh) * | 2019-09-16 | 2022-02-18 | 华为技术有限公司 | 用于通过性能位图支持性能评估的网络节点 |
CN114978965A (zh) * | 2022-05-25 | 2022-08-30 | 中国第一汽车股份有限公司 | 一种芯片高负载情况下can诊断报文与网络报文处理方法、系统、电子设备和存储介质 |
CN115334156A (zh) * | 2021-04-26 | 2022-11-11 | 深信服科技股份有限公司 | 报文的处理方法、装置、设备、存储介质 |
WO2023010232A1 (zh) * | 2021-07-31 | 2023-02-09 | 华为技术有限公司 | 一种处理器及通信方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693162A (zh) * | 2011-12-29 | 2012-09-26 | 中国科学技术大学苏州研究院 | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 |
US20140025857A1 (en) * | 2004-03-31 | 2014-01-23 | Synopsys, Inc. | Resource management in a multicore architecture |
US20140101411A1 (en) * | 2012-10-04 | 2014-04-10 | Premanand Sakarda | Dynamically Switching A Workload Between Heterogeneous Cores Of A Processor |
CN104216862A (zh) * | 2013-05-29 | 2014-12-17 | 华为技术有限公司 | 一种用户进程与系统服务之间的通信方法、装置 |
-
2016
- 2016-02-05 CN CN201610082702.8A patent/CN107046508B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140025857A1 (en) * | 2004-03-31 | 2014-01-23 | Synopsys, Inc. | Resource management in a multicore architecture |
CN102693162A (zh) * | 2011-12-29 | 2012-09-26 | 中国科学技术大学苏州研究院 | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 |
US20140101411A1 (en) * | 2012-10-04 | 2014-04-10 | Premanand Sakarda | Dynamically Switching A Workload Between Heterogeneous Cores Of A Processor |
CN104216862A (zh) * | 2013-05-29 | 2014-12-17 | 华为技术有限公司 | 一种用户进程与系统服务之间的通信方法、装置 |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107547566A (zh) * | 2017-09-29 | 2018-01-05 | 新华三信息安全技术有限公司 | 一种处理业务报文的方法及装置 |
CN107547566B (zh) * | 2017-09-29 | 2020-11-20 | 新华三信息安全技术有限公司 | 一种处理业务报文的方法及装置 |
CN108521351B (zh) * | 2018-03-21 | 2021-02-05 | 东软集团股份有限公司 | 会话流量统计方法、处理器核心、存储介质、电子设备 |
CN108521351A (zh) * | 2018-03-21 | 2018-09-11 | 东软集团股份有限公司 | 会话流量统计方法、处理器核心、存储介质、电子设备 |
CN111294285A (zh) * | 2018-12-07 | 2020-06-16 | 网宿科技股份有限公司 | 一种网络数据的分发方法及负载均衡器 |
CN111294285B (zh) * | 2018-12-07 | 2022-10-28 | 网宿科技股份有限公司 | 一种网络数据的分发方法及负载均衡器 |
CN109857677A (zh) * | 2018-12-28 | 2019-06-07 | 晶晨半导体(上海)股份有限公司 | 内核栈的分配方法及装置 |
CN109857677B (zh) * | 2018-12-28 | 2023-03-31 | 晶晨半导体(上海)股份有限公司 | 内核栈的分配方法及装置 |
CN114073053A (zh) * | 2019-09-16 | 2022-02-18 | 华为技术有限公司 | 用于通过性能位图支持性能评估的网络节点 |
CN113010275B (zh) * | 2019-12-20 | 2024-01-30 | 大唐移动通信设备有限公司 | 一种中断处理方法和装置 |
CN113010275A (zh) * | 2019-12-20 | 2021-06-22 | 大唐移动通信设备有限公司 | 一种中断处理方法和装置 |
CN111240853A (zh) * | 2019-12-26 | 2020-06-05 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
CN111240853B (zh) * | 2019-12-26 | 2023-10-10 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
CN111181736A (zh) * | 2019-12-31 | 2020-05-19 | 奇安信科技集团股份有限公司 | 数据传输方法、装置、系统、介质及程序产品 |
CN111181736B (zh) * | 2019-12-31 | 2022-04-05 | 奇安信科技集团股份有限公司 | 数据传输方法、装置、系统及介质 |
CN111651282A (zh) * | 2020-05-08 | 2020-09-11 | 南京南瑞继保电气有限公司 | 报文处理方法、报文处理装置及电子设备 |
CN111651282B (zh) * | 2020-05-08 | 2022-07-22 | 南京南瑞继保电气有限公司 | 报文处理方法、报文处理装置及电子设备 |
CN112256502B (zh) * | 2020-09-25 | 2023-11-21 | 新华三半导体技术有限公司 | 一种内存性能测试方法、装置及芯片 |
CN112256502A (zh) * | 2020-09-25 | 2021-01-22 | 新华三半导体技术有限公司 | 一种内存性能测试方法、装置及芯片 |
CN112765091A (zh) * | 2021-02-04 | 2021-05-07 | 南方电网科学研究院有限责任公司 | 一种SoC核间通信方法和装置 |
CN112765091B (zh) * | 2021-02-04 | 2024-05-03 | 南方电网科学研究院有限责任公司 | 一种SoC核间通信方法和装置 |
CN115334156A (zh) * | 2021-04-26 | 2022-11-11 | 深信服科技股份有限公司 | 报文的处理方法、装置、设备、存储介质 |
CN113204517A (zh) * | 2021-04-30 | 2021-08-03 | 南京国电南自电网自动化有限公司 | 一种电力专用以太网控制器的核间共享方法 |
WO2023010232A1 (zh) * | 2021-07-31 | 2023-02-09 | 华为技术有限公司 | 一种处理器及通信方法 |
CN113821257A (zh) * | 2021-09-29 | 2021-12-21 | 杭州迪普科技股份有限公司 | 处理器内核调用栈信息查询方法及装置 |
CN114978965A (zh) * | 2022-05-25 | 2022-08-30 | 中国第一汽车股份有限公司 | 一种芯片高负载情况下can诊断报文与网络报文处理方法、系统、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107046508B (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107046508A (zh) | 报文接收方法及网络设备 | |
CN103645957B (zh) | 一种虚拟机资源管控方法及装置 | |
CN102262557B (zh) | 通过总线架构构建虚拟机监控器的方法及性能服务框架 | |
US8769034B2 (en) | Query performance data on parallel computer system having compute nodes | |
CN106506670B (zh) | 一种云平台虚拟资源高速调度方法与系统 | |
CN112955869A (zh) | 功能即服务(faas)系统增强 | |
CN109710400A (zh) | 线程资源分组的方法及装置 | |
US11579908B2 (en) | Containerized workload scheduling | |
CN104915151A (zh) | 多虚拟机系统中一种主动共享的内存超量分配方法 | |
US8612973B2 (en) | Method and system for handling interrupts within computer system during hardware resource migration | |
CN103455363B (zh) | 一种虚拟机的指令处理方法、装置及物理主机 | |
CN103780655A (zh) | 一种消息传递接口任务和资源调度系统及方法 | |
CN104994032B (zh) | 一种信息处理的方法和装置 | |
US20240073298A1 (en) | Intelligent scheduling apparatus and method | |
US9104488B2 (en) | Support server for redirecting task results to a wake-up server | |
CN110058949B (zh) | 一种基于智能边缘计算的传感云低耦合控制方法 | |
CN111240806B (zh) | 一种分布式容器镜像构建调度方法 | |
CN105335211A (zh) | 一种基于Xen虚拟化集群的FPGA加速器调度系统及方法 | |
CN115202908B (zh) | 一种基于动态编排的隐私计算请求响应方法及装置 | |
CN106663072A (zh) | 用于配置中断的集合的装置和方法 | |
US8296552B2 (en) | Dynamically migrating channels | |
CN113626173B (zh) | 调度方法、装置及存储介质 | |
US7466716B2 (en) | Reducing latency in a channel adapter by accelerated I/O control block processing | |
CN117332881B (zh) | 分布式训练方法及电子设备 | |
EP3011456B1 (en) | Sorted event monitoring by context partition |
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 |