一种用户态协议栈对外部负载进程的均衡分割策略的制作方法

文档序号:20699595发布日期:2020-05-12 15:29阅读:355来源:国知局
一种用户态协议栈对外部负载进程的均衡分割策略的制作方法

本发明涉及计算机网络服务栈领域,尤其涉及一种用户态协议栈对外部负载进程的均衡分割策略。



背景技术:

近二十年,内核网络协议栈网络输入输出的处理速率因为内存复制开销、上下文切换开销与内核数据的处理、队列延迟等原因,而难以达到性能快速提升的网卡硬件设备的收包速率。故而,诸多研究将处理网络报文的数据面直接实现于用户态空间,以绕过内核的方式消除上写文切换开销与内核数据处理与队列延迟,并降低网络协议栈的开发难度。

用户态网络协议栈的处理模型从与服务对象应用的关系层面,可以分为1)应用与协议栈功能分离模型、2)应用逻辑与协议栈处理逻辑耦合模型与3)混合模型。不同模型适用于不同的服务场景。

比如于2016年开源的vectorpacketprocessor(vpp)项目提出的完整协议栈类似于混合模型,既支持应用逻辑与协议栈处理逻辑结合实现为单一应用的模式,亦支持应用与协议栈功能分离模型。而如2014年会议论文mtcp所提出的tcp协议栈模型可归纳于应用逻辑与协议栈处理逻辑耦合模型。

经过调研发现,基于应用与协议栈功能分离模型,从多线程协议栈进程服务多进程应用的场景出发,服务线程之间存在负载资源竞争关系。因此,本领域的技术人员致力于开发一种均衡分割策略,旨在以消除服务线程间负载资源竞争关系的方式进一步优化提高该模型下用户态协议栈的网络报文处理速率。



技术实现要素:

有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是基于应用进程与协议栈进程分离模型,基于多线程协议栈实施负载进程均衡分割策略以实现不同协议栈服务线程的负载隔离。

为实现上述目的,本发明提供了一种用户态协议栈对外部负载进程的均衡分割策略,其特征在于,包括如下步骤:

步骤a,根据初始网络流将负载进程均衡分发给不同的服务线程;

步骤b,所述服务线程基于第一步所述负载进程分发结果得到私有负载进程表,所述服务线程从所述私有负载进程表中为后续接收的网络流选取负载进程。

进一步地,步骤a所述不同的服务线程不共享相同的负载进程。

进一步地,所述负载进程均衡分割策略基于应用进程与协议栈进程分离模型实施负载进程分割。

进一步地,所述均衡分割策略在技术方面依赖于receivesidescaling(rss)网卡驱动技术。

进一步地,所述私有负载进程表的表项为所述服务线程的负载进程索引。

进一步地,所述负载均衡分割策略适合于多服务线程场景。

进一步地,所述负载均衡分割策略基于vpp框架实施负载进程均衡分割。

进一步地,所述vpp框架通过兼容的网络套接字接口(socketapi)为外部负载应用提供完整的协议栈功能。

进一步地,对应应用的每一个所述负载进程都只由单一服务线程负责。

进一步地,所述负载均衡分割策略采用两段式负载均衡机制。

在本发明的较佳实施方式中,步骤a,依赖于rss网卡驱动技术,协议栈不同服务线程分别从多队列网卡接收基于transmissioncontrolprotocol(tcp)传输控制协议的链接请求建立的网络报文(syn报文);tcp链接建立的过程,从未被选中的服务进程中选择一个负载进程并标记该负载进程为“已选中”,同时在为当前服务线程创建的“负载进程表中”追加被选中负载进程的索引。被标记为“已选中”负载进程在实现中不可被二次选择,以保证不同服务线程之间负载进程隔离处理。第一阶段直至应用的所有负载进程都被标记为“已选中”时结束,网络报文处理进入步骤b。

步骤b,所有新接收的tcp链接在选择负载进程时,其所属服务线程直接从私有的“负载进程表”中为对应的tcp链接选取负载进程,所有通过该tcp链接接收的请求都将经当下服务线程交由选取的应用负载进程处理。

因为对应应用的每一个负载进程都只能被选择一次,从而保证每个负载进程的资源只会被一个服务线程所访问,实现了负载进程的分割。除此之外,利用rss网卡驱动技术,也使得第一阶段的链接请求被均匀地传递给不同服务线程的网卡队列中,实现了基于服务线程的负载进程均衡分割。

使用此均衡分割策略,可以去除因共享负载进程而引入的资源竞争开销;同时降低单一服务线程的负载进程数量,从而减少加载过多负载数据而造成的缓存不命中次数。

以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。

附图说明

图1是本发明的一个较佳实施例的应用与协议栈功能分离模型图;

图2是本发明的一个较佳实施例的实施了负载均衡分割策略的协议栈服务模型图。

具体实施方式

以下参考说明书附图介绍本发明的多个优选实施例,使其技术内容更加清楚和便于理解。本发明可以通过许多不同形式的实施例来得以体现,本发明的保护范围并非仅限于文中提到的实施例。

如图1所示,因为vpp项目实现的用户态协议栈的服务模型,符合应用与协议栈功能分离模型,并为外部多进程应用提供完整的网络协议栈服务,如网络服务器nginx。故而,本实施例基于vpp框架实施负载进程均衡分割策略。其中图1为应用与协议栈功能分离模型图,vpp作为多线程协议栈场景下通过兼容的网络套接字接口(socketapi)为外部负载应用提供完整的协议栈功能。单进程应用场景本发明不作深入探析,因经测试发现,对于单进程负载应用,协议栈亦可以启动单服务线程协议栈,本质上不存在负载进程竞争关系;而若是启动多服务线程协议栈,可以沿用源模型(如图1)通过互斥锁等技术保持负载进程运作的正确性,也使得负载进程竞争关系继续存在。对多服务线程-单负载进程场景无法实施均衡分割策略,若该场景为网络密集型场景,则服务线程间的竞争关系使得协议栈性能降低,可以采取使用单服务线程模式缓和因竞争而引入的开销。若该场景为计算密集型场景,则启动的多个服务线程存在资源浪费情况,服务线程之间的负载资源竞争关系则不是性能的主要瓶颈,可以不作深入优化。

本发明所提出的负载均衡分割策略适合于多服务线程场景,比如过多的应用负载进程对网络报文接收速率的要求超出单服务线程所能提供的处理速率,则可通过实施图1作进一步优化。

如图2所示,为实施了负载均衡分割策略的协议栈服务模型图,利用网卡rss驱动技术隔离不同服务线程的负载进程,避免了因负载进程竞争关系而引入的互斥锁机制,有效提高协议栈网络报文的处理速率。在实验场景中,我们选取nginx作为网络服务器响应客户端的http请求,nginx应用启动八个负载进程,在vpp协议栈以“a’,b’,c’…”表示。

通过均衡分割策略步骤a的负载分割,vpp服务线程1与服务线程2分别得到不相交的负载进程表。在后续的步骤b,vpp服务线程2只需要在负载进程表(b’,d’,f’,h’)为新建立的tcp链接选取nginx进程为对应的客户端响应http请求。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1