数据处理装置及数据处理方法

文档序号:7999111阅读:105来源:国知局
数据处理装置及数据处理方法
【专利摘要】本发明涉及一种数据处理装置及数据处理方法,所述装置包括M个协议栈、至少一个分发服务模块,其中,所述M个协议栈,分别运行于处理器的不同逻辑核,用于根据协议处理规则,各自独立地对待处理数据包进行协议处理;所述分发服务模块,从网络接口上接收输入的数据包,并将所述数据包发送给所述M个协议栈中的一个协议栈进行协议处理;以及接收所述M个协议栈处理后的数据包,并将所述数据包通过所述网络接口向外部发送。本发明可以实现在多核的环境下,利用多核系统并行处理的特性,在操作系统用户空间实现多进程并行协议处理的功能,并减少数据包拷贝造成的资源消耗。
【专利说明】数据处理装置及数据处理方法

【技术领域】
[0001] 本发明涉及计算机领域,具体涉及一种数据处理装置及数据处理方法。

【背景技术】
[0002] Linux操作系统自身分为两部分,一部分为核心软件,也称作内核空间,另一部分 为普通应用程序,也称为用户空间。现有技术中,Linux系统中仅有一个协议栈实例,其运 行在内核空间,单个实施例协议栈无法实现对数据并行地进行协议处理,处理效率较低。同 时,在开发人员在开发应用时,需要在用户态开发应用,因此,当用户态的应用需要访问内 核态的内存空间时,需要将内存空间拷贝到用户空间,用户态的应用再对相应的数据进行 访问。这导致了较大的资源消耗。


【发明内容】

[0003] 本发明的目的是提供一种数据处理装置,以实现在多核的环境下,利用多核系统 并行处理的特性,在操作系统用户空间实现多进程并行协议处理的功能,并通过内存映射 技术,减少数据包拷贝造成的资源消耗。
[0004] 第一方面,本发明实施例提供了 一种数据处理装置,所述装置包括Μ个协议栈和 至少一个分发服务模块,所述Μ个协议栈和至少一个分发服务模块设置在操作系统的用户 空间,Μ为大于1的正整数,其中,
[0005] 所述Μ个协议栈,分别运行于处理器的不同逻辑核,所述Μ个协议栈用于根据协议 处理规则,各自独立地对待处理数据包进行协议处理;
[0006] 所述分发服务模块,用于根据预配置规则,从至少一个网络接口上的至少一个输 入端口接收数据包,并将所述数据包存储至内存空间,以便于所述Μ个协议栈中的一个协 议栈对所述数据包进行协议处理;以及接收所述Μ个协议栈处理后的数据包,并将所述数 据包通过所述网络接口上的输出端口向外部发送,其中,所述内存空间是经过内存映射后 的存储空间,所述内存空间用户态和内核态都可以访问。
[0007] 结合第一方面,在第一种可能的实施方式中,所述装置还包括在所述操作系统的 用户空间设置的内存管理模块;
[0008] 所述内存管理模块,包括用于存储数据包的所述内存空间,与所述Μ个协议栈对 应的Μ个输入队列,以及与所述网络接口上的所述输出端口对应的输出队列;所述Μ个输 入队列用于存储需要所述Μ个协议栈处理的数据包的指针,所述输出队列用于存储需要向 外部发送的数据包的指针,所述指针指向所述数据包在所述内存空间的地址;
[0009] 所述分发服务模块具体用于:从所述网络接口上的所述输入端口接收到的数据包 存储在所述内存空间;读取所述数据包的包头,根据所述包头确定需要对该数据包进行协 议处理的协议栈,并将所述数据包的指针插入与所述确定的所述协议栈对应的所述输入队 列;
[0010] 所述协议栈具体用于:
[0011] 根据该协议栈对应的所述输入队列中的指针在所述内存空间中读取数据包,并对 所述数据包进行协议处理;
[0012] 若经过所述协议处理后的数据包需要提交给用户应用,则将所述数据包拷贝给所 述用户应用;
[0013] 若经过所述协议处理后的数据包需要向外部发送,则所述协议栈将所述数据包的 指针插入所述内存管理模块的输出队列;
[0014] 所述分发服务模块具体用于:根据所述输出队列中的指针,将与所述指针对应的 数据包从与所述输出队列对应的网络接口上的输出端口发送。
[0015] 结合第一方面或第一种可能的实施方式,在第二种可能的实施方式中,所述分发 服务模块数目为Μ个,分别与所述Μ个协议栈对应,所述Μ个分发服务模块分别运行在处理 器不同的逻辑核。
[0016] 结合第一方面或第一种可能的实施方式,或第二种可能的实施方式,在第三种可 能的实施方式中,所述装置还包括:
[0017] 协议配置模块,用于对所述协议栈进行协议处理规则的配置。
[0018] 结合第一方面或第一种可能的实施方式,或第二种可能的实施方式,或第三种可 能的实施方式,在第四种可能的实施方式中,所述装置还包括:
[0019] 通用协议处理模块,用于对需要通用协议处理的数据包进行通用协议处理;
[0020] 所述分发服务模块还用于:根据接收到的数据包的所述包头确定需要对该数据包 需要进行通用协议处理时,将所述数据包的指针发送给所述通用协议处理模块,以便于所 述通用协议处理模块对所述指针对应的数据包进行通用协议处理。
[0021] 结合第一方面或第一种可能的实施方式,或第二种可能的实施方式,或第三种可 能的实施方式,或第四种可能的实施方式,在第五种可能的实施方式中,所述装置还包括设 置在所述操作系统的内核空间的网络输入/输出模块;
[0022] 所述分发服务模块具体用于:通过所述网络输入/输出模块从所述网络接口的输 入端口上接收数据包,通过所述网络输入/输出模块从所述网络接口的输出端口上向外部 发送数据包。
[0023] 结合第一方面的第五种可能的实施方式,在第六种可能的实施方式中,所述分发 服务模块采用轮询的方式通过所述网络输入/输出模块从所述网络接口的不同输入端口 接收数据包。
[0024] 第二方面,本发明实施例提供了一种数据处理方法,应用于操作系统的用户空间, 所述方法包括:
[0025] 从网络接口的输入端口接收数据包;
[0026] 将接收到的所述数据包存储到内存空间,所述内存空间是经过内存映射后的存储 空间,所述内存空间用户态和内核态都可以访问;
[0027] 根据所述数据包的属性,确定需要对所述数据包进行协议处理的第一协议栈,所 述第一协议栈为Μ个协议栈中的一个,所述Μ个协议栈设置在操作系统的用户空间,Μ为大 于1的正整数;
[0028] 将所述数据包的指针插入与所述第一协议栈对应的输入队列,所述数据包的指针 指向所述数据包在所述内存空间中的地址,以便于所述第一协议栈根据所述输入队列中的 所述指针,从所述内存空间中取出所述指针对应的数据包,根据协议处理规则对所述数据 包进行协议处理。
[0029] 结合第二方面,在第一种实施方式中,如果所述协议处理后的数据包需要用户应 用程序处理,则所述第一协议栈将所述协议处理后的数据包拷贝给所述用户应用程序;如 果所述协议处理后的所述数据包需要向外部发送,则所述第一协议栈将所述数据包的指针 插入输出队列;
[0030] 所述方法还包括:
[0031] 若所述第一协议栈将所述数据包的指针插入输出队列,则根据所述输出队列中的 指针,将与所述指针对应的数据包从与所述输出队列对应的网络接口的输出端口发送。
[0032] 第三方面,本发明实施例提供了一种数据处理方法,所述方法包括:
[0033] 第一协议栈将协议处理后的数据包存储到内存空间,并根据所述数据包的属性将 所述数据包的指针插入输出队列,以便于分发服务模块从所述输出队列读取所述指针对应 的所述数据包,通过与所述输出队列对应的所述网络接口上的输出端口将所述指针对应的 数据包向外部发送;
[0034] 所述第一协议栈为位于用户空间的Μ个协议栈中的一个,所述Μ个协议栈分别运 行在处理器一个逻辑核,所述Μ个协议栈和所述分发服务模块设置在操作系统的用户空 间;所述输出队列与网络接口上的输出端口对应,所述数据包的指针指向所述数据包在所 述内存空间中的地址,所述内存空间是经过内存映射后的存储空间,所述内存空间用户态 和内核态都可以访问,Μ为大于1的正整数。
[0035] 结合第三方面,在第一种可能的实施方式中,所述的通过与所述输出队列对应的 所述网络接口上的输出端口将所述指针对应的数据包向外部发送,具体包括:
[0036] 通过网络输入/输出模块将所述内存空间中与所述指针对应的数据包发送到与 所述输出队列对应的所述网络接口上的输出端口;
[0037] 所述网络输入/输出模块设置在所述操作系统的内核空间。
[0038] 第四方面,本发明实施例提供了一种计算机主机,所述计算机主机包括硬件层、运 行在硬件层之上的操作系统层,所述硬件层包括至少一个网络接口和至少一个处理器,所 述处理器包括至少Μ个逻辑核,Μ为大于1的正整数,所述操作系统分为内核空间和用户空 间,在所述用户空间设置有:
[0039] Μ个协议栈,分别运行于处理器的Μ个逻辑核,所述Μ个协议栈用于根据协议处理 规则,各自独立地对待处理数据包进行协议处理;
[0040] 分发服务模块,用于根据预配置规则,从至少一个网络接口上的至少一个输入端 口接收数据包,并将所述数据包存储至内存空间,以便于所述Μ个协议栈中的一个协议栈 对所述数据包进行协议处理;以及接收所述Μ个协议栈处理后的数据包,并将所述数据包 通过所述网络接口上的输出端口向外部发送,所述内存空间是经过内存映射后的存储空 间,所述内存空间用户态和内核态都可以访问。
[0041] 基于第四方面,在第一种可能的实施方式中,在所述用户空间还设置有:
[0042] 内存管理模块,包括用于存储数据包的所述内存空间,与所述Μ个协议栈对应的Μ 个输入队列,以及与所述网络接口上的所述输出端口对应的输出队列;所述Μ个输入队列 用于存储需要所述Μ个协议栈处理的数据包的指针,所述输出队列用于存储需要向外部发 送的数据包的指针,所述指针指向所述数据包在所述内存空间的地址;
[0043] 所述分发服务模块具体用于:将从所述网络接口上的所述输入端口接收到的数据 包存储在所述内存空间;读取所述数据包的包头,根据所述包头确定需要对该数据包进行 协议处理的协议栈,并将所述数据包的指针插入与所述协议栈对应的所述输入队列;
[0044] 所述协议栈具体用于:
[0045] 根据该协议栈对应的所述输入队列中的指针在所述内存空间中读取数据包,并对 所述数据包进行协议处理。
[0046] 若经过所述协议处理后的数据包需要提交给用户应用,则将所述数据包拷贝给所 述用户应用;
[0047] 若经过所述协议处理后的数据包需要向外部发送,则所述协议栈将所述数据包的 指针插入所述内存管理模块的输出队列,。
[0048] 所述分发服务模块具体用于:根据所述输出队列中的指针,将与所述指针对应的 数据包从与所述输出队列对应的网络接口上的输出端口发送。
[0049] 基于第四方面或第四方面的第一种可能的实施方式,在第二种可能的实施方式 中,所述分发服务模块数目为Μ个,分别与所述Μ个协议栈对应,所述Μ个分发服务模块分 别运行在处理器的Μ个逻辑核。
[0050] 本发明实施例提供的数据处理装置,通过设置在操作系统用户空间并且分别运行 处理器不同逻辑核的Μ个协议栈对至少一个分发服务模块从外部接收到的数据包,根据预 配置规则,各自独立地对待处理数据包进行协议处理、可以在提高协议处理效率,并且应用 在用户空间,可以方便开发人员开发应用,并且,本发明实施例中的几乎全部数据处理过程 都集中在用户态操作,内核态只需要通过内存映射即可使用户态直接读取数据,不需要数 据从内核态拷贝到用户态,从而避免资源消耗。

【专利附图】

【附图说明】
[0051] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述 中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些 实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些 附图获得其他的附图。
[0052] 图1为本发明实施例提供的数据处理装置一种实施例的结构图;
[0053] 图2为本发明实施例提供的数据处理装置一种实施例的结构图;
[0054] 图3为本发明实施例提供的数据处理装置中内存管理模块的工作原理示意图;
[0055] 图4为本发明实施例提供的数据处理装置再一种实施例的结构图;
[0056] 图5为本发明实施例提供的数据处理装置再一种实施例的结构图;
[0057] 图6本发明实施例提供的数据处理装置再一种实施例的结构图;
[0058] 图7为本发明实施例提供的数据处理方法一种实施例的流程图;
[0059] 图8为本发明实施例提供的数据处理方法又一种实施例的流程图;
[0060]图9为本发明实施例提供的计算机主机的一种实施例的结构图。

【具体实施方式】
[0061] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。下面通过附图和实施例,对本发明的技术方案做进一步 的详细描述。
[0062] 如图1所示,本发明实施例提供了 一种数据处理装置,包括Μ个协议栈和至少一个 分发服务模块,所述Μ个协议栈和至少一个分发服务模块设置在操作系统的用户空间,Μ为 大于1的正整数,其中,
[0063] 所述Μ个协议栈,分别运行于处理器的不同逻辑核,用于根据协议处理规则,各自 独立地对待处理数据包进行协议处理
[0064] 所述分发服务模块,根据预配置规则,从至少一个网络接口上的至少一个输入端 口接收输入的数据包,并将所述数据包存储至内存空间,以便于所述Μ个协议栈中的一个 协议栈对所述数据包进行协议处理;以及接收所述Μ个协议栈处理后的数据包,并将所述 数据包通过所述网络接口上的输出端口向外部发送,其中,所述内存空间是经过内存映射 后的存储空间,所述内存空间用户态和内核态都可以访问。
[0065] 其中,所述的分发服务模块可以只有一个也可以与Μ个协议栈一一对应,设置Μ 个,分别运行在处理器的不同逻辑核。
[0066] 处理器的不同逻辑核(multicore chips)是指在一枚处理器(chip)中集成多个完 整的计算引擎,每个计算引擎称为一个逻辑核。
[0067] 更具体的,所述的Μ个用户态协议栈分别在CPU的一个独立的逻辑核上执行,在多 核系统中并行运行。Μ个协议栈独立进行协议处理,相互之间并行,没有交集。
[0068] 如图2所示,在一种可能的实施方式中,所述装置还包括位于内核空间的网络输 入/输出模块,所述分发服务模块通过所述网络输入/输出模块从所述网络接口的输入端 口上接收数据包,通过所述网络输入/输出模块从所述网络接口的输出端口上向外部发送 数据包。
[0069] 所述装置还包括设置在用户空间的内存管理模块,如图2和图3所示,所述内存管 理模块包括用于存储数据包的内存空间,与所述Μ个协议栈对应的Μ个输入队列,用于存储 需要所述Μ个协议栈处理的数据包的指针,与所述网络接口上的η个输出端口对应的η个 输出队列,用于存储需要向外部发送的数据包的指针,所述指针指向所述数据包在所述内 存空间的地址,η为大于1的正整数。
[0070] 更具体的,所述的内存空间所述内存空间是经过内存映射后的存储空间,用户态 和内核态都可以访问。
[0071] 可选的,所述内存管理模块还可以包括i个进程间通信队列,i为大于0的正整数, 用于存储在进程之间传递的数据包的指针,避免系统资源损耗。
[0072] 所述网络输入/输出模块将从所述网络接口接收到的数据包存储在所述内存空 间,所述分发服务模块读取所述数据包的包头,根据所述包头确定需要对该数据包进行协 议处理的协议栈,并将所述数据包的指针插入与所述协议栈对应的输入队列,所述协议栈 根据该协议栈对应的输入队列中的指针在所述内存空间中读取数据包,并对所述数据包进 行协议处理。
[0073] 所述的协议栈对所述数据包进行协议处理后,根据数据包的目的地址等属性判断 该数据包是否需要提交给用户应用,如果处理后的所述数据包需要提交给用户应用,则将 所述数据包拷贝给所述用户应用;如果处理后的所述数据包需要向外部发送,则所述协议 栈将所述数据包的指针插入所述内存管理模块中的输出队列,所述分发服务模块根据所述 输出队列中的指针,通过所述网络输入/输出模块将所述指针对应的数据包从与所述输出 队列对应的网络接口上的输出端口发送,所述的数据包的指针指向所述数据包在所述内存 空间的地址。
[0074] 在本实施例中,所述Μ个协议栈中遵循的协议处理规则,可以根据系统默认配置, 也可以通过如图4所示的实施例中另外设置的协议配置模块进行配置,协议配置模块可对 系统相关参数进行配置。包括协议栈运行参数配置、CPU逻辑核资源分配、数据分发策略配 置等内容。
[0075] 在一种可能的实施方式中,如图4所示,还可以在用户空间设置通用协议处理模 块,用于对需要通用协议处理的数据包进行通用协议处理,所述分发服务模块根据接收 到的数据包的所述包头确定需要对该数据包需要进行通用协议处理时,并将所述数据包 的指针发送给所述通用协议处理模块对所述指针对应的数据包进行通用协议处理。例 如 ARP(Address Resolution Protocol,地址解析协议)或者 ICMP (Internet Control Message Protocol, Internet控制报文协议)等处理较为简单的协议,可以通过通用协议处 理模块进行协议处理。
[0076] 该通用协议处理模块实现较为简单的、通用的协议处理过程,在整个系统中可有 一个通用协议处理模块,并可根据系统的负载,将特定的协议从所述协议栈中卸载至通用 协议处理模块,或将本模块处理的特定协议卸载到协议栈模块进行处理。通用协议处理模 块也位于操作系统的用户空间。
[0077] 通过上述实施例,在操作系统用户空间设置并且分别运行处理器不同逻辑核的Μ 个协议栈对至少一个分发服务模块从外部接收到的数据包,根据预配置规则,各自独立地 对待处理数据包进行协议处理、可以在提高协议处理效率,并且应用在用户空间,可以方便 开发人员开发应用,并且,本发明实施例中的几乎全部数据处理过程都集中在用户态操作, 内核态只需要通过内存映射,将数据通过内存映射透传到用户态,从而避免资源消耗。
[0078] 如图5所示,在本发明实施例提供的数据处理装置的一种实施例中,本发明技术 实现的具体实施例中,在用户空间只包含一个分发处理模块,所述分发处理模块可以运行 于多核操作系统中处理器的任何一个逻辑核,
[0079] 分发服务模块采用轮询(poll)方式从多个网络接口的不同输入端口抓取数据包, 并通过网络输入/输出(I/o)模块采用内存映射的方式将接收到的数据包直接存储在内存 管理模块的内存空间中,并通过内存映射的方式将该区域内存映射至用户空间。
[0080] 网络输入/输出模块将接收到的数据包存储在内存空间后,分发服务模块到内存 空间读取这些数据包,并根据数据包的包头等属性,确定该些数据包需要哪个协议栈处理, 之后,根据分发策略,将数据包指针插入该协议栈对应的输入队列。每个用户态协议栈对应 一个输入队列,分发至该协议栈的数据包指针均插入该接收队列。协议栈根据该输入队列 中的指针在内存空间读取数据包,并进行协议处理。
[0081] 在进行协议处理之后,如果协议处理后的数据包需要用户应用处理,则协议栈将 处理后的数据包拷贝给对应的用户应用,反之则根据需要将数据包丢弃,或者将数据包存 储到内存空间。
[0082] 如果协议处理后的数据包需要向外部发送,则协议栈根据数据包的目的地址等属 性,将数据包的指针插入到内存管理模块中的输出队列中,输出队列与网络接口上的输出 端口具有配置的对应关系。之后,由于分发服务模块与网络接口上的输出端口具有配置好 的对应关系,因此分发服务模块,在输出队列中取出与对应的输出端口相应的指针,并读取 指针对应的数据包,通过网络输入/输出模块会将该输出队列中指针对应的数据发送给相 应的网络接口上的输出端口。
[0083] 通过上述实施例,通过上述实施例,在操作系统用户空间设置并且分别运行处理 器不同逻辑核的Μ个协议栈对一个分发服务模块从外部接收到的数据包,根据配置好的协 议处理规则,各自独立地对待处理数据包进行协议处理、可以在提高协议处理效率,并且应 用在用户空间,可以方便开发人员开发应用,并且,本发明实施例中的几乎全部数据处理过 程都集中在用户态操作,内核态只需要通过内存映射,将数据通过内存映射透传到用户态, 从而避免资源消耗。
[0084] 图6为本发明实施例提供的另外一种数据处理装置的结构图,与图5所示的实施 例的区别在于,在用户空间包含Μ个分发服务模块,每个分发服务模块分别与一个协议栈 对应。
[0085] 在一种可能的是实施方式中,每个分发服务模块对应一个网络接口,只负责该网 络接口的数据收发。
[0086] 在另一种实施方式中,如果网络接口具有RSS功能,也就是说,具有RSS功能的网 络接口可将从网络接口收到的数据包,根据其包头内容,将其分发至不同的硬件队列。则在 该种模式下,一个分发服务模块可对应一个或多个接口卡上的一个或多个硬件队列,从这 些硬件队列上收取数据包,并进行分发。类似的,发送数据包的过程也具有相似的过程。与 网络接口硬件RSS功能配合使用的多分发服务模块配置方式示意图,如图6所示。
[0087] 在系统配置多分发服务模块的情况下,分发服务模块从一个或多个队列抓取数据 包。分发服务模块采用轮询模式,通过网络输入/输出模块依次从多个网络接口的多接收 队列抓取数据包,将抓取的数据包存储在内存管理模块的内存空间中。分发服务模块根据 抓取的数据包,根据其数据包头或数据包其他部分的值,将数据包的指针发送至特定协议 栈对应的输入队列。
[0088] 分发服务模块识别特定的通用协议,如ARP、ICMP等,可将此类数据包发送至通用 协议处理模块处理。当然,可根据配置的不同,也可将ARP等协议放在协议栈模块进行处 理。
[0089] 通过上述实施例,在操作系统用户空间设置并且分别运行处理器不同逻辑核的Μ 个协议栈对与Μ个协议栈一一对应的分发服务模块从外部接收到的数据包,根据预配置规 贝1J,各自独立地对待处理数据包进行协议处理、可以在提高协议处理效率,并且应用在用户 空间,可以方便开发人员开发应用,并且,本发明实施例中的几乎全部数据处理过程都集中 在用户态操作,内核态只需要通过内存映射,将数据通过内存映射透传到用户态,从而避免 资源消耗。
[0090] 相应的,如图7所示,本发明实施例还提供了一种数据处理方法,应用于操作系统 的用户空间,所述方法包括:
[0091] 701,从网络接口的输入端口接收数据包;
[0092] 具体的,分发服务模块采用轮询的方式向网络接口的硬件输入端口抓取数据包, 每个分发服务模块之间抓取数据包彼此独立并行。
[0093] 702,将接收到的所述数据包存储到内存管理模块的内存空间;
[0094] 具体的,所述内存空间是经过内存映射后的存储空间,所述内存空间用户态和内 核态都可以访问;网络输入/输出模块通过内存映射的方式将接收到的数据包存储到内存 管理模块的内存空间,每个数据包具有不同的地址。
[0095] 703,根据所述数据包的属性,确定需要对所述数据包进行协议处理的第一协议 栈;
[0096] 具体的,如果只有一个分发服务模块,则该分发服务模块需要将读取每个接收到 的数据包的包头,并根据包头中携带的属性,确定该数据包需要哪个协议栈处理,所述第一 协议栈为Μ个协议栈中的一个,所述Μ个协议栈和所述分发服务模块设置在操作系统的用 户空间,Μ为大于1的正整数;
[0097] 如果系统存在多个分发服务模块,并且所述分发服务模块分别与一个网络接口对 应,则一个分发服务模块只读取其对应的网络接口的输入端口上接收到的数据包,并根据 该数据包的包头中的信息判断该数据包需要哪个协议栈处理。
[0098] 704,将所述数据包的指针插入与所述第一协议栈对应的输入队列,所述数据包的 指针指向所述数据包在所述内存空间中的地址,以便于所述第一协议栈根据所述输入队列 中的所述指针,从所述内存空间中取出所述指针对应的数据包,根据协议处理规则对所述 数据包进行协议处理。
[0099] 具体的,在分发服务模块为接收到的数据包确定完需要哪个协议栈进行协议处理 后,将指向该数据包在所述内存空间中的地址的指针插入到该协议栈对应的输入队列。
[0100] 所述第一协议栈,根据所述输入队列中的所述指针,从所述内存空间中取出所述 指针对应的数据包,根据协议处理规则对所述数据包进行协议处理。
[0101] 更具体的,每个协议栈只关注自身对应的输入队列中的指针,在输入队列中取出 指针,并根据指针到内存空间中获取数据包,进行协议处理。
[0102] 所述第一协议栈在对所述数据包协议处理后,如果所述协议处理后的数据包需要 用户应用程序处理,则所述第一协议栈将所述协议处理后的数据包拷贝给所述用户应用程 序。
[0103] 如果不需要应用程序处理,根据所述数据包的种类,需要保存的数据包,继续存储 在内存空间,不需要保存的数据包,被协议栈丢弃。
[0104] 如果所述协议处理后的所述数据包需要向外部发送,则所述协议栈将所述数据包 的指针插入所述内存管理模块的输出队列,以便于所述分发服务模块根据所述输出队列中 的指针,将与所述指针对应的数据包从与所述输出队列对应的网络接口输出端口发送。
[0105] 通过上述实施例,在操作系统用户空间设置并且分别运行处理器不同逻辑核的Μ 个协议栈对至少一个分发服务模块从外部接收到的数据包,根据预配置规则,各自独立地 对待处理数据包进行协议处理、可以在提高协议处理效率。
[0106] 相应的,如图8所示,本发明实施例还提供了一种数据处理方法,所述的方法包 括:
[0107] 801.第一协议栈将协议处理后的数据包存储到内存空间,并根据所述数据包的属 性将所述数据包的指针插入输出队列,以便于分发服务模块从所述输出队列读取所述指针 对应的所述数据包,通过与所述输出队列对应的所述网络接口上的输出端口将所述指针对 应的数据包向外部发送;
[0108] 所述第一协议栈为位于用户空间的Μ个协议栈中的一个,所述Μ个协议栈分别运 行在处理器一个逻辑核,所述Μ个协议栈和所述分发服务模块设置在操作系统的用户空 间;所述输出队列与网络接口上的输出端口对应,所述数据包的指针指向所述数据包在所 述内存空间中的地址,所述内存空间是经过内存映射后的存储空间,所述内存空间用户态 和内核态都可以访问,Μ为大于1的正整数。
[0109] 具体而言,被协议栈处理后的数据包,在不需要被用户应用处理时,直接被存储在 内存空间,如果该数据包,需要向外部发送,则所述的第一协议栈还需要将该数据包的指针 根据数据包的目的地址等属性,插入到相应的输出端口对应的输出队列。
[0110] 分发服务模块根据数据包的指针,在内存空间中读取数据包。如果系统中存在多 个分发服务模块,每个分发服务模块与网络接口上的网络输出端口具有配置好的对应关 系,则每个分发服务模块只需要读取与其对应的输出队列中的指针对应的数据包。
[0111] 分发服务模块通过所述网络接口上的输出端口将所述指针对应的数据包向外部 发送;在确定该数据包需要在哪个网络接口的输出端口输出之后,通过网络输入/输出模 块将所述内存空间中与所述指针对应的数据包发送到所述网络接口上的所述输出端口,所 述输出端口与所述输出队列对应。
[0112] 通过上述实施例,在操作系统用户空间设置并且分别运行处理器不同逻辑核的Μ 个协议栈对至少一个分发服务模块从外部接收到的数据包,根据预配置规则,各自独立地 对待处理数据包进行协议处理、可以在提高协议处理效率。并且,在需要发送数据包时,用 户态的各功能实体之间只需要传递指向数据包的指针,而无需数据包拷贝,从而降低了资 源消耗。
[0113] 相应的,如图9所示,本发明实施例还提供了一种计算机主机,所述计算机主机包 括硬件层、运行在硬件层之上的操作系统层,所述硬件层包括至少一个网络接口和至少一 个处理器,所述处理器包括至少Μ个逻辑核,Μ为大于1的正整数,所述操作系统分为内核 空间和用户空间,在所述用户空间设置有:
[0114] Μ个协议栈,分别运行于处理器的Μ个逻辑核,所述Μ个协议栈用于根据协议处理 规则,各自独立地对待处理数据包进行协议处理;
[0115] 所述分发服务模块,用于根据预配置规则,从至少一个网络接口上的至少一个输 入端口接收输入的数据包,并将所述数据包存储至内存空间,以便于所述Μ个协议栈中的 一个协议栈对所述数据包进行协议处理;以及接收所述Μ个协议栈处理后的数据包,并将 所述数据包通过所述网络接口上的输出端口向外部发送,所述内存空间是经过内存映射后 的存储空间,所述内存空间用户态和内核态都可以访问。
[0116] 在一种可选的是实施例中,在所述用户空间还设置有:
[0117] 内存管理模块,包括用于存储数据包的所述内存空间,与所述Μ个协议栈对应的Μ 个输入队列,以及与所述网络接口上的所述输出端口对应的输出队列;所述Μ个输入队列 用于存储需要所述Μ个协议栈处理的数据包的指针,所述输出队列用于存储需要向外部发 送的数据包的指针,所述指针指向所述数据包在所述内存空间的地址,所述内存空间是经 过内存映射后的存储空间,所述存储空间用户态和内核态都可以访问;
[0118] 所述分发服务模块具体用于:将从所述网络接口上的所述输入端口接收到的数据 包存储在所述内存空间;读取所述数据包的包头,根据所述包头确定需要对该数据包进行 协议处理的协议栈,并将所述数据包的指针插入与所述协议栈对应的所述输入队列;
[0119] 所述协议栈具体用于:
[0120] 根据该协议栈对应的所述输入队列中的指针在所述内存空间中读取数据包,并对 所述数据包进行协议处理。
[0121] 若经过所述协议处理后的数据包需要提交给用户应用,则将所述数据包拷贝给所 述用户应用;
[0122] 若经过所述协议处理后的数据包需要向外部发送,则所述协议栈将所述数据包的 指针插入所述内存管理模块的输出队列;
[0123] 所述分发服务模块具体用于:根据所述输出队列中的指针,将与所述指针对应的 数据包从与所述输出队列对应的网络接口上的输出端口发送。
[0124] 在一种可选的是实施例中,所述分发服务模块数目为Μ个,分别与所述Μ个协议栈 对应,所述Μ个分发服务模块分别运行在处理器的Μ个逻辑核。
[0125] 需说明的是,本发明实施例采用递进描述,各个实施例的相同或相似的部分可以 相互借鉴。
[0126] 通过上述实施例提供的计算机主机,可以实现在多核的环境下,利用多核系统并 行处理的特性,在操作系统用户空间实现多进程并行协议处理的功能,并减少数据包拷贝 造成的资源消耗。
[0127] 专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的 单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬 件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。 这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。 专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现 不应认为超出本发明的范围。
[0128] 结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的 软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器 (ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或【技术领域】 内所公知的任意其它形式的存储介质中。
[0129] 以上所述的【具体实施方式】,对本发明的目的、技术方案和有益效果进行了进一步 详细说明,所应理解的是,以上所述仅为本发明的【具体实施方式】而已,并不用于限定本发明 的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含 在本发明的保护范围之内。
【权利要求】
1. 一种数据处理装置,其特征在于,包括Μ个协议栈和至少一个分发服务模块,所述Μ 个协议栈和至少一个分发服务模块设置在操作系统的用户空间,Μ为大于1的正整数,其 中, 所述Μ个协议栈,分别运行于处理器的不同逻辑核,所述Μ个协议栈用于根据协议处理 规则,各自独立地对待处理数据包进行协议处理; 所述分发服务模块,用于根据预配置规则,从至少一个网络接口上的至少一个输入端 口接收数据包,并将所述数据包存储至内存空间,以便于所述Μ个协议栈中的一个协议栈 对所述数据包进行协议处理;以及接收所述Μ个协议栈处理后的数据包,并将所述数据包 通过所述网络接口上的输出端口向外部发送,其中,所述内存空间是经过内存映射后的存 储空间,所述内存空间用户态和内核态都可以访问。
2.如权利要求1所述的数据处理装置,其特征在于,还包括在所述操作系统的用户空 间设置的内存管理模块; 所述内存管理模块,包括用于存储数据包的所述内存空间,与所述Μ个协议栈对应的Μ 个输入队列,以及与所述网络接口上的所述输出端口对应的输出队列;所述Μ个输入队列 用于存储需要所述Μ个协议栈处理的数据包的指针,所述输出队列用于存储需要向外部发 送的数据包的指针,所述指针指向所述数据包在所述内存空间的地址; 所述分发服务模块具体用于:从所述网络接口上的所述输入端口接收到的数据包存储 在所述内存空间;读取所述数据包的包头,根据所述包头确定需要对该数据包进行协议处 理的协议栈,并将所述数据包的指针插入与所述确定的所述协议栈对应的所述输入队列; 所述协议栈具体用于: 根据该协议栈对应的所述输入队列中的指针在所述内存空间中读取数据包,并对所述 数据包进行协议处理; 若经过所述协议处理后的数据包需要提交给用户应用,则将所述数据包拷贝给所述用 户应用; 若经过所述协议处理后的数据包需要向外部发送,则所述协议栈将所述数据包的指针 插入所述内存管理模块的输出队列; 所述分发服务模块具体用于:根据所述输出队列中的指针,将与所述指针对应的数据 包从与所述输出队列对应的网络接口上的输出端口发送。
3.如权利要求1或2任一项所述的数据处理装置,其特征在于,所述分发服务模块数目 为Μ个,分别与所述Μ个协议栈对应,所述Μ个分发服务模块分别运行在处理器不同的逻辑 核。
4.如权利要求1至3任一项所述的数据处理装置,其特征在于,还包括: 协议配置模块,用于对所述协议栈进行协议处理规则的配置。
5.如权利要求1至4任一项所述的数据处理装置,其特征在于,还包括: 通用协议处理模块,用于对需要通用协议处理的数据包进行通用协议处理; 所述分发服务模块还用于:根据接收到的数据包的所述包头确定需要对该数据包需要 进行通用协议处理时,将所述数据包的指针发送给所述通用协议处理模块,以便于所述通 用协议处理模块对所述指针对应的数据包进行通用协议处理。
6.如权利要求1至5任一项所述的数据处理装置,其特征在于,还包括设置在所述操作 系统的内核空间的网络输入/输出模块; 所述分发服务模块具体用于:通过所述网络输入/输出模块从所述网络接口的输入端 口上接收数据包,通过所述网络输入/输出模块从所述网络接口的输出端口上向外部发送 数据包。
7.如权利要求6所述的数据处理装置,其特征在于,所述分发服务模块采用轮询的方 式通过所述网络输入/输出模块从所述网络接口的不同输入端口接收数据包。
8. 一种数据处理方法,其特征在于,应用于操作系统的用户空间,所述方法包括: 从网络接口的输入端口接收数据包; 将接收到的所述数据包存储到内存空间,所述内存空间是经过内存映射后的存储空 间,所述内存空间用户态和内核态都可以访问; 根据所述数据包的属性,确定需要对所述数据包进行协议处理的第一协议栈,所述第 一协议栈为Μ个协议栈中的一个,所述Μ个协议栈设置在操作系统的用户空间,Μ为大于1 的正整数; 将所述数据包的指针插入与所述第一协议栈对应的输入队列,所述数据包的指针指向 所述数据包在所述内存空间中的地址,以便于所述第一协议栈根据所述输入队列中的所述 指针,从所述内存空间中取出所述指针对应的数据包,根据协议处理规则对所述数据包进 行协议处理。
9.如权利要求8所述的数据处理方法,其特征在于,如果所述协议处理后的数据包需 要用户应用程序处理,则所述第一协议栈将所述协议处理后的数据包拷贝给所述用户应用 程序;如果所述协议处理后的所述数据包需要向外部发送,则所述第一协议栈将所述数据 包的指针插入输出队列; 所述方法还包括: 若所述第一协议栈将所述数据包的指针插入输出队列,则根据所述输出队列中的指 针,将与所述指针对应的数据包从与所述输出队列对应的网络接口的输出端口发送。
10. 一种数据处理方法,其特征在于,所述方法包括: 第一协议栈将协议处理后的数据包存储到内存空间,并根据所述数据包的属性将所述 数据包的指针插入输出队列,以便于分发服务模块从所述输出队列读取所述指针对应的所 述数据包,通过与所述输出队列对应的所述网络接口上的输出端口将所述指针对应的数据 包向外部发送; 所述第一协议栈为位于用户空间的Μ个协议栈中的一个,所述Μ个协议栈分别运行在 处理器一个逻辑核,所述Μ个协议栈和所述分发服务模块设置在操作系统的用户空间;所 述输出队列与网络接口上的输出端口对应,所述数据包的指针指向所述数据包在所述内存 空间中的地址,所述内存空间是经过内存映射后的存储空间,所述内存空间用户态和内核 态都可以访问,Μ为大于1的正整数。
11.如权利要求10所述的数据处理方法,其特征在于,通过与所述输出队列对应的所 述网络接口上的输出端口将所述指针对应的数据包向外部发送,具体包括: 通过网络输入/输出模块将所述内存空间中与所述指针对应的数据包发送到与所述 输出队列对应的所述网络接口上的输出端口 ; 所述网络输入/输出模块设置在所述操作系统的内核空间。
12. -种计算机,其特征在于,包括硬件层、运行在硬件层之上的操作系统层,所述硬件 层包括至少一个网络接口和至少一个处理器,所述处理器包括至少Μ个逻辑核,Μ为大于1 的正整数,所述操作系统分为内核空间和用户空间,在所述用户空间设置有: Μ个协议栈,分别运行于处理器的Μ个逻辑核,所述Μ个协议栈用于根据协议处理规则, 各自独立地对待处理数据包进行协议处理; 分发服务模块,用于根据预配置规则,从至少一个网络接口上的至少一个输入端口接 收数据包,并将所述数据包存储至内存空间,以便于所述Μ个协议栈中的一个协议栈对所 述数据包进行协议处理;以及接收所述Μ个协议栈处理后的数据包,并将所述数据包通过 所述网络接口上的输出端口向外部发送,所述内存空间是经过内存映射后的存储空间,所 述内存空间用户态和内核态都可以访问。
13.如权利要求12所述的计算机,其特征在于,在所述用户空间还设置有内存管理模 块: 所述内存管理模块,包括用于存储数据包的所述内存空间,与所述Μ个协议栈对应的Μ 个输入队列,以及与所述网络接口上的所述输出端口对应的输出队列;所述Μ个输入队列 用于存储需要所述Μ个协议栈处理的数据包的指针,所述输出队列用于存储需要向外部发 送的数据包的指针,所述指针指向所述数据包在所述内存空间的地址; 所述分发服务模块具体用于:将从所述网络接口上的所述输入端口接收到的数据包存 储在所述内存空间;读取所述数据包的包头,根据所述包头确定需要对该数据包进行协议 处理的协议栈,并将所述数据包的指针插入与所述协议栈对应的所述输入队列; 所述协议栈具体用于: 根据该协议栈对应的所述输入队列中的指针在所述内存空间中读取数据包,并对所述 数据包进行协议处理。 若经过所述协议处理后的数据包需要提交给用户应用,则将所述数据包拷贝给所述用 户应用; 若经过所述协议处理后的数据包需要向外部发送,则所述协议栈将所述数据包的指针 插入所述内存管理模块的输出队列, 所述分发服务模块具体用于:根据所述输出队列中的指针,将与所述指针对应的数据 包从与所述输出队列对应的网络接口上的输出端口发送。
14.如权利要求12或13所述的计算机,其特征在于,所述分发服务模块数目为Μ个,分 别与所述Μ个协议栈对应,所述Μ个分发服务模块分别运行在处理器的Μ个逻辑核。
【文档编号】H04L29/06GK104142867SQ201310169222
【公开日】2014年11月12日 申请日期:2013年5月9日 优先权日:2013年5月9日
【发明者】古强, 文刘飞, 施广宇 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1