一种网络通信并行处理方法及系统转让专利

申请号 : CN202211298972.4

文献号 : CN115361451B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李存禄李成龙李韬吕高锋杨惠全巍刘汝霖孙志刚

申请人 : 中国人民解放军国防科技大学

摘要 :

本申请提供一种网络通信并行处理方法及系统,涉及计算机系统网络通信领域,特别是涉及一种网络通信并行处理方法,包括步骤:根据网卡RSS队列数量,创建多个NAPI处理内核线程;将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;响应于接收到消息信号中断MSI中断信号,通过第二CPU内核运行MSI中断响应;获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程;其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量。本申请能够实现多个内核同时并行处理网卡上多个队列中的报文数据,能够提高系统整体网络通信效率。

权利要求 :

1.一种网络通信并行处理方法,其特征在于,包括:

根据网卡RSS队列数量,创建多个NAPI处理内核线程;

将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;

响应于接收到消息信号中断MSI中断信号,通过第二CPU内核运行MSI中断响应;

获取有报文数据的RSS队列,唤醒对应的所述NAPI处理内核线程;

其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量。

2.根据权利要求1所述的网络通信并行处理方法,其特征在于,在所述将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核之后,还包括:分别为每个所述NAPI处理内核线程创建对应的第一全局变量和对应的第二全局变量;

其中,所述第一全局变量,用于控制所述NAPI处理内核线程的开始与结束;所述第二全局变量,用于控制所述NAPI处理内核线程是否进行报文数据的处理。

3.根据权利要求2所述的网络通信并行处理方法,其特征在于,在所述分别为每个所述NAPI处理内核线程创建对应的第一全局变量和对应的第二全局变量之后,还包括:将每个所述NAPI处理内核线程对应的所述第一全局变量设置为有效,将每个所述NAPI处理内核线程对应的所述第二全局变量设置为无效。

4.根据权利要求3所述的网络通信并行处理方法,其特征在于,在所述将每个所述NAPI处理内核线程对应的所述第一全局变量设置为有效,将每个所述NAPI处理内核线程对应的所述第二全局变量设置为无效之后,还包括:唤醒每个所述NAPI处理内核线程。

5.根据权利要求4所述的网络通信并行处理方法,其特征在于,在所述唤醒每个所述NAPI处理内核线程之后,还包括:获取所述RSS队列的队列号,根据所述RSS队列的队列号,标识对应的所述NAPI处理内核线程。

6.根据权利要求5所述的网络通信并行处理方法,其特征在于,在所述获取所述RSS队列的队列号,根据所述RSS队列的队列号,标识对应的所述NAPI处理内核线程之后,还包括:所述NAPI处理内核线程完成NAPI初始化。

7.根据权利要求6所述的网络通信并行处理方法,其特征在于,所述获取有报文数据的RSS队列,唤醒对应的所述NAPI处理内核线程包括:获取所述有报文数据的RSS队列;

关闭所述有报文数据的RSS队列对应的中断使能寄存器;

获取所述有报文数据的RSS队列对应的所述第二全局变量,并将所述第二全局变量设置为有效;

唤醒所述有报文数据的RSS队列对应的所述NAPI处理内核线程。

8.根据权利要求7所述的网络通信并行处理方法,其特征在于,所述获取所述有报文数据的RSS队列包括:轮询读取所述RSS队列相关信息寄存器,获取有报文数据的RSS队列号;

相应地,所述关闭所述有报文数据的RSS队列对应的中断使能寄存器包括:关闭所述有报文数据的RSS队列号对应的中断使能寄存器;

相应地,所述获取所述有报文数据的RSS队列对应的所述第二全局变量,并将所述第二全局变量设置为有效包括:获取所述有报文数据的RSS队列号对应的所述第二全局变量,并将所述第二全局变量设置为有效;

相应地,所述唤醒所述有报文数据的RSS队列对应的所述NAPI处理内核线程包括:唤醒所述有报文数据的RSS队列号对应的所述NAPI处理内核线程。

9.根据权利要求8所述的网络通信并行处理方法,其特征在于,所述唤醒所述有报文数据的RSS队列号对应的所述NAPI处理内核线程包括:根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第一全局变量,判断所述第一全局变量是否有效,若无效,则释放所有申请的内存并结束所述NAPI处理内核线程,若有效,则:根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第二全局变量,判断所述第二全局变量是否有效,若有效,则所述NAPI处理内核线程处理对应的所述RSS队列的报文数据,根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第二全局变量,并将所述第二全局变量设置为无效,若无效,则:将所述NAPI处理内核线程设置为睡眠状态后,返回再次执行所述根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第一全局变量,判断所述第一全局变量是否有效的步骤。

10.根据权利要求1所述的网络通信并行处理方法,其特征在于,所述网卡RSS队列数量,根据网卡配置空间信息来获取。

11.一种网络通信并行处理系统,其特征在于,包括:

NAPI处理内核线程创建单元,用于根据网卡RSS队列数量,创建多个NAPI处理内核线程;

第一CPU内核绑定单元,用于将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;

第二CPU内核响应单元,用于响应于接收到MSI中断信号,通过第二CPU内核运行MSI中断响应;

NAPI处理内核线程触发单元,用于获取有报文数据的RSS队列,唤醒对应的所述NAPI处理内核线程;

其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量。

说明书 :

一种网络通信并行处理方法及系统

技术领域

[0001] 本申请涉及计算机系统网络通信领域,特别是涉及一种网络通信并行处理方法;本申请还涉及一种网络通信并行处理系统。

背景技术

[0002] 现代计算机系统中,网络通信过程通常由中央处理器(Central Processing Unit, CPU)、局部总线(Localbus)和网络接口控制卡(Network Interface Controller, NIC)(简称网卡)共同协作完成。由于网络事件产生的不确定性,为了避免CPU的空闲等待,NIC与CPU之间通常采用中断机制进行通信。目前绝大多数计算机系统都使用PCI(Peripheral Component Interconnect,外部设备互连)或PCIe(Peripheral Component Interconnect Express,外部设备快速互连)总线作为局部总线连接网卡。在PCI总线规范中,所有需要提交中断请求的设备必须通过INTx引脚信号线,同时将MSI(Message Signal Interrupt,消息信号中断)机制作为可选机制。而在PCIe总线规范中,所有需要提交中断请求的设备必须支持MSI或MSI‑X(Message Signaled Interrupt eXtended,消息信号中断扩展)机制,但可以不支持INTx中断消息。因此,对于大多数网卡,MSI中断机制是最普遍被使用的。
[0003] 网络通信还存在突发性,即短时间内需要接收大量报文数据。在突发性网络通信中,如果每个网络报文到达都产生中断,就会导致CPU响应开销的急剧增加,严重影响CPU的计算效率。为了避免上述问题,当前Linux系统采用NAPI(New Application Program Interface,新的应用程序编程接口)机制,通过将中断方式和轮询方式相结合的方法来处理网络事件。具体过程为,每当有数据到来时,首先触发中断请求,中断响应函数响应中断请求后会暂时关闭NIC中断功能并进入轮询模式处理报文数据,当报文数据全部处理完成时,再恢复NIC中断功能。
[0004] 随着集成电路技术的高速发展,现代计算机系统的CPU通常具有多个甚至数十个内核(Core),支持并行化处理从而提升处理效率。NIC为了提供相匹配的并行处理模式,也发展出了RSS(Receive Side Scaling,接收端缩放)技术。RSS技术原理为,对于接收到的网络报文提取首部信息生成哈希值,根据预先配置的查找表将报文数据送往网卡内不同队列,这些队列可以分别由不同内核使用NAPI机制同时并行处理。
[0005] 然而,实际部署中受限于操作系统内核版本和硬件环境,多核中央处理器和支持RSS的NIC可能必须使用MSI中断机制进行网络通信。在此场景下,因为NIC产生的MSI中断全部仅由一个内核进行响应,不同队列的NAPI轮询处理过程又与中断响应函数绑定,这样就只能串行处理报文数据,导致无法有效利用多核与多队列对报文数据进行并行处理,使得网络通信效率低下。
[0006] 因此,如何在受限的软硬件环境下,实现使用MSI中断进行高效的网络通信,是本领域技术人员亟待解决的技术问题。

发明内容

[0007] 为解决上述技术问题,本申请提供一种网络通信并行处理方法,不需要额外修改已有软硬件环境,能够充分利用多内核中央处理器和支持RSS技术网卡的并行能力,提高系统整体网络通信效率。本申请还提供一种网络通信并行处理系统,具有相同的技术效果。
[0008] 本申请的第一个目的为提供一种网络通信并行处理方法。
[0009] 本申请的上述申请目的一是通过以下技术方案得以实现的:
[0010] 一种网络通信并行处理方法,包括以下步骤:
[0011] 根据网卡RSS队列数量,创建多个NAPI处理内核线程;
[0012] 将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;
[0013] 响应于接收到MSI中断信号,通过第二CPU内核运行MSI中断响应;
[0014] 获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程;
[0015] 其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量。
[0016] 优选地,所述网络通信并行处理方法,在所述将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核之后,还包括:
[0017] 分别为每个所述NAPI处理内核线程创建对应的第一全局变量和对应的第二全局变量;
[0018] 其中,所述第一全局变量,用于控制所述NAPI处理内核线程的开始与结束;所述第二全局变量,用于控制所述NAPI处理内核线程是否进行报文数据的处理。
[0019] 优选地,所述网络通信并行处理方法,在所述分别为每个所述NAPI处理内核线程创建对应的第一全局变量和对应的第二全局变量之后,还包括:
[0020] 将每个所述NAPI处理内核线程对应的所述第一全局变量设置为有效,将每个所述NAPI处理内核线程对应的所述第二全局变量设置为无效。
[0021] 优选地,所述网络通信并行处理方法,在所述将每个所述NAPI处理内核线程对应的所述第一全局变量设置为有效,将每个所述NAPI处理内核线程对应的所述第二全局变量设置为无效之后,还包括:
[0022] 唤醒每个所述NAPI处理内核线程。
[0023] 优选地,所述网络通信并行处理方法,在所述唤醒每个所述NAPI处理内核线程之后,还包括:
[0024] 获取所述RSS队列的队列号,根据所述RSS队列的队列号,标识对应的所述NAPI处理内核线程。
[0025] 优选地,所述网络通信并行处理方法,在所述获取所述RSS队列的队列号,根据所述RSS队列的队列号,标识对应的所述NAPI处理内核线程之后,还包括:
[0026] 所述NAPI处理内核线程完成NAPI初始化 。
[0027] 优选地,所述网络通信并行处理方法,所述获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程包括:
[0028] 获取所述有报文数据的RSS队列;
[0029] 关闭所述有报文数据的RSS队列对应的中断使能寄存器;
[0030] 获取所述有报文数据的RSS队列对应的所述第二全局变量,并将所述第二全局变量设置为有效;
[0031] 唤醒所述有报文数据的RSS队列对应的所述NAPI处理内核线程。
[0032] 优选地,所述网络通信并行处理方法,所述获取所述有报文数据的RSS队列包括:
[0033] 轮询读取所述RSS队列相关信息寄存器,获取有报文数据的RSS队列号;
[0034] 相应地,所述关闭所述有报文数据的RSS队列对应的中断使能寄存器包括:
[0035] 关闭所述有报文数据的RSS队列号对应的中断使能寄存器;
[0036] 相应地,所述获取所述有报文数据的RSS队列对应的所述第二全局变量,并将所述第二全局变量设置为有效包括:
[0037] 获取所述有报文数据的RSS队列号对应的所述第二全局变量,并将所述第二全局变量设置为有效;
[0038] 相应地,所述唤醒所述有报文数据的RSS队列对应的所述NAPI处理内核线程包括:
[0039] 唤醒所述有报文数据的RSS队列号对应的所述NAPI处理内核线程。
[0040] 优选地,所述网络通信并行处理方法,所述唤醒所述有报文数据的RSS队列号对应的所述NAPI处理内核线程包括:
[0041] 根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第一全局变量,判断所述第一全局变量是否有效,若无效,则释放所有申请的内存并结束所述NAPI处理内核线程,若有效,则:
[0042] 根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第二全局变量,判断所述第二全局变量是否有效,若有效,则所述NAPI处理内核线程处理对应的所述RSS队列的报文数据,根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第二全局变量,并将所述第二全局变量设置为无效,若无效,则:
[0043] 将所述NAPI处理内核线程设置为睡眠状态后,返回再次执行所述根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第一全局变量,判断所述第一全局变量是否有效的步骤。
[0044] 优选地,所述网络通信并行处理方法,所述网卡RSS队列数量,根据网卡配置空间信息来获取。
[0045] 本申请的第二个目的为提供一种网络通信并行处理系统。
[0046] 本申请的上述申请目的二是通过以下技术方案得以实现的:
[0047] 一种网络通信并行处理系统,包括:
[0048] NAPI处理内核线程创建单元,用于根据网卡RSS队列数量,创建多个NAPI处理内核线程;
[0049] 第一CPU内核绑定单元,用于将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;
[0050] 第二CPU内核响应单元,用于响应于接收到MSI中断信号,通过第二CPU内核运行MSI中断响应;
[0051] NAPI处理内核线程触发单元,用于获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程;
[0052] 其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量。
[0053] 上述技术方案中,第一CPU内核与第二CPU内核有如下区分:第一CPU内核不处理网卡MSI中断,第二CPU内核可处理网卡MSI中断;由上可知,上述技术方案,通过创建多个NAPI处理内核线程并分别绑定至对应的第一CPU内核,NAPI处理内核线程的数量为网卡RSS队列数量,从而可以实现NAPI处理内核线程与网卡RSS队列的一一对应,当接收到MSI中断信号时,第二CPU内核运行MSI中断响应,然后获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程进行报文数据的处理,实现了MSI中断处理过程和网络报文接收过程的分离,且在不需要修改原有操作系统内核和硬件接口的情况下,实现了多个内核同时并行处理网卡上多个队列中的报文数据,提高了系统整体网络通信效率。

附图说明

[0054] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0055] 图1为本申请实施例1中提供的一种网络通信并行处理方法的流程图;
[0056] 图2为本申请实施例2中提供的一种网络通信并行处理方法的流程图;
[0057] 图3为本申请实施例3中提供的一种网络通信并行处理系统的结构图。

具体实施方式

[0058] 为了使本领域的技术人员更好地理解本申请中的技术方案,下面将对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0059] 须知,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,多个”、“若干个”的含义是两个或两个以上,除非另有明确具体的限定。
[0060] 在本申请所提供的实施例中,应该理解到,所揭露的方法和系统,可以通过其它的方式实现。以下所描述的系统实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或模块的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
[0061] 另外,在本发明各实施例中的各功能单元可以全部集成在一个处理器中,也可以是各单元分别单独作为一个器件,也可以两个或两个以上单元集成在一个器件中;本发明各实施例中的各功能单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0062] 本领域普通技术人员可以理解:实现下述方法实施例的全部或部分步骤可以通过程序指令及相关的硬件来完成,前述的程序指令可以存储于计算机可读取存储介质中,该程序指令在执行时,执行包括下述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0063] 本申请的发明人发现,因为在实际部署中受限于操作系统内核版本和硬件环境,多核中央处理器和支持RSS的NIC可能必须使用MSI中断机制进行网络通信。在此场景下,因为NIC产生的MSI中断全部仅由一个内核进行响应,不同队列的NAPI轮询处理过程又与中断响应函数绑定,这样就只能串行处理报文数据,导致无法有效利用多核与多队列对报文数据进行并行处理,使得网络通信效率低下。基于此,本申请的发明人提出了一种网络通信并行处理方案,该方案将CPU的多个内核划分为第一CPU内核与第二CPU内核,其中第一CPU内核不处理网卡MSI中断,第二CPU内核可处理网卡MSI中断;通过创建多个NAPI处理内核线程并分别绑定至对应的第一CPU内核,当接收到MSI中断信号时,第二CPU内核运行MSI中断响应,然后获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程进行报文数据的处理,以此实现MSI中断处理过程和网络报文接收过程的分离,且在不需要修改原有操作系统内核和硬件接口的情况下,实现多个内核同时并行处理网卡上多个队列中的报文数据,从而提高系统整体网络通信效率。
[0064] 本申请的实施例1提供一种网络通信并行处理方法,如图1所示,所述方法的步骤如下:
[0065] S101,根据网卡RSS队列数量,创建多个NAPI处理内核线程;其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量;
[0066] 在S101中,可以根据网卡配置空间信息来获取所述网卡RSS队列数量,其获取方式不影响本实施例的实现;所述NAPI处理内核线程的数量为所述网卡RSS队列数量,从而可以实现所述NAPI处理内核线程与所述网卡RSS队列的一一对应;可以利用Linux内核函数kthread_create,并设置运行函数为napi_rx_thread来创建所述NAPI处理内核线程,其创建方式不影响本实施例的实现。
[0067] S102,将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;
[0068] 在S102中,需要说明的是,所述第一CPU内核不处理网卡MSI中断;可利用Linux内核函数set_cpus_allowed_ptr来将绑定所述NAPI处理内核线程至所述第一CPU内核,其绑定方式不影响本实施例的实现;此步骤的主要目的是让所述第一CPU内核能够接收处理网络报文。
[0069] S103,响应于接收到MSI中断信号,通过第二CPU内核运行MSI中断响应;
[0070] 在S103中,当网络报文数据到达所述网卡的RSS队列后,在满足一定条件时,由所述网卡产生的所述MSI中断信号,通过总线传递到所述第二CPU内核,当接受到所述MSI中断信号时,所述第二CPU内核,能够调用对应的驱动程序进行MSI中断响应;可选地,当所述网卡没有产生所述MSI中断信号时,所述NAPI内核处理线程可以设置为睡眠状态,其不影响本实施例的实现;所述S102和所述S103主要目的是将MSI中断处理过程的CPU内核和网络报文接收过程的CPU内核的得以分离。
[0071] S104,获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程。
[0072] 在S104中,可以通过轮询所述RSS队列相关信息寄存器,获取所述有报文数据的RSS队列,其获取方式不影响本实施例的实现;可利用Linux内核函数wake_up_process,唤醒对应的所述NAPI内核处理线程,其唤醒方式不影响本实施例的实现;此步骤的目的是触发所述NAPI内核处理线程开始处理对应的所述RSS队列的报文数据,而此时,所述第二CPU内核可以等待下一个MSI中断的到来,而本次MSI中断所涉及的所述RSS队列的报文数据被并行处理。
[0073] 本申请的实施例1,通过创建多个所述NAPI处理内核线程并分别绑定至对应的所述第一CPU内核,所述NAPI处理内核线程的数量为所述网卡RSS队列数量,从而可以实现所述NAPI处理内核线程与所述网卡RSS队列的一一对应,当接收到所述MSI中断信号时,所述第二CPU内核运行MSI中断响应,然后获取所述有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程进行报文数据的处理,以此实现MSI中断处理过程和网络报文接收过程的分离,且在不需要修改原有操作系统内核和硬件接口的情况下,实现多个内核同时并行处理网卡上多个队列中的报文数据,从而提高系统整体网络通信效率。
[0074] 在本申请实施例1的基础上,本申请的实施例2通过引入2个全局变量,提供了另外一种网络通信并行处理方法,如图2所示,所述方法的步骤如下:
[0075] S201,根据网卡配置空间信息,获取RSS队列数量Q;
[0076] S202,创建Q个NAPI处理内核线程;
[0077] S203,将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;
[0078] S204,分别为每个所述NAPI处理内核线程创建对应的第一全局变量和对应的第二全局变量;
[0079] 在S204中,所述第一全局变量,用于控制所述NAPI处理内核线程的开始与结束;所述第二全局变量,用于控制所述NAPI处理内核线程是否进行报文数据的处理。
[0080] S205,将每个所述NAPI处理内核线程对应的所述第一全局变量设置为有效,将每个所述NAPI处理内核线程对应的所述第二全局变量设置为无效;
[0081] 在S205中,对每个所述NAPI处理内核线程所对应的所述第一全局变量和对应的所述第二全局变量进行初始设置,其设置方式不影响本实施例的实现。
[0082] S206,唤醒每个所述NAPI处理内核线程;
[0083] S207,获取所述RSS队列的队列号,根据所述RSS队列的队列号,标识对应的所述NAPI处理内核线程;
[0084] 在S207中,可通过驱动程序提供的网卡结构体,获取所述RSS队列的队列号,其获取方式不影响本实施的实现。
[0085] S208,所述NAPI处理内核线程完成NAPI初始化;
[0086] 在S208中,可使用内核API函数netif_napi_add,完成所述NAPI初始化,其初始化完成方式不影响本实施例的实现;所述NAPI初始化可包括绑定poll函数并设置权重,所述poll函数执行完毕时将打开所处理队列的中断使能寄存器,所述权重,用于限定所述poll函数每次处理的报文数量上限。
[0087] 由于在S205中已对所述NAPI处理内核线程进行相应的初始设置,因此在S208中所述NAPI 处理内核线程完成所述NAPI初始化后,其并不会进行报文数据的处理,需要继续等待所述NAPI处理内核线程对应的所述第二全局变量被设置为有效。
[0088] S209,响应于接收到MSI中断信号,通过第二CPU内核运行MSI中断响应;
[0089] S210,轮询读取所述RSS队列相关信息寄存器,获取有报文数据的RSS队列号;
[0090] 所述S210的目的是获取哪些网卡RSS队列有报文数据需要被处理,在本领域中,其只是获取哪些网卡RSS队列有报文数据需要被处理的一种方式。
[0091] S211,关闭所述有报文数据的RSS队列号对应的中断使能寄存器;
[0092] 所述S211的目的是使所述有报文数据的RSS队列不再产生中断信号,避免干扰后续进行NAPI的轮询处理。
[0093] S212,获取所述有报文数据的RSS队列号对应的所述第二全局变量,并将所述第二全局变量设置为有效;
[0094] S213,根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第一全局变量,判断所述第一全局变量是否有效,若有效,则执行S214,若无效,则执行S217;
[0095] S214,根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第二全局变量,判断所述第二全局变量是否有效,若有效,则执行S215,若无效,则执行S216;
[0096] S215,所述NAPI处理内核线程处理对应的所述RSS队列的报文数据,根据所述有报文数据的RSS队列号,获取对应的所述NAPI处理内核线程所对应的所述第二全局变量,并将所述第二全局变量设置为无效;
[0097] 在所述215中,可通过Linux内核函数__napi_shcedule_irqoff,调度所述NAPI处理内核线程绑定的poll函数开始处理对应的所述RSS队列的报文数据,其调度方式不影响本实施例的实现。
[0098] S216,将所述NAPI处理内核线程设置为睡眠状态,然后返回执行所述S213;
[0099] 在S216中,可通过Linux内核函数schedule,将所述NAPI处理内核线程设置为睡眠状态,其实施方式不影响本实施例的实现。
[0100] S217,释放所有申请的内存并结束所述NAPI处理内核线程。
[0101] 在S217中,可通过Linux内核函数kfree释放所有申请的内存,其实施方式不影响本实施例的实现。
[0102] 所述S213至所述S217,根据所述NAPI处理内核线程对应的所述第一全局变量判断是否开始运行,如不应当运行则释放所有申请内存并结束。在所述NAPI处理内核线程完成所述NAPI初始化后,根据对应的所述第二全局变量判断是否需要进行网络报文数据处理,如需要则调度所述poll函数,如不需要则将所述NAPI处理内核线程设置为睡眠状态。由上可知,本申请的实施例2,能够更好的利用系统资源,提高系统整体网络通信效率。
[0103] 在本申请的另一实施例3中,提供一种网络通信并行处理系统,如图3所示,所述系统包括:
[0104] NAPI处理内核线程创建单元10,用于根据网卡RSS队列数量,创建多个NAPI处理内核线程;
[0105] 第一CPU内核绑定单元11,用于将每个所述NAPI处理内核线程,分别绑定至对应的一个第一CPU内核;
[0106] 第二CPU内核响应单元12,用于响应于接收到MSI中断信号,通过第二CPU内核运行MSI中断响应;
[0107] NAPI处理内核线程触发单元13,用于获取有报文数据的RSS队列,唤醒对应的所述NAPI内核处理线程;
[0108] 其中,所述NAPI表示新的应用程序编程接口;所述RSS表示接收端缩放;所述NAPI处理内核线程的数量即为所述网卡RSS队列数量。
[0109] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。