CN110022330B - 用于网络数据包的处理方法、装置及电子设备 - Google Patents
用于网络数据包的处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN110022330B CN110022330B CN201810017420.9A CN201810017420A CN110022330B CN 110022330 B CN110022330 B CN 110022330B CN 201810017420 A CN201810017420 A CN 201810017420A CN 110022330 B CN110022330 B CN 110022330B
- Authority
- CN
- China
- Prior art keywords
- network
- thread
- data packet
- server
- network card
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种用于网络数据包的处理方法,包括:根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;将接收到的网络数据包与所述流量分配算法进行匹配;根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列,从而解决网络数据包的发送工作线程和接收工作线程不一致而导致的用户态处理网络数据包的性能降低的问题。
Description
技术领域
本申请涉及网络数据处理领域,具体涉及一种用于网络数据包的处理方法及装置。本申请同时涉及一种用于客户端网络数据包的处理方法及装置。本申请同时涉及一种用于服务端网络数据包的处理方法及装置。本申请同时涉及一种用于网络数据包的处理系统以及一种用于实现所述用于网络数据包的处理方法的电子设备。
背景技术
在信息技术和分布式系统高速发展的时代,无论是硬件,如CPU、网卡等,还是软件层面,都在并行运算上不断革新。CPU性能的扩展通过多核的方式进行演进,使得通用处理器可以并行地处理网络负载,为了充分发挥多核处理器的优势,应用程序的进程、线程也随之扩展。以太网接口技术从曾经的千兆网、万兆网到现在的25G、100G超高速技术,网卡的收发包性能日益提高。硬件的发展,推动着软件的大幅度创新。在云计算领域,分布式系统的低延迟、高吞吐量性能,频繁受限于内核驱动、内核协议栈、内核调度等模块,因而多核环境中开发用户态网络库是提高系统性能及并行计算能力有效手段。相比于传统的内核网络模块,由Intel公司开发的基于多核处理器的高性能数据包处理平台 DPDK(Data PlaneDevelopment Kit,或数据面开发套件),在用户态完成对网络数据包的收发、处理,可避免如下问题:高并发流量时会造成调度模块繁忙,如CPU由于频繁处理软中断导致机器负载升高;大量的系统调用带来额外开销;线程切换的开销;应用程序和内核协议栈之间存在数据拷贝等。
将DPDK技术引入到工业应用中,在分布式存储系统中构建高性能系统,仍然存在如下问题:网络数据包的发送和接收线程存在不一致,从而降低了用户态处理网络数据包的性能。
发明内容
本申请提供一种用于网络数据包的处理方法,以解决网络数据包的发送和接收工作线程不一致而导致的用户态处理网络数据包的性能降低的问题。
本申请还提供一种用于客户端网络数据包的处理方法。
本申请还提供一种用于服务端网络数据包的处理方法。
本申请还提供一种用于网络数据包的处理装置。
本申请还提供一种用于客户端网络数据包的处理装置。
本申请还提供一种用于服务端网络数据包的处理装置。
本申请还提供一种用于网络数据包的处理系统。
本申请还提供一种实现所述用于网络数据包的处理方法的电子设备。
本申请提供一种用于网络数据包的处理方法,包括:
根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;
将接收到的网络数据包与所述流量分配算法进行匹配;
根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列。
可选的,所述网卡队列,为绑定了工作线程的网卡队列;其中,所述工作线程,为与CPU物理核进行预先绑定的网络数据包处理线程。
可选的,所述根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列,此步骤之后,还包括下述处理:
通过该网卡队列预先绑定的工作线程从所述网卡队列读取网络数据包进行线程内处理;其中,所述网卡队列预先绑定的工作线程,与构造发送网络数据包的工作线程为同一线程。
可选的,所述工作线程,是基于DPDK的工作线程。
可选的,所述流量分配算法,至少包括:工作线程使用的端口和/或端口范围。
可选的,所述流量分配算法,还包含被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围。
可选的,所述工作线程作为服务端时,所述流量规则,还包括根据接收的网络数据包的源端口与所述工作线程数确定接收流量所匹配的网卡队列。
可选的,所述网卡,其数量为一个或多个;其中,网卡数量为多个时,与同一工作线程绑定的不同网卡的队列配置相同的流量规则。
可选的,所述工作线程作为客户端时,所述根据预先确定的流量分配算法构造发送网络数据包,包括:根据应用层的请求数和工作线程数确定目标线程,通过所述目标线程与服务端建立链接;从所述目标线程对应的端口和/或端口范围中,选择一个端口,作为所述客户端的本端端口,组装要发送的网络数据包;其中,通过下述操作确定所述目标线程:
使用全局值表示发送的全局请求数;
用所述全局值对工作线程数取模,将结果值对应的线程号作为目标线程。
可选的,还包括每次发送完成后,所述全局请求数递增一。
可选的,所述选择一个端口,包括依次选择未使用的端口。
可选的,所述工作线程作为服务端时,所述根据预先确定的流量分配算法构造发送网络数据包,包括:使用监听端口,作为所述服务端的本端端口,组装要发送的网络数据包。
可选的,所述选择网卡队列发送该网络数据包,包括在组装要发送的网络数据包的步骤之后进行下述处理:
通过轮询选择网卡,进行发送;或者根据组包后的五元组进行哈希计算,根据哈希结果选择网卡,进行发送。
可选的,所述根据哈希结果选择网卡,包括按照下述方式选择网卡:
若网卡数量为2,哈希结果若为偶数,选择第1个网卡,哈希结果若为奇数选择第2个网卡。
可选的,所述网卡,其数量为两个。
可选的,所述工作线程作为客户端时,还包括下述处理:
在与该工作线程对应的应用层和服务端建立业务链接之前,与服务端建立网络链接,请求查询服务端工作线程数;
获得服务端工作线程数,上报到所述应用层;
使用所述应用层指定的服务端线程,在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;其中,所述满足条件的端口,是该端口号对服务端线程数取余等于所述指定的服务端线程的线程号。
本申请还提供一种用于客户端网络数据包的处理方法,包括:
与服务端建立网络链接,请求查询服务端工作线程数;
将获得的服务端工作线程数上报到对应的应用层;
使用所述应用层指定的服务端线程,重新与服务端建立网络链接。
可选的,所述使用所述应用层指定的服务端线程,重新与服务端建立新网络链接,包括:
在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;
其中,所述满足条件的端口,是该端口号对服务端线程数取余等于所述指定的服务端线程的线程号。
本申请还提供一种用于服务端网络数据包的处理方法,包括:
接收客户端查询服务端工作线程数的请求,将自身的工作线程数作为响应返回给该客户端;
根据预先配置的流量分配算法,将接收的网络数据包转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;
判断接收的网络数据包是否客户端发送的重新建立网络链接请求;若是,使用该工作线程与该请求的源端口建立新网络链接。
可选的,所述流量分配算法,配置在网卡队列上,其算法包括:
根据接收的网络数据包的源端口号对所述工作线程数取余;
其取余结果作为网卡接收队列索引。
可选的,所述工作线程,绑定到CPU物理核。
本申请还提供一种用于网络数据包的处理装置,包括:
发送单元,用于根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;
匹配单元,用于将接收到的网络数据包与所述流量分配算法进行匹配;
接收单元,用于根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列;所述网卡队列,是与发送网卡队列在相同或不同的网卡上的网卡队列。
本申请还提供一种用于客户端网络数据包的处理装置,包括:
线程数查询单元,用于与服务端建立网络链接,请求查询服务端工作线程数;
线程数上报单元,用于将获得的服务端工作线程数上报到对应的应用层;
指定线程建链单元,用于使用所述应用层指定的服务端线程,重新与服务端建立网络链接。
本申请还提供一种用于服务端网络数据包的处理装置,包括:
线程数查询处理单元,用于接收客户端查询服务端工作线程数的请求,将自身的工作线程数作为响应返回给该客户端;
数据包匹配单元,用于根据预先配置的流量分配算法,将接收的网络数据包转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;
建链单元,用于判断接收的网络数据包是否客户端发送的重新建立网络链接请求;若是,使用该工作线程与该请求的源端口建立新网络链接。
本申请还提供一种用于网络数据包的处理系统,包括:用于客户端网络数据包的处理装置,以及用于服务端网络数据包的处理装置。
本申请还提供一种电子设备,包括:
存储器,以及处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;
将接收到的网络数据包与所述流量分配算法进行匹配;
根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列;所述网卡队列,是与发送网卡队列在相同或不同的网卡上的网卡队列。
与现有技术相比,本申请具有以下优点:
本申请提供的用于网络数据包的处理方法、装置及电子设备,通过根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;将接收到的网络数据包与所述流量分配算法进行匹配;根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列,工作线程绑定CPU物理核,网卡队列绑定工作线程,网卡队列上配置的流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围,使得网络数据包的接收和发送双向流量工作线程保持一致,从而解决接收和发送线程不一致导致的用户态处理网络数据包的性能降低的问题。
附图说明
图1是本申请其一实施例提供的一种用于网络数据包的处理方法的处理流程图;
图2是本申请其一实施例提供的一种用于网络数据包的处理方法客户端处理流程图;
图3是本申请其一实施例提供的一种用于网络数据包的处理方法服务端处理流程图;
图4是本申请实施例提供的一种用于客户端网络数据包的处理方法的处理流程图;
图5是本申请实施例提供的一种用于客户端网络数据包的处理方法的实际部署中客户端指定对端线程号的流程图;
图6是本申请实施例提供的一种用于服务端网络数据包的处理方法的处理流程图;
图7是本申请实施例提供的一种用于网络数据包的处理装置示意图;
图8是本申请实施例提供的一种用于客户端网络数据包的处理装置示意图;
图9是本申请实施例提供的一种用于服务端网络数据包的处理装置示意图;
图10是本申请实施例提供的一种电子设备的示意图;
图11是本申请实施例提供的一种用于网络数据包的处理系统的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请提供一种用于网络数据包的处理方法。本申请还提供一种用于客户端网络数据包的处理方法。本申请还提供一种用于服务端网络数据包的处理方法。本申请还提供一种用于网络数据包的处理装置。本申请还提供一种用于客户端网络数据包的处理装置。本申请还提供一种用于服务端网络数据包的处理装置。本申请还提供一种用于网络数据包的处理系统。本申请还提供一种实现所述用于网络数据包的处理方法的电子设备。在下面的实施例中逐一进行详细说明。
本申请其一实施例提供一种用于网络数据包的处理方法。
以下结合图1至图3对本申请其一实施例提供的一种用于网络数据包的处理方法的实施例进行说明。其中图1是本申请其一实施例提供的一种用于网络数据包的处理方法的处理流程图;图2是本申请其一实施例提供的一种用于网络数据包的处理方法客户端处理流程图;图3是本申请其一实施例提供的一种用于网络数据包的处理方法服务端处理流程图。
图1所示的用于网络数据包的处理方法,包括:
步骤S101,根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;
步骤S102,将接收到的网络数据包与所述流量分配算法进行匹配;
步骤S103,根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列。
随着多核技术在分布式系统中的广泛应用,系统的并行计算能力日益提高。多核环境中,高性能的用户态网络库能大大提高数据包处理性能,给分布式系统提供低延迟、高吞吐量的系统性能,减少内核驱动、内核协议栈、内核调度等模块导致的性能影响,例如,由Intel公司开发的基于多核处理器的数据包处理平台DPDK(Data Plane Development Kit,或数据面开发套件),就是在用户态完成对网络数据包的收发及处理,能够避免如下问题:高并发流量时会造成调度模块繁忙,如CPU由于频繁处理软中断导致机器负载升高;大量的系统调用会带来额外开销;应用程序和内核协议栈之间的数据拷贝等。但是将DPDK 或其相似技术进行工业应用,构建高性能、负载均衡的网络模型以解决高性能系统的性能瓶颈问题,还需要考虑如下各方面:线程在不同CPU核间调度时的缓存丢失问题、多线程在同一CPU核上并发工作时形成的相互争抢、多线程上负载分配不均衡、多网卡上流量分配不均衡。基于上述分析,本申请提出的用于网络数据包的处理方法,通过将工作线程分别绑定CPU物理核以及合适的流量分配算法,保证每个工作线程正确处理每个网络数据流的数据包的发送和接收,不需要额外线程切换开销,实现了数据包在同一个线程内的收发和处理。
下面以基于DPDK和Mellanox 25G双网卡的环境为例,对本申请实施例提供的所述用于网络数据包的处理方法进行说明。
所述步骤S101,根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包。
本步骤的目的是,通过预先确定的流量分配算法以及网卡队列的选择,使得每个工作线程的不同链接以及发送流量均衡打散到物理网卡上。
所述网卡队列,为绑定了工作线程的网卡队列;其中,所述工作线程,为与CPU物理核进行预先绑定的网络数据包处理线程。具体的,所述工作线程,是基于DPDK的工作线程。
本申请实施例中,将工作线程分别绑定CPU物理核,具体采用工作线程与 CPU物理核一对一绑定,从而避免线程在不同CPU之间调度时带来的开销以及线程在不同CPU核间调度时的缓存丢失问题,同时避免不同线程争抢同一CPU 资源。
本申请实施例提供的用于网络数据包处理的方法,实施时所述网卡,其数量为一个或多个;其中,网卡数量为多个时,与同一工作线程绑定的不同网卡的队列配置相同的流量规则,其目的是将网络流量均衡打散在多网卡上。优选的,所述网卡,其数量为两个。具体的,将工作线程与双网卡的不同队列进行绑定,例如,工作线程1绑定网卡1的队列1和网卡2的队列1,实现一个工作线程服务两个网卡队列。
本申请实施例所提供的用于网络数据包的处理方法中,在实际应用中,所述工作线程既可以作为客户端,也可以作为服务端,在本步骤的处理上分别对其进行说明。
所述工作线程作为客户端时,所述根据预先确定的流量分配算法构造发送网络数据包,包括:根据应用层的请求数和工作线程数确定目标线程,通过所述目标线程与服务端建立链接;从所述目标线程对应的端口和/或端口范围中,选择一个端口,作为所述客户端的本端端口,组装要发送的网络数据包;其中,通过下述操作确定所述目标线程:
使用全局值表示发送的全局请求数;
用所述全局值对工作线程数取模或取余,将结果值对应的线程号作为目标线程。
其中,在每次发送完成后,所述全局请求数递增一;所述选择一个端口,包括依次选择未使用的端口。
本申请实施例中,在选择端口组装要发送的网络数据包的步骤之后选择网卡队列发送该网络数据包,通过哈希算法选择网卡,即:根据组包后的五元组进行哈希计算,根据哈希结果选择网卡,进行发送;其中,所述根据哈希结果选择网卡,包括按照下述方式选择网卡:若网卡数量为2,哈希结果若为偶数,选择第1个网卡,哈希结果若为奇数选择第2个网卡。此外,也可以通过轮询选择网卡,进行发送。
即,对于网络协议栈的TCP/IP协议的客户端来说,其作为网络流程里的发起者,通过应用层(即业务层)向服务端发起的建立网络连接的请求均衡分布在多个工作线程上;而每个工作线程根据预先确定的流量分配算法以及工作线程与不同网卡队列的绑定,将网络连接打散在两个或多个网卡上;其中,所述流量分配算法,至少包括:工作线程使用的端口和/或端口范围,例如,创建了 2个工作线程,线程1使用的本端端口是1000至1999,线程2使用的本端端口是2000至2999,应用层的第一个建链请求对工作线程数取模为1使用线程1,选择本端端口1000和服务端建链,第二个建链请求对工作线程数取模为0使用线程2,选择本端端口2000与服务端建链,以此类推,使得业务层的网络连接及发送流量均衡分布在各个网卡;并且由于网卡配置的流量规则中的IP五元组信息包含和发送时使用的流量分配算法一致的端口/端口范围,这样同一个IP流的接收网络流量是由与发送网络数据包使用相同的工作线程处理,因而接收流量也均衡分布在各网卡上,充分发挥了双网卡的并发能力,提高了系统的吞吐量;另外,每个工作线程分别与CPU物理核绑定,因此同时能够充分发挥多核并发优势,降低数据处理过程的缓存丢失,提高IOPS性能。所谓IOPS,是每秒处理的请求数。
所述工作线程作为服务端时,所述根据预先确定的流量分配算法构造发送网络数据包,包括:使用监听端口,作为所述服务端的本端端口,组装要发送的网络数据包。与客户端不同的是,服务端进程在TCP协议中,各工作线程会同时监控某一固定端口,如5000端口。客户端发起链接时,报文的目标端口为 5000,服务端进程收到该报文才能识别;同样服务端在构造给客户端的响应时,响应报文的源端口也是5000。
本申请实施例中,对于服务器端来说,整个网络连接过程与客户端类似,其工作线程也是分别与CPU物理核绑定,同时每个工作线程也与不同网卡的网卡队列绑定,但是其流量规则与客户端流量规则有差异,服务端的流量规则除了IP五元组信息,还要考虑服务端工作线程数,例如根据源端口将流量按包数均衡分配在工作线程所绑定的不同的网卡队列上,从而实现一个工作线程对两个或多个网卡的不同队列的收发,保证对应一个IP五元组的数据流双向的数据包能在进程内的一个线程上收发和处理,不需要线程切换;所述IP五元组,是 IP数据报文的特征信息,包括源IP、目的IP、源端口、目的端口、协议类型。这样,客户端一个工作线程上的多条链接在服务端进程内均衡分布到不同线程上。
所述步骤S102,将接收到的网络数据包与所述流量分配算法进行匹配。
本步骤的目的是,根据流量分配算法筛选接收到的网络数据包,以便于控制同一个流的接收与发送在同一个工作线程内进行处理,避免额外的线程切换。
本申请实施例中,根据步骤S101中的流量分配算法从接收到的网络数据包中筛选出与步骤S101中所发送的网络数据包所对应的网络数据包。具体的,所述流量分配算法,还包含被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围。
需要注意的是,当所述工作线程作为服务端时,所述流量规则,还包括根据接收的网络数据包的源端口与所述工作线程数确定接收流量所匹配的网卡队列。即,服务端的流量规则除了监听的端口外,还要考虑服务端工作线程数,例如,服务端一共创建4个工作线程监听端口5000,与工作线程1绑定的网卡队列1,其规则是目标端口5000,源端口对4取余或者取模等于0的数据包,与工作线程2绑定的网卡队列2,其规则是目标端口5000,源端口对4取余或者取模等于1的数据包,队列3和队列4的规则以此类推。这样服务端监听的 5000端口的数据包,通过均衡分布在服务端的4个网卡队列中,进一步均衡分配给与各网卡队列绑定的工作线程处理。
所述步骤S103,根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列。
所述网卡队列,是与发送网卡队列在相同或不同的网卡上的网卡队列。
本步骤的目的是,步骤S102筛选出的接收到的网络数据包入所匹配的网卡队列,进而由该网卡队列所绑定的工作线程处理。
本申请实施例中,在根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列之后,还进行下述处理:
通过该网卡队列预先绑定的工作线程从所述网卡队列读取网络数据包进行线程内处理;其中,所述网卡队列预先绑定的工作线程,与构造发送网络数据包的工作线程为同一线程。
另外,由于本申请实施例中组装发送的网络数据包所使用的工作线程的本端端口(或所在的端口范围)与网卡收包的流量规则的所包含的IP五元组的端口或端口范围一致,工作线程间的端口范围不重叠,因此同一个流的接收与发送由同一个工作线程处理,对于接收到的网络数据包,由对应的工作线程读取后上送到应用层处理,应用层构造的响应必然在同一个线程进行发送,可以访问到其发送时的缓存,不需要额外的线程切换。
优选的,建立网络连接时还可以由客户端指定服务端的线程,即通过绑定线程实现负载均衡。具体为,所述工作线程作为客户端时,还包括下述处理:
在与该工作线程对应的应用层和服务端建立业务链接之前,与服务端建立网络链接,请求查询服务端工作线程数;
获得服务端工作线程数,上报到所述应用层;
使用所述应用层指定的服务端线程,在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;其中,所述满足条件的端口,是该端口号对服务端线程数取余或取模等于所述指定的服务端线程的线程号。
本申请实施例中,客户端先与服务端建立一条链接,建连完成后,发送请求,查询服务端的工作线程数,服务端将自身的线程数作为响应返回给客户端。此后,客户端可重新与服务端建立新链接,在一个工作线程内根据应用层指定的服务端线程号,在可用本端端口范围内选择一个端口,使其满足对服务端线程数取余等于指定线程号。通过该本端端口发出去的包,在服务端网卡收到后,由于网卡规则是源端口号对服务端线程数取余的结果为接收队列索引,所以这个包会在服务端进程内被客户端指定线程读走。
图2示出了本申请实施例所包含的基于TCP/IP协议的客户端流程图,其实现包括下述处理:
1.客户端进程启动后,根据业务需要创建一定数量的工作线程,每个工作线程各绑定一个CPU核,即设置CPU亲缘性。这样同一个CPU上不存在多个工作线程争抢资源,线程在各自的CPU上运行,运行期间不切换CPU核,提高缓存命中率。
2.初始化每个线程内网络链接要使用的本端端口范围,线程间的端口范围各不一样,例如线程1使用的本端端口是1000-1999,线程2使用的是2000-2999。
3.初始化DPDK模块在运行期间需要的内存巨页。
4.初始化并启动两个网卡,将每个网卡上的一个网卡队列与一个工作线程绑定,并从巨页内存里创建内存池,为队列配置接收内存,这样工作线程可以通过两个网卡进行收发数据包。
5.配置网卡作为客户端时的接受包规则。每个网卡上存在一个规则哈希表,每个被使用的队列会在网卡哈希表里添加一条规则,当以太网数据包到达网卡时,与哈希表里的规则进行匹配,将符合规则的流量转发到与之配置的网卡队列缓存里。其中客户端的网卡规则与工作线程使用的端口一致,使用TCP/IP协议的五元组(包括源IP、源端口、目标IP、目标端口、协议类型),如与线程1 绑定的2个网卡队列上,规则是目标端口范围为1000-1999的TCP数据包。由于两个网卡连接的路由设备不一样,其他设备发过来的包可能两网卡中任一接收到,因而与同一线程绑定的两个网卡上的不同队列要配置一样的流量规则。
6.应用层需要发送请求时,维护一个全局值,该值表示发送的请求数,用该值对工作线程数取模,得到的结果作为目标线程,由该目标线程与对端建连网络链接和收发数据。发送后,全局请求数递增一。这样使得发送的链接均衡分布在所有工作线程上,避免线程繁忙程度不一,充分利用多核特性。
7.由选中的目标线程在其端口范围上选择一个合适的端口作为TCP链接的本端端口,例如依次选择未用的端口,完成TCP/IP协议栈的组包。
8.根据组包后的五元组进行哈希计算,哈希结果若为偶数,则选择第1个网卡进行发送,若为奇数,则选择第2个网卡进行发送。使用统一的哈希算法,可以保证同一个五元组每次计算结果一样,同时线程上基于可用范围内本端端口创建的链接,可均衡分布到两个网卡上。
9.工作线程开始轮询两个网卡上对应的队列,查询是否有数据包来到。网卡根据第5步配置的流量规则进行收包,如发往本端的目标端口在目标端口 1000-1999之间的TCP数据被放置在网卡队列1的接收内存上,而目标端口在 2000-2999之间的则被放置在网卡队列2上,待对应的工作线程读走。这样工作线程读到数据包后,必然在同一个线程进行发送的,可以访问到其发送时的缓存,不需要额外的线程切换,进而实现了数据包在同一个线程内的收发和处理。
10.客户端收到数据包后,一个请求的往返流程结束,重复以上步骤继续发送下一个数据包。
图3示出了本申请实施例所包含的基于TCP/IP协议的服务端流程图,其实现包括下述处理:
1.进程启动的初始化和网卡启动过程与客户端一致;
2.服务端各工作线程会同时监控某一固定端口,如5000端口。客户端发起建立链接时,其目标端口写为5000,服务端线程能识别该数据包。
3.服务端配置的网卡规则与其监听的端口和服务端工作线程数相关。例如若服务端一共创建4个工作线程,则与工作线程1绑定的网卡队列1,其规则是目标端口为5000,而源端口对4取余等于0的数据包;网卡队列2的规则是目标端口为5000,而源端口对4取余等于1的数据包,队列3和队列4的规则以此类推。这样客户端网卡队列1发出来的数据包,会被均衡分布在服务端的4个网卡队列上。同一个工作线程绑定的两个网卡上的队列配置的规则相同。
4.服务端工作线程收到TCP数据包后,在本线程内完成处理,发送响应并进行组包时,将回包的本端端口填为监听的端口,如5000,而目标端口填为接收包的源端口,这样保证客户端在收包时,被发送队列接收到,做到收发过程在同一队列完成。根据组包后的五元组进行哈希计算选择发送响应的网卡,哈希结果若为偶数,则选择第1个网卡进行发送,若为奇数,则选择第2个网卡进行发送。
以上述实施例为基础,本申请还提供一种用于客户端网络数据包的处理方法的实施例,由于该实施例以上述实施例为基础,因此对其进行简要说明,相关部分请参见上述实施例的对应说明即可。
以下结合图4至图5对其进行说明。其中,图4是本申请实施例提供的一种用于客户端网络数据包的处理方法的处理流程图;图5是本申请实施例实际部署中客户端指定对端线程号的流程图。
图4所示的用于客户端网络数据包的处理方法,包括:
步骤S401,与服务端建立网络链接,请求查询服务端工作线程数;
步骤S402,将获得的服务端工作线程数上报到对应的应用层;
步骤S403,使用所述应用层指定的服务端线程,重新与服务端建立网络链接。
本申请实施例,针对业务数据在同一线程进行收发、处理的场景,将网络链接在收发两端绑定工作线程,从而控制负载均衡的分布于各工作线程。
优选的,所述使用所述应用层指定的服务端线程,重新与服务端建立新网络链接,包括:
在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;
其中,所述满足条件的端口,是该端口号对服务端线程数取余或者取模等于所述指定的服务端线程的线程号。
本申请实施例中,通过客户端工作线程在建链时指定服务端的线程,将业务层所包含的不同客户端进程与同一个服务端进程之间的多条链接都在同一线程内完成,从而降低了系统的延迟,打造无锁的分布式系统。具体的,参见图5,客户端先与服务端建立一条链接,建连完成后,发送请求,查询服务端的工作线程数,服务端将自身的线程数作为响应返回给客户端。此后,客户端可重新与服务端建立新链接,重新建链时在一个工作线程内根据应用层指定的服务端线程号,在可用本端端口范围内选择一个端口,使其满足对服务端线程数取余等于指定线程号。这样,通过该本端端口发出去的包,在服务端网卡收到后,由于网卡规则是源端口号对服务端线程数取余的结果为接收队列索引,所以这个包会在服务端进程内被客户端指定线程读走。
以上述实施例为基础,本申请还提供一种用于服务端网络数据包的处理方法的实施例,由于该实施例以上述实施例为基础,因此对其进行简要说明,相关部分请参见上述实施例的对应说明即可。
图6是本申请实施例提供的一种用于服务端网络数据包的处理方法的处理流程图,其所示的用于服务端网络数据包的处理方法,包括:
步骤S601,接收客户端查询服务端工作线程数的请求,将自身的工作线程数作为响应返回给该客户端;
步骤S602,根据预先配置的流量分配算法,将接收的网络数据包转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;
步骤S603,判断接收的网络数据包是否客户端发送的重新建立网络链接请求;若是,使用该工作线程与该请求的源端口建立新网络链接。
本申请实施例中所提供的用于服务端网络数据包的处理方法,是与上述用于客户端网络数据包的处理方法相配合的服务端方法,实际实现时,需要客户端和服务端配合使用。
其中,所述流量分配算法,配置在网卡队列上,其算法包括:
根据接收的网络数据包的源端口号对所述工作线程数取余;
其取余结果作为网卡接收队列索引。
本申请实施例中,所述工作线程,绑定到CPU物理核。其中,服务端接收的网络数据包,包括客户端发送的重新建立网络链接请求;当所述重新建立网络链接请求到达服务端网卡后,与网卡所配置的流量规则进行匹配,并被转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;由于客户端发起重新建立链接的请求,其请求报文的源端口是根据客户端所指定的服务端线程号来确定的,因此在服务端的流量分配算法是通过反向计算确定该建链请求报文发送到所指定的网卡队列,并进一步传递到指定的工作线程处理,例如,根据接收的网络数据包的源端口号对所述工作线程数取余;其取余结果作为网卡接收队列索引。
与本申请提供的一种用于网络数据包的处理方法的实施例相对应,本申请还提供了一种用于网络数据包的处理装置。
参照图7,其示出了根据本申请提供的一种用于网络数据包的处理装置示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见方法实施例的对应说明即可。下述描述的装置实施例仅仅是示意性的。
本申请提供一种用于网络数据包的处理装置,包括:
发送单元701,用于根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;
匹配单元702,用于将接收到的网络数据包与所述流量分配算法进行匹配;
接收单元703,用于根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列。
可选的,所述网卡队列,为绑定了工作线程的网卡队列;其中,所述工作线程,为与CPU物理核进行预先绑定的网络数据包处理线程。
可选的,接收单元703,还包括线程内处理子单元,用于在所述根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列之后,进行下述处理:
通过该网卡队列预先绑定的工作线程从所述网卡队列读取网络数据包进行线程内处理;其中,所述网卡队列预先绑定的工作线程,与构造发送网络数据包的工作线程为同一线程。
可选的,所述工作线程,是基于DPDK的工作线程。
可选的,所述流量分配算法,至少包括:工作线程使用的端口和/或端口范围。
可选的,所述流量分配算法,还包含被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围。
可选的,所述匹配单元702,还包括服务端判断子单元,用于判断所述工作线程是否为服务端,若是,则所述流量规则,还包括根据接收的网络数据包的源端口与所述工作线程数确定接收流量所匹配的网卡队列。
可选的,所述网卡,其数量为一个或多个;其中,网卡数量为多个时,与同一工作线程绑定的不同网卡的队列配置相同的流量规则。
可选的,所述网卡,其数量为两个。
可选的,所述匹配单元702,还包括客户端判断子单元,用于判断所述工作线程是否为客户端,若是,则进行下述处理:根据应用层的请求数和工作线程数确定目标线程,通过所述目标线程与服务端建立链接;从所述目标线程对应的端口和/或端口范围中,选择一个端口,作为所述客户端的本端端口,组装要发送的网络数据包;其中,通过下述操作确定所述目标线程:
使用全局值表示发送的全局请求数;
用所述全局值对工作线程数取模,将结果值对应的线程号作为目标线程。
可选的,还包括每次发送完成后,所述全局请求数递增一。
可选的,所述选择一个端口,包括依次选择未使用的端口。
可选的,所述服务端判断子单元,还用于进行下述处理:使用监听端口,作为所述服务端的本端端口,组装要发送的网络数据包。
可选的,所述发送单元701,还包括选择网卡子单元,用于在组装要发送的网络数据包的步骤之后进行下述处理:
通过轮询选择网卡,进行发送;或者根据组包后的五元组进行哈希计算,根据哈希结果选择网卡,进行发送。
可选的,所述根据哈希结果选择网卡,包括按照下述方式选择网卡:
若网卡数量为2,哈希结果若为偶数,选择第1个网卡,哈希结果若为奇数选择第2个网卡。
可选的,所述用于网络数据包的处理装置,还包括重新建链子单元,用于进行下述处理:
在与该工作线程对应的应用层和服务端建立业务链接之前,与服务端建立网络链接,请求查询服务端工作线程数;
获得服务端工作线程数,上报到所述应用层;
使用所述应用层指定的服务端线程,在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;其中,所述满足条件的端口,是该端口号对服务端线程数取余等于所述指定的服务端线程的线程号。
与本申请提供的一种用于客户端网络数据包的处理方法的实施例相对应,本申请还提供了一种用于客户端网络数据包的处理装置。
参照图8,其示出了根据本申请提供的一种用于客户端网络数据包的处理装置示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见方法实施例的对应说明即可。下述描述的装置实施例仅仅是示意性的。
本申请提供一种用于客户端网络数据包的处理装置,包括:
线程数查询单元801,用于与服务端建立网络链接,请求查询服务端工作线程数;
线程数上报单元802,用于将获得的服务端工作线程数上报到对应的应用层;
指定线程建链单元803,用于使用所述应用层指定的服务端线程,重新与服务端建立网络链接。
可选的,所述指定线程建链单元803,具体用于:
在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;
其中,所述满足条件的端口,是该端口号对服务端线程数取余等于所述指定的服务端线程的线程号。
与本申请提供的一种用于服务端网络数据包的处理方法的实施例相对应,本申请还提供了一种用于服务端网络数据包的处理装置。
参照图9,其示出了根据本申请提供的一种用于服务端网络数据包的处理装置示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见方法实施例的对应说明即可。下述描述的装置实施例仅仅是示意性的。
本申请提供一种用于服务端网络数据包的处理装置,包括:
线程数查询处理单元901,用于接收客户端查询服务端工作线程数的请求,将自身的工作线程数作为响应返回给该客户端;
数据包匹配单元902,用于根据预先配置的流量分配算法,将接收的网络数据包转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;
建链单元903,用于判断接收的网络数据包是否客户端发送的重新建立网络链接请求;若是,使用该工作线程与该请求的源端口建立新网络链接。
可选的,所述流量分配算法,配置在网卡队列上,其算法包括:
根据接收的网络数据包的源端口号对所述工作线程数取余;
其取余结果作为网卡接收队列索引。
可选的,所述工作线程,绑定到CPU物理核。
以上述实施例为基础,本申请还提供一种用于网络数据包的处理系统的实施例,由于该实施例以上述实施例为基础,因此对其进行简要说明,相关部分请参见上述实施例的对应说明即可。
本申请实施例提供的一种用于网络数据包的处理系统,包括:
用于客户端网络数据包的处理装置1101,以及用于服务端网络数据包的处理装置1102。
实际应用中,通过客户端工作线程在建链时指定服务端的线程,将业务层所包含的不同客户端进程与同一个服务端进程之间的多条链接都在同一线程内完成。具体的,客户端先与服务端建立一条链接,建连完成后,发送请求,查询服务端的工作线程数,服务端将自身的线程数作为响应返回给客户端。此后,客户端可重新与服务端建立新链接,重新建链时在一个工作线程内根据应用层指定的服务端线程号,在可用本端端口范围内选择一个端口,使其满足对服务端线程数取余等于指定线程号。这样,通过该本端端口发出去的包,在服务端网卡收到后,由于网卡规则是源端口号对服务端线程数取余的结果为接收队列索引,所以这个包会在服务端进程内被客户端指定线程读走。
本申请还提供了一种用于实现所述用于网络数据包的处理方法的电子设备,参照图10,其示出了本实施例提供的一种电子设备的示意图。
本申请提供的所述电子设备实施例描述得比较简单,相关的部分请参见上述提供的所述用于网络数据包的处理方法的实施例的对应说明即可。下述描述的实施例仅仅是示意性的。
本申请提供一种电子设备,包括:
存储器1001,以及处理器1002;
所述存储器1001用于存储计算机可执行指令,所述处理器1002用于执行所述计算机可执行指令:
存储器,以及处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包;
将接收到的网络数据包与所述流量分配算法进行匹配;
根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (23)
1.一种用于网络数据包的处理方法,其特征在于,包括:
根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包,所述网卡队列绑定了预先与CPU物理核绑定的工作线程,从而控制基于所述工作线程建立的网络链接在网卡上的分布;
将接收到的网络数据包与所述流量分配算法进行匹配;
根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列;
其中,所述流量分配算法,包括:工作线程使用的端口和/或端口范围,以及,被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围。
2.根据权利要求1所述的用于网络数据包的处理方法,其特征在于,所述工作线程,为与CPU物理核进行预先绑定的网络数据包处理线程。
3.根据权利要求2所述的用于网络数据包的处理方法,其特征在于,所述根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列,此步骤之后,还包括下述处理:
通过该网卡队列预先绑定的工作线程从所述网卡队列读取网络数据包进行线程内处理;其中,所述网卡队列预先绑定的工作线程,与构造发送网络数据包的工作线程为同一线程。
4.根据权利要求2所述的用于网络数据包的处理方法,其特征在于,所述工作线程,是基于DPDK的工作线程。
5.根据权利要求1所述的用于网络数据包的处理方法,其特征在于,所述工作线程作为服务端时,所述流量规则,还包括根据接收的网络数据包的源端口与所述工作线程数确定接收流量所匹配的网卡队列。
6.根据权利要求1所述的用于网络数据包的处理方法,其特征在于,所述网卡,其数量为一个或多个;其中,网卡数量为多个时,与同一工作线程绑定的不同网卡的队列配置相同的流量规则。
7.根据权利要求1所述的用于网络数据包的处理方法,其特征在于,所述工作线程作为客户端时,所述根据预先确定的流量分配算法构造发送网络数据包,包括:根据应用层的请求数和工作线程数确定目标线程,通过所述目标线程与服务端建立链接;从所述目标线程对应的端口和/或端口范围中,选择一个端口,作为所述客户端的本端端口,组装要发送的网络数据包;其中,通过下述操作确定所述目标线程:
使用全局值表示发送的全局请求数;
用所述全局值对工作线程数取模,将结果值对应的线程号作为目标线程。
8.根据权利要求7所述的用于网络数据包的处理方法,其特征在于,还包括每次发送完成后,所述全局请求数递增一。
9.根据权利要求7所述的用于网络数据包的处理方法,其特征在于,所述选择一个端口,包括依次选择未使用的端口。
10.根据权利要求1所述的用于网络数据包的处理方法,其特征在于,所述工作线程作为服务端时,所述根据预先确定的流量分配算法构造发送网络数据包,包括:使用监听端口,作为所述服务端的本端端口,组装要发送的网络数据包。
11.根据权利要求7或10所述的用于网络数据包的处理方法,其特征在于,所述选择网卡队列发送该网络数据包,包括在组装要发送的网络数据包的步骤之后进行下述处理:
通过轮询选择网卡,进行发送;或者根据组包后的五元组进行哈希计算,根据哈希结果选择网卡,进行发送。
12.根据权利要求11所述的用于网络数据包的处理方法,其特征在于,所述根据哈希结果选择网卡,包括按照下述方式选择网卡:
若网卡数量为2,哈希结果若为偶数,选择第1个网卡,哈希结果若为奇数选择第2个网卡。
13.根据权利要求6所述的用于网络数据包的处理方法,其特征在于,所述网卡,其数量为两个。
14.根据权利要求1所述的用于网络数据包的处理方法,其特征在于,所述工作线程作为客户端时,还包括下述处理:
在与该工作线程对应的应用层和服务端建立业务链接之前,与服务端建立网络链接,请求查询服务端工作线程数;
获得服务端工作线程数,上报到所述应用层;
使用所述应用层指定的服务端线程,在可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;其中,所述满足条件的端口,是该端口号对服务端线程数取余等于所述指定的服务端线程的线程号。
15.一种用于客户端网络数据包的处理方法,其特征在于,包括:
与服务端建立网络链接,请求查询服务端工作线程数;
将获得的服务端工作线程数上报到对应的应用层;
使用所述应用层指定的服务端线程以及所述客户端的工作线程,重新与服务端建立网络链接;
其中,所述网络链接之间的网络数据包,根据权利要求1所述的网络数据包的处理方法进行构造、发送及接收处理;其中,所述网卡队列绑定了所述客户端的工作线程;所述客户端的工作线程预先绑定了CPU物理核;所述流量分配算法,包括:所述客户端的工作线程使用的端口和/或端口范围,以及,被配置在所述网卡队列上的流量规则;其中,所述流量规则,与所述客户端的工作线程使用一致的端口和/或端口范围。
16.根据权利要求15所述的用于网络数据包的处理方法,其特征在于,所述使用所述应用层指定的服务端线程以及所述客户端的工作线程,重新与服务端建立新网络链接,包括:
在所述客户端的工作线程的可用本端端口范围内选择满足条件的端口重新与服务端建立网络链接;
其中,所述满足条件的端口,是该端口号对服务端线程数取余等于所述指定的服务端线程的线程号。
17.一种用于服务端网络数据包的处理方法,其特征在于,包括:
接收客户端查询服务端工作线程数的请求,将自身的工作线程数作为响应返回给该客户端;
根据预先配置的流量分配算法,将接收的网络数据包转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;所述工作线程预先绑定了CPU物理核;其中,所述流量分配算法,包括:工作线程使用的端口和/或端口范围,以及,被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围;
判断接收的网络数据包是否客户端发送的重新建立网络链接请求;若是,使用该工作线程与该请求的源端口建立新网络链接,从而控制基于所述工作线程建立的网络链接在网卡上的分布。
18.根据权利要求17所述的用于服务端网络数据包的处理方法,其特征在于,所述流量分配算法,配置在网卡队列上,其算法包括:
根据接收的网络数据包的源端口号对所述工作线程数取余;
其取余结果作为网卡接收队列索引。
19.一种用于网络数据包的处理装置,其特征在于,包括:
发送单元,用于根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包,所述网卡队列绑定了预先与CPU物理核绑定的工作线程,从而控制基于所述工作线程建立的网络链接在网卡上的分布;
匹配单元,用于将接收到的网络数据包与所述流量分配算法进行匹配;
接收单元,用于根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列;所述网卡队列,是与发送网卡队列在相同或不同的网卡上的网卡队列;
其中,所述流量分配算法,包括:工作线程使用的端口和/或端口范围,以及,被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范。
20.一种用于客户端网络数据包的处理装置,其特征在于,包括:
线程数查询单元,用于与服务端建立网络链接,请求查询服务端工作线程数;
线程数上报单元,用于将获得的服务端工作线程数上报到对应的应用层;
指定线程建链单元,用于使用所述应用层指定的服务端线程以及所述客户端的工作线程,重新与服务端建立网络链接;
其中,所述网络链接之间的网络数据包,根据权利要求1所述的网络数据包的处理方法进行构造、发送及接收处理;其中,所述网卡队列绑定了所述客户端的工作线程;所述客户端的工作线程预先绑定了CPU物理核;所述流量分配算法,包括:所述客户端的工作线程使用的端口和/或端口范围,以及,被配置在所述网卡队列上的流量规则;其中,所述流量规则,与所述客户端的工作线程使用一致的端口和/或端口范围。
21.一种用于服务端网络数据包的处理装置,其特征在于,包括:
线程数查询处理单元,用于接收客户端查询服务端工作线程数的请求,将自身的工作线程数作为响应返回给该客户端;
数据包匹配单元,用于根据预先配置的流量分配算法,将接收的网络数据包转发到所匹配的网卡队列,由该网卡队列预先绑定的工作线程读取处理;
建链单元,用于判断接收的网络数据包是否客户端发送的重新建立网络链接请求;若是,使用该工作线程与该请求的源端口建立新网络链接;
其中,所述工作线程预先绑定了CPU物理核;其中,所述流量分配算法,包括:工作线程使用的端口和/或端口范围,以及,被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围;从而控制基于所述工作线程建立的网络链接在网卡上的分布。
22.一种用于网络数据包的处理系统,其特征在于,包括:权利要求20所述的用于客户端网络数据包的处理装置,以及权利要求21所述的用于服务端网络数据包的处理装置。
23.一种电子设备,其特征在于,包括:
存储器,以及处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:
根据预先确定的流量分配算法构造发送网络数据包,选择网卡队列发送该网络数据包,所述网卡队列绑定了预先与CPU物理核绑定的工作线程,从而控制基于所述工作线程建立的网络链接在网卡上的分布;
将接收到的网络数据包与所述流量分配算法进行匹配;
根据匹配结果将接收网络数据包转发到符合所述流量分配算法的网卡队列;所述网卡队列,是与发送网卡队列在相同或不同的网卡上的网卡队列;
其中,所述流量分配算法,包括:工作线程使用的端口和/或端口范围,以及,被配置在网卡队列上的流量规则;其中,所述流量规则,与所述网卡队列绑定的工作线程使用一致的端口和/或端口范围。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810017420.9A CN110022330B (zh) | 2018-01-09 | 2018-01-09 | 用于网络数据包的处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810017420.9A CN110022330B (zh) | 2018-01-09 | 2018-01-09 | 用于网络数据包的处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110022330A CN110022330A (zh) | 2019-07-16 |
CN110022330B true CN110022330B (zh) | 2022-01-21 |
Family
ID=67187673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810017420.9A Active CN110022330B (zh) | 2018-01-09 | 2018-01-09 | 用于网络数据包的处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110022330B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111193668B (zh) * | 2019-12-10 | 2022-05-10 | 中移(杭州)信息技术有限公司 | 流量分配方法、装置、计算机设备及存储介质 |
CN111447155B (zh) * | 2020-03-24 | 2023-09-19 | 广州市百果园信息技术有限公司 | 数据传输方法、装置、设备及存储介质 |
CN113595959B (zh) * | 2020-04-30 | 2023-04-18 | 海信集团有限公司 | 网络流量数据的处理方法及服务器 |
CN111736982B (zh) * | 2020-05-12 | 2023-12-08 | 深圳震有科技股份有限公司 | 一种5g数据转发平面的数据转发处理方法和服务器 |
CN111984415A (zh) * | 2020-08-24 | 2020-11-24 | 北京亚鸿世纪科技发展有限公司 | 一种基于流水线转发模型的负载均衡方法及装置 |
CN112749028B (zh) * | 2021-01-11 | 2024-06-07 | 科大讯飞股份有限公司 | 网络流量处理方法、相关设备及可读存储介质 |
CN113300978A (zh) * | 2021-02-05 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 数据传输方法以及装置 |
CN113992425B (zh) * | 2021-11-12 | 2022-09-23 | 北京天融信网络安全技术有限公司 | 一种收发网络数据包的方法、网络设备以及通信系统 |
CN114095251B (zh) * | 2021-11-19 | 2024-02-13 | 南瑞集团有限公司 | 一种基于dpdk与vpp的sslvpn实现方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102497322A (zh) * | 2011-12-19 | 2012-06-13 | 曙光信息产业(北京)有限公司 | 一种基于分流网卡和多核cpu实现的高速包过滤设备和方法 |
CN103475586A (zh) * | 2013-08-22 | 2013-12-25 | 东软集团股份有限公司 | 网络数据报文的转发方法、装置及系统 |
CN104184659A (zh) * | 2013-05-22 | 2014-12-03 | 上海贝尔股份有限公司 | 一种用于获取网络中数据包的方法与设备 |
CN104281493A (zh) * | 2014-09-28 | 2015-01-14 | 般固(北京)科技股份有限公司 | 一种提升应用交付通讯平台多进程程序性能的方法 |
CN104639578A (zh) * | 2013-11-08 | 2015-05-20 | 华为技术有限公司 | 多协议栈负载均衡方法及装置 |
CN106997307A (zh) * | 2017-02-13 | 2017-08-01 | 上海大学 | 一种面向多终端无线通信的Socket线程池设计方法 |
CN107483237A (zh) * | 2017-08-02 | 2017-12-15 | 赛尔网络有限公司 | 基于dpdk转发的性能优化系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10001930B2 (en) * | 2015-12-02 | 2018-06-19 | Macau University Of Science And Technology | High-efficient packet I/O engine for commodity PC |
-
2018
- 2018-01-09 CN CN201810017420.9A patent/CN110022330B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102497322A (zh) * | 2011-12-19 | 2012-06-13 | 曙光信息产业(北京)有限公司 | 一种基于分流网卡和多核cpu实现的高速包过滤设备和方法 |
CN104184659A (zh) * | 2013-05-22 | 2014-12-03 | 上海贝尔股份有限公司 | 一种用于获取网络中数据包的方法与设备 |
CN103475586A (zh) * | 2013-08-22 | 2013-12-25 | 东软集团股份有限公司 | 网络数据报文的转发方法、装置及系统 |
CN104639578A (zh) * | 2013-11-08 | 2015-05-20 | 华为技术有限公司 | 多协议栈负载均衡方法及装置 |
CN104281493A (zh) * | 2014-09-28 | 2015-01-14 | 般固(北京)科技股份有限公司 | 一种提升应用交付通讯平台多进程程序性能的方法 |
CN106997307A (zh) * | 2017-02-13 | 2017-08-01 | 上海大学 | 一种面向多终端无线通信的Socket线程池设计方法 |
CN107483237A (zh) * | 2017-08-02 | 2017-12-15 | 赛尔网络有限公司 | 基于dpdk转发的性能优化系统及方法 |
Non-Patent Citations (2)
Title |
---|
Comparison of high-performance packet processing frameworks on NUMA;Haipeng Wang;《2016 7th IEEE International Conference on Software Engineering and Service Science(ICSESS)》;20170323;全文 * |
DPDK多线程初步解析;少阁主;《blog.csdn.net/yangye2014/article/details/78064676》;20170922;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110022330A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110022330B (zh) | 用于网络数据包的处理方法、装置及电子设备 | |
US9148496B2 (en) | Dynamic runtime choosing of processing communication methods | |
US10536533B2 (en) | Optimization of packetized data transmission in TCP-based networks | |
US9888048B1 (en) | Supporting millions of parallel light weight data streams in a distributed system | |
US10182126B2 (en) | Multilevel redirection in a virtual desktop infrastructure environment | |
US11570135B2 (en) | Routing for large server deployments | |
WO2013191971A1 (en) | Application enhancement using edge data center | |
US10158543B2 (en) | Method of estimating round-trip time (RTT) in content-centric network (CCN) | |
US11689646B2 (en) | Network packet processing method and apparatus and network server | |
WO2012167531A1 (zh) | 一种数据快速分发方法和装置 | |
Kogias et al. | Bypassing the load balancer without regrets | |
Lei et al. | Parallelizing packet processing in container overlay networks | |
CN111371694A (zh) | 一种分流方法、装置和系统、处理设备和存储介质 | |
CN113994645A (zh) | 自动复制api调用以分离数据中心 | |
US20150012663A1 (en) | Increasing a data transfer rate | |
Chang et al. | A multiple parallel download scheme with server throughput and client bandwidth considerations for data grids | |
CN109218371B (zh) | 一种调用数据的方法和设备 | |
WO2012113224A1 (zh) | 多节点计算系统下选择共享内存所在节点的方法和装置 | |
Chang et al. | Accelerate state sharing of network function with rdma | |
CN112732175B (zh) | 一种数据传输方法及系统 | |
Wang et al. | CloudJet4BigData: Streamlining Big Data via an accelerated socket interface | |
US20230208913A1 (en) | In-order streaming in-network computation | |
KR20220076914A (ko) | Gen-Z 인터페이스 기반의 혼잡 제어 방법 및 장치 | |
KR20230085075A (ko) | 분리 메모리 환경의 네트워크 송신 가속화 방법 및 장치 | |
CN118175104A (zh) | 用于优化numa服务器转发性能的方法、处理器及计算机设备 |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230613 Address after: Room 1-2-A06, Yungu Park, No. 1008 Dengcai Street, Sandun Town, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Aliyun Computing Co.,Ltd. Address before: Box 847, four, Grand Cayman capital, Cayman Islands, UK Patentee before: ALIBABA GROUP HOLDING Ltd. |