CN114598746A - 基于智能网卡的服务器间负载均衡性能优化方法 - Google Patents
基于智能网卡的服务器间负载均衡性能优化方法 Download PDFInfo
- Publication number
- CN114598746A CN114598746A CN202210218905.0A CN202210218905A CN114598746A CN 114598746 A CN114598746 A CN 114598746A CN 202210218905 A CN202210218905 A CN 202210218905A CN 114598746 A CN114598746 A CN 114598746A
- Authority
- CN
- China
- Prior art keywords
- server
- data packet
- qth
- scheduling decision
- decision module
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1008—Server selection for load balancing based on parameters of servers, e.g. available memory or workload
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于智能网卡的服务器间负载均衡性能优化方法,目的是解决目前负载均衡方法占用计算资源多的问题。技术方案是构建基于智能网卡的服务器间负载均衡系统,智能网卡上的Q+1个CPU核心运行负载均衡器,智能网卡的内存开辟Q个接收队列和Q个发送队列;负载均衡器包括1个同步代理和Q个调度器,Q个调度器和同步代理并行运行,对来自MM个客户端的数据包进行接收、解析、调度决策、封装、发送,第q个调度器串行处理Gq个数据包,负责将接收到的数据包分发到NN个服务端。本发明智能网卡上的负载均衡器与服务器上的负载均衡器性能相当,不需要占用大量服务器的计算资源就能满足负载均衡的需要,降低电力、服务器成本。
Description
技术领域
本发明属于计算机应用技术领域,尤其涉及一种基于智能网卡的负载均衡器性能优化方法。
背景技术
负载均衡器是数据中心的一个关键组件。它负责将客户端发出的流量均衡地分发到不同的服务端点,从而避免服务端点之间出现负载失衡,导致有些服务端点任务太多使得任务需要等待,有些服务端点太闲使得资源浪费,并改善数据中心的扩展能力和响应能力。负载均衡器包括硬件或软件两种实现方式。传统地,负载均衡器被实现在专用的硬件设备,比如交换机。由于基于硬件实现的负载均衡器可扩展性、灵活性方面的不足,目前数据中心的主流方案都选择在通用服务器上部署基于软件实现的负载均衡器(Software LoadBalancers,SLBs)。SLBs具有多个方面的技术优势:在可用性方面,SLBs提供“N+1”冗余;在可扩展性方面,通过简单地增加负载均衡器的数量就可提高负载均衡器的容量;另外,在灵活性方面,支持通过编程的方式快速方便地添加、部署和测试新功能,能够实现快速的功能迭代和更新。
尽管SLBs带来了诸多技术优势,然而它也引进了高昂的部署成本。据统计,数据中心所有服务器的3.75%要用来运行SLBs,例如,在一个百万台服务器规模的数据中心内,需要数万台高价格的商用服务器运行SLBs,大大耗费了本可以用来产生经济收入的昂贵的服务器计算资源,也产生了很高的电力成本。随着微服务架构的崛起,数据中心内部的流量剧增,更多的通用服务器将被用来部署负载均衡器,使得数据中心面临更为严峻的负载均衡成本挑战。
因此,如何既通过减少作为负载均衡器的服务器的数量降低成本,又达到负载均衡目标是本领域技术人员极为关注的技术问题。
智能网卡一般用于卸载网络功能和卸载应用逻辑。智能网卡封装了廉价、高能效的多核处理器,配备了板载内存、DMA引擎、加速器(例如,用于加密、压缩和数据包重写的引擎)。智能网卡将计算推进到更靠近网络的地方,能够避免流量跨PCIe传输造成性能瓶颈;同时,通过专用的数据包处理硬件和加密加速器提供了强大的计算能力;此外,多核智能网卡大多支持Linux/DPDK(数据平面开发套件,DataPlane Development Kit)栈,采用C/C++进行编程,兼容当前的软件生态,基于智能网卡的上述特性,若能将负载均衡功能卸载到智能网卡上,可节约经济成本、节约主机CPU周期并消除PCIe性能瓶颈。但受限于智能网卡的资源能力,采用智能网卡实现负载均衡器的功能可能具有如下难点:(1)智能网卡的访存能力有限。根据测量结果,智能网卡访问L1 cache的耗时大约是所属服务器(插有智能网卡的服务器就是该智能网卡的所属服务器)的4倍;访问L2 cache的耗时也大约是所属服务器的3倍;当顺序访问内存时,智能网卡耗时比智能网卡所属服务器高出2倍左右;这种性能差距在随机访问时更为明显,智能网卡随机访存耗时是所属服务器的4倍左右。(2)智能网卡的同步能力有限,智能网卡的同步开销是所属服务器的7倍左右。
基于上述难点,目前还没有公开文献涉及采用智能网卡实现服务器间负载均衡技术的公开报导。
发明内容
本发明要解决的技术问题是解决现有服务器间负载均衡方法需要很多服务器运行软件实现负载均衡器导致占用计算资源多,电力成本、服务器成本高的问题,提出一种基于智能网卡的、高效的服务器间负载均衡方法,使得智能网卡上的负载均衡器与服务器上的负载均衡器性能相当,使得不需要占用大量服务器的计算资源就能满足负载均衡的需要,降低电力、服务器成本。
为解决上述技术问题,本发明包括以下步骤:
第一步,构建基于智能网卡的服务器间负载均衡系统:
基于智能网卡的服务器间负载系统由MM个客户端,一个主机服务器,NN个服务端组成。MM和NN为正整数。
客户端是发出数据包的机器。MM个客户端均与主机服务器相连,使用数据平面开发套件DPDK(DataPlane Development Kit,intel公司开发,版本≥18.05)向主机服务器上的智能网卡发送数据包。
NN个服务端均与主机服务器相连。NN个服务端使用DPDK接收来自MM个客户端,经由智能网卡转发的N个数据包,对客户端请求(一个请求由一个或多个数据包组成)进行响应。N为正整数。一个客户端可以发出多个数据包。
主机服务器与MM个客户端,NN个服务端均相连。主机服务器的PCIe接口插有智能网卡,智能网卡上运行着负载均衡器。
智能网卡包含两个网络端口,Q+1个CPU核心,Q+1块一级缓存,1块共享的三级缓存,Q为正整数,智能网卡的内存开辟有Q个接收队列和Q个发送队列。
智能网卡上的第一网络端口与MM个客户端、Q个接收队列相连,通过DPDK接收来自MM个客户端的N个数据包;将N个数据包按照RSS(Receive Side Scaling,接收端扩展)规则分发到Q个接收队列。
智能网卡上的第二网络端口与NN个服务端口、Q个发送队列相连,通过DPDK将从Q个发送队列接收的N个数据包分别发送到NN个服务端。
Q个接收队列和Q个发送队列均是Q块独立的内存区域,第q个接收队列和第q个发送队列均和第q个核心绑定,1≤q≤Q,Q个接收队列存储从第一网络端口接收到的N个数据包,第q个接收队列存储Gq个数据包(G1+G2+…+Gq+…+GQ=N)。
Q个发送队列共存储N个要发送到服务端的数据包,第q个发送队列存储要发送的、调度决策完成的Gq个数据包。
智能网卡的CPU核心除运行商用操作系统(如CentOS)外,还运行负载均衡器。负载均衡器负责将接收到的N个数据包分发到NN个服务端,由1个同步代理和Q个调度器组成,且在智能网卡的内存中存储一张“server_id——IP地址和端口”的表。一个CPU核心(令为第0个CPU核心)运行同步代理,其他Q个CPU核心(令为第1个CPU核心~第Q个CPU核心)运行Q个调度器,第q个CPU核心运行第q个调度器,Q+1个CPU核心并行运行。
第q块一级缓存被第q个CPU核心独占访问,三级缓存被Q+1个CPU核心共享访问。
“server_id——IP地址和端口”的表记录各个服务端的真实IP地址和端口,该表使用数组target[]存储,target[]的索引为服务端的编号server_id,一个server_id对应一个服务端,target[]中的每个元素包括两个字段,targer_ip和target_port,target_ip存储服务端的真实IP地址,target_port存储数据包要转发到的服务端端口,target[server_id]中存储着编号为server_id的服务端的IP地址和端口。
同步代理独占访问并托管共享资源,负责接收Q个调度器访问共享资源的请求,将Q个调度器发出的访问共享资源请求消息存储在请求消息数组RR[]中,RR[]中的第q个元素RR[q]存储第q个调度器发出的访问共享资源请求消息;第q块一级缓存上保存着RR[q],在第0块一级缓存,以及共享三级缓存上均保存着RR[]的副本,在第0块一级缓存上保存着共享资源。同步代理替调度器完成访问共享资源的任务,向发出请求的调度器返回共享资源的值。
RR[]有Q个元素,RR[q]中包含三种字段:flag字段、res_num字段和res字段。
flag:请求或响应标志,RR[q]中的flag等于pending时,表示第q个调度器已向同步代理发出访问共享资源的请求;RR[q]中的flag等于done时,表示同步代理已对请求作出响应;RR[q]中的flag等于NULL时,表示第q个调度器未发出访问共享资源的请求。flag字段单独占用一个缓存行,和数组元素中的其他字段隔离对齐。
res_num:调度器请求的共享资源数量。RR[q]中的res_num为1时,表示第q个调度器向同步代理申请一个共享资源;RR[q]中的res_num为W时,表示第q个调度器向同步代理申请W个共享资源。(所述共享资源是被多个核心共享访问的变量,典型的共享资源如全局变量。如server_id是全局共享的变量,因此为一种共享资源)
res:同步代理响应请求后,向申请共享资源的调度器返回的共享资源的值。RR[q]的res为d时,表示向第q个调度器返回共享资源的值为d。若res_num为W时,res的值为W个共享资源的值。
第q个调度器包含一个I/O处理模块(令为第q个I/O处理模块)和一个调度决策模块(令为第q个调度决策模块),1≤q≤Q。第q个I/O处理模块基于DPDK网络协议栈开发,包含一个输入单元(令为第q个输入单元)、一个输出单元(令为第q个输出单元)。
第q个输入单元与第q个接收队列、第q个调度决策模块相连。第q个输入单元从第q个接收队列取出Gq个数据包,对Gq个数据包的包头分别进行解析,将Gq个解析后的数据包传入第q个调度决策模块。
第q个调度决策模块与第q个输入单元、同步代理、第q个输出单元相连。第q个调度决策模块接收来自第q个输入单元的Gq个解析后的数据包,采用基于同步代理的轮询算法,串行为Gq个解析后的数据包决定服务端。对于第g个数据包,1≤g≤Gq,第q个调度决策模块向同步代理发出申请共享资源server_id的请求,从同步代理的获得server_id,将第g个解析后的数据包以及为第g个解析后的数据包选择的server_id传入到第q个输出单元。第q个调度决策模块串行做Gq次选择服务端决策,向同步代理发起Gq次申请访问server_id的请求,向第q个输出单元传入Gq个解析后的数据包和Gq个server_id。
第q个输出单元与第q个调度决策模块、第q个发送队列相连。第q个输出单元接收来自第q个调度决策模块完成决策的第g个解析后的数据包和server_id,将target[server_id]中的IP地址target_ip和端口target_port封装进第g个解析后的数据包的包头,将封装好的第g个解析后的数据包放入发送队列。
第二步,对智能网卡上的负载均衡器进行初始化,方法是:
2.1开启智能网卡上的RSS功能。
2.2初始化RR[]数组大小为Q,初始化RR[]所有元素的flag字段为NULL,初始化RR[]所有元素的rem_num字段为1,初始化RR[]所有元素的res字段返回的值为server_id的值,初始化server_id的值为0,即从第0个服务端开始,轮询选择服务端。
2.3智能网卡并行运行Q+1个CPU核心,令CPU核心的id为0,1,2,…,Q。设置智能网卡的第0个CPU核心运行同步代理,第1个CPU核心~第Q个CPU核心运行调度器。
第三步,智能网卡的第一网络端口接收来自MM个客户端的N个数据包,方法为:
第一网络端口同时接收来自MM个客户端的N个请求处理的数据包,通过RSS功能将N个数据包分发到Q个接收队列,其中第q个接收队列接收并存储Gq个数据包,G1+G2+…+Gq+…+GQ=N。
第四步,第1个调度器、第2个调度器、…、第q个调度器、…、第Q个调度器和同步代理并行运行,对来自MM个客户端的N个数据包进行接收、解析、调度决策、封装、发送,第q个调度器串行处理Gq个数据包,方法是:
Q个输入单元并行工作,从Q个接收队列读取并解析N个数据包,每个输入单元的工作流程相同,第q个输入单元按照4.1的流程串行解析Gq个数据包;同时,Q个调度决策模块和同步代理并行配合对N个数据包进行调度:Q个调度决策模块采用基于同步代理的轮询算法共向同步代理发送N个数据包申请共享资源server_id的请求,第q个调度决策模块按4.2的流程为Gq个数据包申请共享资源server_id,第q个调度决策模块串行向同步代理发送Gq个数据包申请共享资源server_id的请求;同时,同步代理按4.3的流程对来自Q个调度决策模块的N个申请共享资源server_id的请求进行调度,确定向Q个调度决策模块返回的server_id的值,决定每个数据包该发往哪个服务端;同时,Q个输出单元对从Q个调度决策模块接收的N个数据包封装处理,其中第q个输出单元按4.4的流程封装处理Gq个完成调度决策的数据包。
4.1Q个输入单元并行从Q个接收队列读取并解析N个数据包,第q个输入单元按4.1.1-4.1.5的流程接收并解析Gq个数据包,将Gq个数据包和Gq个数据包的虚拟IP和虚拟端口的内存地址发送到第q个调度决策模块:
4.1.1令g=1;
4.1.2第q个输入单元访问第q个接收队列,取第g个数据包,找到第g个数据包实际报文数据data存储区域的地址;
4.1.3第q个输入单元对第g个数据包的包头进行解析,得到第g个数据包的目的IP(虚拟IP)和目的端口(虚拟端口)的内存地址。
4.1.4第q个输入单元将第g个数据包的虚拟IP和虚拟端口的内存地址和第g个数据包发送给第q个调度决策模块。
4.1.5令g=g+1,若g≤Gq,转4.1.2;若g>Gq,转第三步,等待第一网络端口接收来自MM个客户端的下一批数据包。
4.2Q个调度决策模块并行对N个数据包进行调度,第q个调度决策模块按4.2.1-4.2.4的流程为从第q个输入单元接收的Gq个数据包申请共享资源server_id,确定这Gq数据包分别发往哪些服务端,方法为:
4.2.1令g=1;
4.2.2第q个调度决策模块监控是否从第q个输入单元接收到解析完成的第g个数据包和解析第g个数据包获得的虚拟IP和虚拟端口的内存地址,若接收到,转4.2.3;若未接收到,转4.2.2继续监控。
4.2.3第q个调度决策模块对第g个数据包进行调度,方法是:
4.2.3.1第q个调度决策模块为第g个数据包向同步代理申请访问共享资源server_id:第q个调度决策模块将申请访问共享资源的消息存储到RR[q]中,通过RR[q]将这条消息传输给同步代理,RR[q]的flag字段设置为pending,其余字段维持初始化状态:rem_num字段为1,res字段的值为server_id的值。此时,第q个CPU核心发送第q块一级缓存中RR[q]的flag字段所在缓存行的总线更新信号(即缓存一致性协议中的BusUpgr信号,其他CPU核心收到该信号,需无效在各自私有的一级缓存上的这条缓存行)到总线上,然后修改在第q块一级缓存中flag所在缓存行的数据,缓存行状态被修改为Modified(表明该缓存行的数据已被修改,数据有效)。
4.2.3.2第q个调度决策模块监测RR[q]的flag字段的值,判断同步代理是否响应了请求。若RR[q]的flag字段为pending,转4.2.3.2步继续监测;若检测到RR[q]的flag字段为done,转4.2.3.3步。
4.2.3.3此时第q个调度决策模块监测到RR[q]的flag字段变为done,表示同步代理响应了第q个调度决策模块申请访问server_id的值,并返回了server_id的值。第q个调度决策模块从RR[q]的res字段得到server_id的值,将完成调度决策的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址输出到第q个输出单元;
4.2.4令g=g+1,若g≤Gq,转4.2.2;若g>Gq,转第三步;4.3同步代理按4.3.1-4.3.6的流程接收来自Q个调度决策模块发出的N次申请共享资源server_id的请求,确定向Q个调度决策模块返回的server_id的值,实现为N个从客户端接收的数据包分配服务端的目的,方法为:
4.3.1令q=1;
4.3.2初始化g1=1,g2=1,…,gq=1,…,gQ=1,gq为第q个调度决策模块接收到的数据包的序号。
4.3.3同步代理判断第0个CPU核心上的第0块一级缓存中RR[q]的flag字段所在缓存行状态是否为Shared(表示缓存行数据有效且未被修改),若为Shared,表示第q个调度决策模块没有发出申请共享资源请求,转4.3.6步去轮询下一个调度决策模块。若同步代理监测到第q个CPU核心发送了第q块一级缓存中flag字段的总线更新信号,表示第q个调度决策模块发出了申请共享资源的请求,将第0块一级缓存的flag字段所在缓存行状态从Shared更新为Invalid(即令该行缓存行数据无效),转4.3.4步处理申请共享资源的请求。
4.3.4此时第0块一级缓存中的flag字段值无效,同步代理触发第0块一级缓存未命中,第0个CPU核心更新在第0块一级缓存中flag字段的值:运行同步代理的第0个CPU核心发送总线写信号(BusRdX信号,其它CPU核心收到该信号,需检查自己的高速缓存中是否有缓存该数据,并应答该信号)到总线上。第q个CPU核心收到BusRdX信号后,将RR[q]的flag字段从第q块一级缓存写回共享的三级缓存,将三级缓存上的数组元素RR[q]的flag值更新为pending。第0个CPU核心从三级缓存中加载被修改后的RR[q]的flag字段到第0块一级缓存。
4.3.5此时同步代理从第0块一级缓存读取到flag字段的值为pending,响应第q个调度决策模块为第gq数据包发起的申请共享资源server_id的请求,方法为:
4.3.5.1同步代理从第0块一级缓存上读取server_id的值,令server_id=(server_id+1)%NN,向申请访问server_id的第q个调度决策模块返回server_id的值。
4.3.5.2同步代理完成申请server_id的请求,令第0块一级缓存中RR[q]的flag的值为done。
4.3.5.3令gq=gq+1,若gq≤Gq,转4.3.6步轮询下一个调度决策模块;若gq>Gq,令gq=1,转4.3.6步轮询下一个调度决策模块。
4.3.6令q=q+1,若q≤Q,转4.3.3,若q>Q,令q=1,转4.3.3。
4.4Q个输出单元并行对从Q个调度决策模块接收的N个数据包进行封装处理,第q个输出单元按4.4.1-4.4.6的流程串行处理来自第q个调度决策模块的Gq个调度完成的数据包,方法为:
4.4.1令g=1;
4.4.2第q个输出单元监控是否接收到来自第q个调度决策模块的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址,若接收到,转4.4.3,若未接收到,转4.4.2继续监控。
4.4.3第q个输出单元以server_id作为索引,在“server_id——IP地址和端口”表的元素target[server_id]中找到被选中的服务端的IP地址target_ip和端口target_port,将被选中的服务端的IP地址target_ip和端口target_port写入到解析获得的第g个数据包包头的虚拟IP和虚拟端口的内存地址处,完成对第g个数据包的包头封装,得到封装好的第g个数据包。
4.4.4第q个输出单元将封装好的第g个数据包写入第q个发送队列。
4.4.5智能网卡的第二网络端口将第q个发送队列中的第g个数据包转发到target_ip对应的服务端。
4.4.6令g=g+1,若g≤Gq,转4.4.2;若g>Gq,转第三步。
采用本发明可以达到以下技术效果:
(1)本发明由于第一步构建的基于智能网卡的服务器间负载均衡系统采用了多核多队列的软件结构,使得负载均衡在智能网卡的软件架构上去中心化,使负载均衡系统能够通过简单地增加核的数量或者队列的数量应对更高的数据流量。
(2)本发明第一步将同步代理和调度决策模块间的请求响应信息组织成一个数组RR[],避免智能网卡的CPU对内存的随机访问;另外,保证①RR[i]数组元素内的各个字段机器字对齐,②频繁读写字段flag和数组元素内其他字段缓存行隔离,即flag字段占用一个缓存行,其他字段共同占用一个缓存行,③RR[]数组内每个数组元素以智能网卡的缓存行大小为单位对齐,避免缓存频繁地换入换出,从而避免访存开销,解决智能网卡访存性能差的问题。
(3)本发明第四步采用基于同步代理的轮询算法处理多个调度器对共享变量的访问,解决Q个核心同时访问共享变量server_id造成的冲突,在满足轮询算法的公平性的同时,大大减少了缓存行未命中的次数,避免了频繁的全局状态更新带来的缓存行换入/换出开销,解决了在智能网卡上使用锁进行多核同步造成的同步开销大的问题,缓解多核同步带来的性能瓶颈。
(4)本发明将负载均衡的功能卸载到多核智能网卡,采用本发明能节约经济成本。与数据中心使用的通用服务器相比较,智能网卡价格低廉。同时,智能网卡拥有独立的CPU核心和主存,能作为独立的计算机运行,与智能网卡所属的服务器运行的业务逻辑互不干涉。此外,智能网卡通过所属服务器的电源供电,不使用独立电源,因此,使用智能网卡作为服务器的替代来部署负载均衡器,能够改善能源效率,有效节省能源,节约硬件设备成本。
(5)本发明将负载均衡的功能卸载到多核智能网卡,采用本发明能释放服务器CPU周期。将负载均衡功能卸载到智能网卡后,负载均衡就由智能网卡CPU处理,服务器CPU可以去处理更重要的业务逻辑,从而提高企业的经济效益。
(6)本发明将负载均衡的功能卸载到多核智能网卡,采用本发明能消除智能网卡所属服务器PCIe性能瓶颈。随着DPDK等用户态数据平面的应用,限制网络密集型应用性能的主要因素已经不再是CPU核数,而是服务器上网卡数目和PCIe总线的带宽。将负载均衡功能卸载到智能网卡后,流量在邻近网络端口的智能网卡处即被处理,避免通过PCIe设备传输到智能网卡所属服务器上,消除了PCIe性能瓶颈。
附图说明
图1是本发明的总体流程图。
图2是本发明第一步构建的基于智能网卡的负载均衡系统的逻辑结构图。
图3是图2中智能网卡中第q个CPU核心上第q个调度器与同步代理、第q个接收队列、第q个发送队列的逻辑结构图。
图4是本发明第四步Q个调度决策模块和同步代理之间的“请求-响应”交互过程图。
具体实施方式
下面对照附图对本发明具体实施例进行说明
如图1所示,本发明包括以下步骤:
第一步,构建基于智能网卡的服务器间负载均衡系统:
基于智能网卡的服务器间负载系统如图2所示,由MM个客户端,一个主机服务器,NN个服务端组成。MM和NN为正整数。
客户端是发出数据包的机器。MM个客户端均与主机服务器相连,使用数据平面开发套件DPDK向主机服务器上的智能网卡发送数据包。DPDK版本为18.05。
NN个服务端均与主机服务器相连。NN个服务端使用DPDK接收来自MM个客户端,经由智能网卡转发的N个数据包,对客户端请求(一个请求由一个或多个数据包组成)进行响应。N为正整数。一个客户端可以发出多个数据包。
主机服务器与MM个客户端,NN个服务端均相连。主机服务器的PCIe接口插有智能网卡,智能网卡上运行着负载均衡器。
智能网卡包含两个网络端口,Q+1个CPU核心,Q+1块一级缓存,1块共享的三级缓存,Q为正整数,智能网卡的内存开辟有Q个接收队列和Q个发送队列。
智能网卡上的第一网络端口与MM个客户端、Q个接收队列相连,通过DPDK接收来自MM个客户端的N个数据包;将N个数据包按照RSS规则分发到Q个接收队列。
智能网卡上的第二网络端口与NN个服务端口、Q个发送队列相连,通过DPDK将从Q个发送队列接收的N个数据包分别发送到NN个服务端。
Q个接收队列和Q个发送队列均是Q块独立的内存区域,第q个接收队列和第q个发送队列均和第q个核心绑定,1≤q≤Q,Q个接收队列存储从第一网络端口接收到的N个数据包,第q个接收队列存储Gq个数据包(G1+G2+…+Gq+…+GQ=N)。
Q个发送队列共存储N个要发送到服务端的数据包,第q个发送队列存储要发送的、决策完成的Gq个数据包。
智能网卡的CPU核心除运行商用操作系统CentOS外,还运行负载均衡器。负载均衡器负责将接收到的N个数据包分发到NN个服务端,由1个同步代理和Q个调度器组成,且在智能网卡的内存中存储一张“server_id——IP地址和端口”的表。一个CPU核心(令为第0个CPU核心)运行同步代理,其他Q个CPU核心(令为第1个CPU核心~第Q个CPU核心)运行Q个调度器,第q个CPU核心运行第q个调度器,Q+1个CPU核心并行运行。
第q块一级缓存被第q个CPU核心独占访问,三级缓存被Q+1块共享访问。
“server_id——IP地址和端口”的表记录各个服务端的真实IP地址和端口,该表使用数组target[]存储,target[]的索引为服务端的编号server_id,一个server_id对应一个服务端,target[]中的每个元素包括两个字段,targer_ip和target_port,target_ip存储服务端的真实IP地址,target_port存储数据包要转发到的服务端端口,target[server_id]中存储着编号为server_id的服务端的IP地址和端口。
同步代理独占访问并托管共享资源,负责接收Q个调度器访问共享资源的请求,将Q个调度器发出的访问共享资源请求消息存储在请求消息数组RR[]中,RR[]中的第q个元素RR[q]存储第q个调度器发出的访问共享资源请求消息;第q块一级缓存上保存着RR[q],在第0块一级缓存,以及共享三级缓存上均保存着RR[]的副本,在第0块一级缓存上保存着共享资源。同步代理替调度器完成访问共享资源的任务,向发出请求的调度器返回共享资源的值。
RR[]有Q个元素,RR[q]中包含三种字段:flag字段、res_num字段和res字段。
flag:请求或响应标志,RR[q]中的flag等于pending时,表示第q个调度器已向同步代理发出访问共享资源的请求;RR[q]中的flag等于done时,表示同步代理已对请求作出响应;RR[q]中的flag等于NULL时,表示第q个调度器未发出访问共享资源的请求。flag字段单独占用一个缓存行,和数组元素中的其他字段隔离对齐。
res_num:调度器请求的共享资源(即共享变量)数量。RR[q]中的res_num为1时,表示第q个调度器向同步代理申请一个共享资源;RR[q]中的res_num为W时,表示第q个调度器向同步代理申请W个共享资源。
res:同步代理响应请求后,向申请共享资源的调度器返回的共享资源的值。RR[q]的res为d时,表示向第q个调度器返回共享资源的值为d。若res_num为W时,res的值为W个共享资源的值。
第q个调度器包含一个I/O处理模块(令为第q个I/O处理模块)和一个调度决策模块(令为第q个调度决策模块),1≤q≤Q。第q个I/O处理模块基于DPDK网络协议栈开发,包含一个输入单元(令为第q个输入单元)、一个输出单元(令为第q个输出单元)。
第q个输入单元与第q个接收队列、第q个调度决策模块相连。第q个输入单元从第q个接收队列取出Gq个数据包,对Gq个数据包的包头分别进行解析,将Gq个解析后的数据包传入第q个调度决策模块。
第q个调度决策模块与第q个输入单元、同步代理、第q个输出单元相连。第q个调度决策模块接收来自第q个输入单元的Gq个解析后的数据包,采用基于同步代理的轮询算法,串行为Gq个解析后的数据包决定服务端。对于第g个数据包,1≤g≤Gq,第q个调度决策模块向同步代理发出申请共享资源server_id的请求,从同步代理的获得server_id,将第g个解析后的数据包以及为第g个解析后的数据包选择的server_id传入到第q个输出单元。第q个调度决策模块串行做Gq次选择服务端决策,向同步代理发起Gq次申请访问server_id的请求,向第q个输出单元传入Gq个解析后的数据包和Gq个server_id。
第q个输出单元与第q个调度决策模块、第q个发送队列相连。第q个输出单元接收来自第q个调度决策模块完成决策的第g个解析后的数据包和server_id,将target[server_id]中的IP地址target_ip和端口target_port封装进第g个解析后的数据包的包头,将封装好的第g个解析后的数据包放入发送队列。
第二步,对智能网卡上的负载均衡器进行初始化,方法是:
2.1开启智能网卡上的RSS功能。
2.2初始化RR[]数组大小为Q,初始化RR[]所有元素的flag字段为NULL,初始化RR[]所有元素的rem_num字段为1,初始化RR[]所有元素的res字段返回的值为server_id的值,初始化server_id的值为0,即从第0个服务端开始,轮询选择服务端。
2.3智能网卡并行运行Q+1个CPU核心,令CPU核心的id为0,1,2…,Q。设置智能网卡的第0个CPU核心运行同步代理,第1个CPU核心~第Q个CPU核心运行调度器。
第三步,智能网卡的第一网络端口接收来自MM个客户端的N个数据包,方法为:
第一网络端口同时接收来自MM个客户端的N个请求处理的数据包,通过RSS功能将N个数据包分发到Q个接收队列,其中第q个接收队列接收并存储Gq个数据包,G1+G2+…+Gq+…+GQ=N。
第四步,第1个调度器、第2个调度器、…、第q个调度器、…、第Q个调度器和同步代理并行运行,对来自MM个客户端的N个数据包进行接收、解析、调度决策、封装、发送,第q个调度器串行处理Gq个数据包,方法是:
Q个输入单元并行工作,从Q个接收队列读取并解析N个数据包,每个输入单元的工作流程相同,第q个输入单元按照4.1的流程串行解析Gq个数据包;同时,Q个调度决策模块和同步代理并行配合对N个数据包进行调度:Q个调度决策模块采用基于同步代理的轮询算法共向同步代理发送N个数据包申请共享资源server_id的请求,第q个调度决策模块按4.2的流程为Gq个数据包申请共享资源server_id,第q个调度决策模块串行向同步代理发送Gq个数据包申请共享资源server_id的请求;同时,同步代理按4.3的流程对来自Q个调度决策模块的N个申请共享资源server_id的请求进行调度,确定向Q个调度决策模块返回的server_id的值,决定每个数据包该发往哪个服务端;同时,Q个输出单元对从Q个调度决策模块接收的N个数据包封装处理,其中第q个输出单元按4.4的流程封装处理Gq个完成调度决策的数据包。
4.1Q个输入单元并行从Q个接收队列读取并解析N个数据包,第q个输入单元按4.1.1-4.1.5的流程接收并解析Gq个数据包,将Gq个数据包和Gq个数据包的虚拟IP和虚拟端口的内存地址发送到第q个调度决策模块:
4.1.1令g=1;
4.1.2第q个输入单元访问第q个接收队列,取第g个数据包,找到第g个数据包实际报文数据data存储区域的地址;
4.1.3第q个输入单元对第g个数据包的包头进行解析,得到第g个数据包的目的IP(虚拟IP)和目的端口(虚拟端口)的内存地址。
4.1.4第q个输入单元将第g个数据包的虚拟IP和虚拟端口的内存地址和第g个数据包发送给第q个调度决策模块。
4.1.5令g=g+1,若g≤Gq,转4.1.2;若g>Gq,转第三步,等待第一网络端口接收来自MM个客户端的下一批数据包。
4.2Q个调度决策模块并行对N个数据包进行调度,第q个调度决策模块按4.2.1-4.2.4的流程为从第q个输入单元接收的Gq个数据包申请共享资源server_id,确定这Gq数据包分别发往哪些服务端,方法如图3所示,为:
4.2.1令g=1;
4.2.2第q个调度决策模块监控是否从第q个输入单元接收到解析完成的第g个数据包和解析第g个数据包获得的虚拟IP和虚拟端口的内存地址,若接收到,转4.2.3;若未接收到,转4.2.2继续监控。
4.2.3第q个调度决策模块对第g个数据包进行调度,方法是:
4.2.3.1第q个调度决策模块为第g个数据包向同步代理申请访问共享资源server_id:第q个调度决策模块将申请访问共享资源的消息存储到RR[q]中,通过RR[q]将这条消息传输给同步代理,RR[q]的flag字段设置为pending,其余字段维持初始化状态:rem_num字段为1,res字段的值为server_id的值。此时,第q个CPU核心发送第q块一级缓存中RR[q]的flag字段所在缓存行的总线更新信号(即缓存一致性协议中的BusUpgr信号,其他CPU核心收到该信号,需无效在各自私有的一级缓存上的这条缓存行)到总线上,然后修改在第q块一级缓存中flag所在缓存行的数据,缓存行状态被修改为Modified(表明该缓存行的数据已被修改,数据有效)。
4.2.3.2第q个调度决策模块监测RR[q]的flag字段的值,判断同步代理是否响应了请求。若RR[q]的flag字段为pending,转4.2.3.2步继续监测;若检测到RR[q]的flag字段为done,转4.2.3.3步。
4.2.3.3此时第q个调度决策模块监测到RR[q]的flag字段变为done,表示同步代理响应了第q个调度决策模块申请访问server_id的值,并返回了server_id的值。第q个调度决策模块从RR[q]的res字段得到server_id的值,将完成调度决策的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址输出到第q个输出单元;
4.2.4令g=g+1,若g≤Gq,转4.2.2;若g>Gq,转第三步;4.3同步代理按4.3.1-4.3.6的流程接收来自Q个调度决策模块发出的N次申请共享资源server_id的请求,确定向Q个调度决策模块返回的server_id的值,实现为N个从客户端接收的数据包分配服务端的目的,方法如图3所示,为:
4.3.1令q=1;
4.3.2初始化g1=1,g2=1,…,gq=1,…,gQ=1,gq为第q个调度决策模块接收到的数据包的序号。
4.3.3同步代理判断第0个CPU核心上的第0块一级缓存中RR[q]的flag字段所在缓存行状态是否为Shared(表示缓存行数据有效且未被修改),若为Shared,表示第q个调度决策模块没有发出申请共享资源请求,转4.3.6步去轮询下一个调度决策模块。若同步代理监测到第q个CPU核心发送了第q块一级缓存中flag字段的总线更新信号,表示第q个调度决策模块发出了申请共享资源的请求,将第0块一级缓存的flag字段所在缓存行状态从Shared更新为Invalid(即令该行缓存行数据无效),转4.3.4步处理申请共享资源的请求。
4.3.4此时第0块一级缓存中的flag字段值无效,同步代理触发第0块一级缓存未命中,第0个CPU核心更新在第0块一级缓存中flag字段的值:运行同步代理的第0个CPU核心发送总线写信号即BusRdX信号到总线上。第q个CPU核心收到BusRdX信号后,将RR[q]的flag字段从第q块一级缓存写回共享的三级缓存,将三级缓存上的数组元素RR[q]的flag值更新为pending。第0个CPU核心从三级缓存中加载被修改后的RR[q]的flag字段到第0块一级缓存。
4.3.5此时同步代理从第0块一级缓存读取到flag字段的值为pending,响应第q个调度决策模块为第gq数据包发起的申请共享资源server_id的请求,方法为:
4.3.5.1同步代理从第0块一级缓存上读取server_id的值,令server_id=(server_id+1)%NN,向申请访问server_id的第q个调度决策模块返回server_id的值。
4.3.5.2同步代理完成申请server_id的请求,令第0块一级缓存中RR[q]的flag的值为done。
4.3.5.3令gq=gq+1,若gq≤Gq,转4.3.6步轮询下一个调度决策模块;若gq>Gq,令gq=1,转4.3.6步轮询下一个调度决策模块。
4.3.6令q=q+1,若q≤Q,转4.3.3,若q>Q,令q=1,转4.3.3。
4.4Q个输出单元并行对从Q个调度决策模块接收的N个数据包进行封装处理,第q个输出单元按4.4.1-4.4.6的流程串行处理来自第q个调度决策模块的Gq个调度完成的数据包,方法为:
4.4.1令g=1;
4.4.2第q个输出单元监控是否接收到来自第q个调度决策模块的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址,若接收到,转4.4.3,若未接收到,转4.4.2继续监控。
4.4.3第q个输出单元以server_id作为索引,在“server_id——IP地址和端口”表的元素target[server_id]中找到被选中的服务端的IP地址target_ip和端口target_port,将被选中的服务端的IP地址target_ip和端口target_port写入到解析获得的第g个数据包包头的虚拟IP和虚拟端口的内存地址处,完成对第g个数据包的包头封装,得到封装好的第g个数据包。
4.4.4第q个输出单元将封装好的第g个数据包写入第q个发送队列。
4.4.5智能网卡的第二网络端口将第q个发送队列中的第g个数据包转发到target_ip对应的服务端。
4.4.6令g=g+1,若g≤Gq,转4.4.2;若g>Gq,转第三步。
为验证本发明的效果,搭建以下实验环境:两台装有Centos7操作系统的8核服务器,一台8核服务器作为客户端,一台8核服务器作为服务端;另有一台装有Centos7操作系统的96核服务器作为主机服务器,主机服务器上插有一块装有Centos7操作系统的16(即Q+1=16)核智能网卡,智能网卡采用Mellanox公司的Bluefield-MBF1L516A-CSCAT。
设置参数MM=10,NN=64。客户端上安装DPDK发包工具Pktgen,发包速率为每秒30M个数据包(30Mpps),通过发包工具模拟10台(MM=10)客户端向智能网卡或智能网卡所属主机服务器发送数据包;智能网卡上安装使用本发明进行优化的负载均衡器,智能网卡和所属服务器模拟向64个服务端转发数据包。
表1是本发明采用的智能网卡和若采用背景技术在通用服务器上部署基于软件实现的负载均衡器SLBs时采用的服务器的价格,以及本发明和背景技术所述在通用服务器上部署基于软件实现的负载均衡器SLBs方法最大转发吞吐量的对比。转发吞吐量为负载均衡器每秒转发的数据包个数。
设备 | 智能网卡 | 服务器 | 比率 |
单价 | 2万 | 20万 | 0.1 |
最大转发吞吐量 | 3.76Mpps | 4.5Mpps | 0.83 |
表1
根据表1显示,智能网卡价格是服务器价格的0.1倍的情况下,采用本发明进行负载均衡的最大转发吞吐量和采用背景技术所述在通用服务器上部署基于软件实现的负载均衡器SLBs的最大转发吞吐量仅相差0.83倍,用少量的吞吐下降换来了巨大的成本节约;除此之外,在通用服务器上部署基于软件实现的负载均衡器SLBs时采用的服务器上,仅用两个核心就达到了最大转发性能,正如背景技术所述,由于服务器的PCIe性能瓶颈,就算增加负载均衡使用的核数也无法提高负载均衡的转发性能,而服务器上其它CPU核心却处于空闲状态,大大浪费了CPU计算资源。
通过以上的测试比较,验证了本发明的可行性和实用价值。
Claims (6)
1.一种基于智能网卡的服务器间负载均衡性能优化方法,其特征在于包括以下步骤:
第一步,构建基于智能网卡的服务器间负载均衡系统:
基于智能网卡的服务器间负载系统由MM个客户端,一个主机服务器,NN个服务端组成;MM和NN为正整数;
客户端是发出数据包的机器;MM个客户端均与主机服务器相连,使用数据平面开发套件DPDK向主机服务器上的智能网卡发送数据包;
NN个服务端均与主机服务器相连;NN个服务端使用DPDK接收来自MM个客户端,经由智能网卡转发的N个数据包,对客户端请求进行响应;N为正整数;一个客户端可以发出多个数据包;
主机服务器与MM个客户端,NN个服务端均相连;主机服务器的PCIe接口插有智能网卡,智能网卡上运行着负载均衡器;
智能网卡包含两个网络端口,Q+1个CPU核心,Q+1块一级缓存,1块共享的三级缓存,Q为正整数,智能网卡的内存开辟有Q个接收队列和Q个发送队列;
智能网卡上的第一网络端口与MM个客户端、Q个接收队列相连,通过DPDK接收来自MM个客户端的N个数据包;将N个数据包按照接收端扩展规则即RSS规则分发到Q个接收队列;
智能网卡上的第二网络端口与NN个服务端口、Q个发送队列相连,通过DPDK将从Q个发送队列接收的N个数据包分别发送到NN个服务端;
Q个接收队列和Q个发送队列均是Q块独立的内存区域,第q个接收队列和第q个发送队列均和第q个核心绑定,1≤q≤Q,Q个接收队列存储从第一网络端口接收到的N个数据包,第q个接收队列存储Gq个数据包,G1+G2+…+Gq+…+GQ=N;
Q个发送队列共存储N个要发送到服务端的数据包,第q个发送队列存储要发送的、决策完成的Gq个数据包;
智能网卡的CPU核心除运行操作系统外,还运行负载均衡器;负载均衡器负责将接收到的N个数据包分发到NN个服务端,由1个同步代理和Q个调度器组成,且在智能网卡的内存中存储一张“server_id——IP地址和端口”的表;第0个CPU核心运行同步代理,其他Q个CPU核心即第1个CPU核心~第Q个CPU核心运行Q个调度器,第q个CPU核心运行第q个调度器,Q+1个CPU核心并行运行;
第q块一级缓存被第q个CPU核心独占访问,三级缓存被Q+1块共享访问;
“server_id——IP地址和端口”的表记录各个服务端的真实IP地址和端口,该表使用数组target[]存储,target[]的索引为服务端的编号server_id,一个server_id对应一个服务端,target[]中的每个元素包括两个字段,targer_ip和target_port,target_ip存储服务端的真实IP地址,target_port存储数据包要转发到的服务端端口,target[server_id]中存储着编号为server_id的服务端的IP地址和端口;
同步代理独占访问并托管共享资源,负责接收Q个调度器访问共享资源的请求,将Q个调度器发出的访问共享资源请求消息存储在请求消息数组RR[]中,RR[]中的第q个元素RR[q]存储第q个调度器发出的访问共享资源请求消息;第q块一级缓存上保存着RR[q],在第0块一级缓存,以及共享三级缓存上均保存着RR[]的副本,在第0块一级缓存上保存着共享资源;同步代理替调度器完成访问共享资源的任务,向发出请求的调度器返回共享资源的值;
RR[]有Q个元素,RR[q]中包含三种字段:flag字段、res_num字段和res字段;
flag:请求或响应标志,RR[q]中的flag等于pending时,表示第q个调度器已向同步代理发出访问共享资源的请求;RR[q]中的flag等于done时,表示同步代理已对请求作出响应;RR[q]中的flag等于NULL时,表示第q个调度器未发出访问共享资源的请求;flag字段单独占用一个缓存行,和数组元素中的其他字段隔离对齐;
res_num:调度器请求的共享资源数量;RR[q]中的res_num为1时,表示第q个调度器向同步代理申请一个共享资源;RR[q]中的res_num为W时,表示第q个调度器向同步代理申请W个共享资源;
res:同步代理响应请求后,向申请共享资源的调度器返回的共享资源的值;RR[q]的res为d时,表示向第q个调度器返回共享资源的值为d;若res_num为W时,res的值为W个共享资源的值;
第q个调度器包含第q个I/O处理模块和第q个调度决策模块,1≤q≤Q;第q个I/O处理模块基于DPDK网络协议栈开发,包含第q个输入单元、第q个输出单元;
第q个输入单元与第q个接收队列、第q个调度决策模块相连;第q个输入单元从第q个接收队列取出Gq个数据包,对Gq个数据包的包头分别进行解析,将Gq个解析后的数据包传入第q个调度决策模块;
第q个调度决策模块与第q个输入单元、同步代理、第q个输出单元相连;第q个调度决策模块接收来自第q个输入单元的Gq个解析后的数据包,采用基于同步代理的轮询算法,串行为Gq个解析后的数据包决定服务端;对于第g个数据包,1≤g≤Gq,第q个调度决策模块向同步代理发出申请共享资源server_id的请求,从同步代理的获得server_id,将第g个解析后的数据包以及为第g个解析后的数据包选择的server_id传入到第q个输出单元;第q个调度决策模块串行做Gq次选择服务端决策,向同步代理发起Gq次申请访问server_id的请求,向第q个输出单元传入Gq个解析后的数据包和Gq个server_id;
第q个输出单元与第q个调度决策模块、第q个发送队列相连;第q个输出单元接收来自第q个调度决策模块完成决策的第g个解析后的数据包和server_id,将target[server_id]中的IP地址target_ip和端口target_port封装进第g个解析后的数据包的包头,将封装好的第g个解析后的数据包放入发送队列;
第二步,对智能网卡上的负载均衡器进行初始化,方法是:
2.1开启智能网卡上的RSS功能;
2.2初始化RR[]数组大小为Q,初始化RR[]所有元素的flag字段为NULL,初始化RR[]所有元素的rem_num字段为1,初始化RR[]所有元素的res字段返回的值为server_id的值,初始化server_id的值为0,即从第0个服务端开始,轮询选择服务端;
2.3智能网卡并行运行Q+1个CPU核心,令CPU核心的id为0,1,2…,Q;设置智能网卡的第0个CPU核心运行同步代理,第1个CPU核心~第Q个CPU核心运行调度器;
第三步,智能网卡的第一网络端口接收来自MM个客户端的N个数据包,方法为:第一网络端口同时接收来自MM个客户端的N个请求处理的数据包,通过RSS功能将N个数据包分发到Q个接收队列,其中第q个接收队列接收并存储Gq个数据包;
第四步,第1个调度器、第2个调度器、…、第q个调度器、…、第Q个调度器和同步代理并行运行,对来自MM个客户端的N个数据包进行接收、解析、调度决策、封装、发送,第q个调度器串行处理Gq个数据包,方法是:
Q个输入单元并行工作,从Q个接收队列读取并解析N个数据包,每个输入单元的工作流程相同,第q个输入单元按照4.1的流程串行解析Gq个数据包;同时,Q个调度决策模块和同步代理并行配合对N个数据包进行调度:Q个调度决策模块采用基于同步代理的轮询算法共向同步代理发送N个数据包申请共享资源server_id的请求,第q个调度决策模块按4.2的流程为Gq个数据包申请共享资源server_id,第q个调度决策模块串行向同步代理发送Gq个数据包申请共享资源server_id的请求;同时,同步代理按4.3的流程对来自Q个调度决策模块的N个申请共享资源server_id的请求进行调度,确定向Q个调度决策模块返回的server_id的值,决定每个数据包该发往哪个服务端;同时,Q个输出单元对从Q个调度决策模块接收的N个数据包封装处理,其中第q个输出单元按4.4的流程封装处理Gq个完成调度决策的数据包;
4.1 Q个输入单元并行从Q个接收队列读取并解析N个数据包,其中第q个输入单元接收并解析Gq个数据包,得到Gq个数据包的目的IP即虚拟IP和目的端口即虚拟端口的内存地址,将Gq个数据包和Gq个数据包的虚拟IP和虚拟端口的内存地址发送到第q个调度决策模块,转第三步;
4.2 Q个调度决策模块并行对N个数据包进行调度,第q个调度决策模块按4.2.1-4.2.4的流程为从第q个输入单元接收的Gq个数据包申请共享资源server_id,确定这Gq数据包分别发往哪些服务端,方法为:
4.2.1令g=1;
4.2.2第q个调度决策模块监控是否从第q个输入单元接收到解析完成的第g个数据包和解析第g个数据包获得的虚拟IP和虚拟端口的内存地址,若接收到,转4.2.3;若未接收到,转4.2.2继续监控;
4.2.3第q个调度决策模块对第g个数据包进行调度,向同步代理申请访问共享资源server_id,若监测到同步代理响应了第q个调度决策模块申请访问server_id的值并返回了server_id的值,第q个调度决策模块将完成调度决策的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址输出到第q个输出单元;
4.2.4令g=g+1,若g≤Gq,转4.2.2;若g>Gq,转第三步;
4.3同步代理按4.3.1-4.3.6的流程接收来自Q个调度决策模块发出的N次申请共享资源server_id的请求,确定向Q个调度决策模块返回的server_id的值,方法为:
4.3.1令q=1;
4.3.2初始化g1=1,g2=1,…,gq=1,…,gQ=1,gq为第q个调度决策模块接收到的数据包的序号;
4.3.3同步代理判断第0个CPU核心上的第0块一级缓存中RR[q]的flag字段所在缓存行状态是否为Shared,表示缓存行数据有效且未被修改,若为Shared,表示第q个调度决策模块没有发出申请共享资源请求,转4.3.6步去轮询下一个调度决策模块;若同步代理监测到第q个CPU核心发送了第q块一级缓存中flag字段的总线更新信号,表示第q个调度决策模块发出了申请共享资源的请求,将第0块一级缓存的flag字段所在缓存行状态从Shared更新为Invalid即令该行缓存行数据无效,转4.3.4步处理申请共享资源的请求;
4.3.4此时第0块一级缓存中的flag字段值无效,同步代理触发第0块一级缓存未命中,第0个CPU核心更新在第0块一级缓存中flag字段的值:运行同步代理的第0个CPU核心发送总线写信号到总线上;第q个CPU核心收到BusRdX信号后,将RR[q]的flag字段从第q块一级缓存写回共享的三级缓存,将三级缓存上的数组元素RR[q]的flag值更新为pending;第0个CPU核心从三级缓存中加载被修改后的RR[q]的flag字段到第0块一级缓存;
4.3.5此时同步代理从第0块一级缓存读取到flag字段的值为pending,响应第q个调度决策模块为第gq数据包发起的申请共享资源server_id的请求,方法为:
4.3.5.1同步代理从第0块一级缓存上读取server_id的值,令server_id=(server_id+1)%NN,向申请访问server_id的第q个调度决策模块返回server_id的值;
4.3.5.2同步代理完成申请server_id的请求,令第0块一级缓存中RR[q]的flag的值为done;
4.3.5.3令gq=gq+1,若gq≤Gq,转4.3.6;若gq>Gq,令gq=1,转4.3.6;
4.3.6令q=q+1,若q≤Q,转4.3.3,若q>Q,令q=1,转4.3.3;
4.4 Q个输出单元并行对从Q个调度决策模块接收的N个数据包进行封装处理,第q个输出单元按4.4.1-4.4.6的流程串行处理来自第q个调度决策模块的Gq个调度完成的数据包,方法为:
4.4.1令g=1;
4.4.2第q个输出单元监控是否接收到来自第q个调度决策模块的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址,若接收到,转4.4.3,若未接收到,转4.4.2继续监控;
4.4.3第q个输出单元以server_id作为索引,在“server_id——IP地址和端口”表的元素target[server_id]中找到被选中的服务端的IP地址target_ip和端口target_port,将被选中的服务端的IP地址target_ip和端口target_port写入到解析获得的第g个数据包包头的虚拟IP和虚拟端口的内存地址处,完成对第g个数据包的包头封装,得到封装好的第g个数据包;
4.4.4第q个输出单元将封装好的第g个数据包写入第q个发送队列;
4.4.5智能网卡的第二网络端口将第q个发送队列中的第g个数据包转发到target_ip对应的服务端;
4.4.6令g=g+1,若g≤Gq,转4.4.2;若g>Gq,转第三步。
2.如权利要求1所述的一种基于智能网卡的服务器间负载均衡性能优化方法,其特征在于所述数据平面开发套件DPDK版本要求18.05及以上。
3.如权利要求1所述的一种基于智能网卡的服务器间负载均衡性能优化方法,其特征在于所述共享资源是被多个CPU核心共享访问的变量。
4.如权利要求1所述的一种基于智能网卡的服务器间负载均衡性能优化方法,其特征在于4.1步所述第q个输入单元接收并解析Gq个数据包,将Gq个数据包和Gq个数据包的虚拟IP和虚拟端口的内存地址发送到第q个调度决策模块的方法是:
4.1.1令g=1;
4.1.2第q个输入单元访问第q个接收队列,取第g个数据包,找到第g个数据包实际报文数据data存储区域的地址;
4.1.3第q个输入单元对第g个数据包的包头进行解析,得到第g个数据包的目的IP即虚拟IP和目的端口即虚拟端口的内存地址;
4.1.4第q个输入单元将第g个数据包以及第g个数据包的虚拟IP和虚拟端口的内存地址发送给第q个调度决策模块;
4.1.5令g=g+1,若g≤Gq,转4.1.2;若g>Gq,表示这一轮Gq数据包处理完毕。
5.如权利要求1所述的一种基于智能网卡的服务器间负载均衡性能优化方法,其特征在于4.2.3步所述第q个调度决策模块对第g个数据包进行调度的方法是:
4.2.3.1第q个调度决策模块为第g个数据包向同步代理申请访问共享资源server_id:第q个调度决策模块将申请访问共享资源的消息存储到RR[q]中,通过RR[q]将这条消息传输给同步代理,RR[q]的flag字段设置为pending,其余字段维持初始化状态:rem_num字段为1,res字段的值为server_id的值;此时,第q个CPU核心发送第q块一级缓存中RR[q]的flag字段所在缓存行的总线更新信号到总线上,然后修改在第q块一级缓存中flag所在缓存行的数据,缓存行状态被修改为Modified,表明该缓存行的数据已被修改,数据有效;
4.2.3.2第q个调度决策模块监测RR[q]的flag字段的值,判断同步代理是否响应了请求;若RR[q]的flag字段为pending,转4.2.3.2步继续监测;若检测到RR[q]的flag字段为done,转4.2.3.3步;
4.2.3.3此时第q个调度决策模块监测到RR[q]的flag字段变为done,表示同步代理响应了第q个调度决策模块申请访问server_id的值,并返回了server_id的值;第q个调度决策模块从RR[q]的res字段得到server_id的值,将完成调度决策的第g个数据包、为第g个数据包决定的server_id和在第q个输入单元解析获得的虚拟IP和虚拟端口的内存地址输出到第q个输出单元。
6.如权利要求5所述的一种基于智能网卡的服务器间负载均衡性能优化方法,其特征在于4.2.3.1步所述总线更新信号指缓存一致性协议中的BusUpgr信号,其他CPU核心收到该信号时,无效在各自私有的一级缓存上的这条缓存行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210218905.0A CN114598746B (zh) | 2022-03-07 | 2022-03-07 | 基于智能网卡的服务器间负载均衡性能优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210218905.0A CN114598746B (zh) | 2022-03-07 | 2022-03-07 | 基于智能网卡的服务器间负载均衡性能优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114598746A true CN114598746A (zh) | 2022-06-07 |
CN114598746B CN114598746B (zh) | 2022-10-14 |
Family
ID=81807770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210218905.0A Active CN114598746B (zh) | 2022-03-07 | 2022-03-07 | 基于智能网卡的服务器间负载均衡性能优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114598746B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431356A (zh) * | 2023-06-13 | 2023-07-14 | 中国人民解放军军事科学院系统工程研究院 | 一种基于智能网卡的云网络缓存加速方法与系统 |
CN117194172A (zh) * | 2023-10-11 | 2023-12-08 | 珠海世宁达科技有限公司 | 一种网卡供电控制方法及相关装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109787912A (zh) * | 2019-03-04 | 2019-05-21 | 南京邮电大学 | 一种dpdk环境下基于nat的负载均衡方法 |
CN111522653A (zh) * | 2020-02-07 | 2020-08-11 | 华中科技大学 | 基于容器的网络功能虚拟化平台 |
CN111984415A (zh) * | 2020-08-24 | 2020-11-24 | 北京亚鸿世纪科技发展有限公司 | 一种基于流水线转发模型的负载均衡方法及装置 |
CN112637080A (zh) * | 2020-12-14 | 2021-04-09 | 中国科学院声学研究所 | 一种基于fpga的负载均衡处理系统 |
CN113157447A (zh) * | 2021-04-13 | 2021-07-23 | 中南大学 | 一种基于智能网卡的rpc负载均衡方法 |
US20210326177A1 (en) * | 2021-06-26 | 2021-10-21 | Intel Corporation | Queue scaling based, at least, in part, on processing load |
CN114006863A (zh) * | 2021-11-02 | 2022-02-01 | 北京科东电力控制系统有限责任公司 | 一种多核负载均衡协同处理方法、装置及存储介质 |
-
2022
- 2022-03-07 CN CN202210218905.0A patent/CN114598746B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109787912A (zh) * | 2019-03-04 | 2019-05-21 | 南京邮电大学 | 一种dpdk环境下基于nat的负载均衡方法 |
CN111522653A (zh) * | 2020-02-07 | 2020-08-11 | 华中科技大学 | 基于容器的网络功能虚拟化平台 |
CN111984415A (zh) * | 2020-08-24 | 2020-11-24 | 北京亚鸿世纪科技发展有限公司 | 一种基于流水线转发模型的负载均衡方法及装置 |
CN112637080A (zh) * | 2020-12-14 | 2021-04-09 | 中国科学院声学研究所 | 一种基于fpga的负载均衡处理系统 |
CN113157447A (zh) * | 2021-04-13 | 2021-07-23 | 中南大学 | 一种基于智能网卡的rpc负载均衡方法 |
US20210326177A1 (en) * | 2021-06-26 | 2021-10-21 | Intel Corporation | Queue scaling based, at least, in part, on processing load |
CN114006863A (zh) * | 2021-11-02 | 2022-02-01 | 北京科东电力控制系统有限责任公司 | 一种多核负载均衡协同处理方法、装置及存储介质 |
Non-Patent Citations (3)
Title |
---|
YANG XU等: "Blockchain-Based Trustworthy Energy Dispatching Approach for High Renewable Energy Penetrated Power Systems", 《IEEE INTERNET OF THINGS JOURNAL》 * |
刘敬玲等: "数据中心负载均衡方法研究综述", 《软件学报》 * |
李力等: "数据中心网络四层负载均衡技术综述", 《计算机工程与科学》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431356A (zh) * | 2023-06-13 | 2023-07-14 | 中国人民解放军军事科学院系统工程研究院 | 一种基于智能网卡的云网络缓存加速方法与系统 |
CN116431356B (zh) * | 2023-06-13 | 2023-08-22 | 中国人民解放军军事科学院系统工程研究院 | 一种基于智能网卡的云网络缓存加速方法与系统 |
CN117194172A (zh) * | 2023-10-11 | 2023-12-08 | 珠海世宁达科技有限公司 | 一种网卡供电控制方法及相关装置 |
CN117194172B (zh) * | 2023-10-11 | 2024-03-22 | 珠海世宁达科技有限公司 | 一种网卡供电控制方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114598746B (zh) | 2022-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9935899B2 (en) | Server switch integration in a virtualized system | |
US10325343B1 (en) | Topology aware grouping and provisioning of GPU resources in GPU-as-a-Service platform | |
US5991797A (en) | Method for directing I/O transactions between an I/O device and a memory | |
CN114598746B (zh) | 基于智能网卡的服务器间负载均衡性能优化方法 | |
EP2406723B1 (en) | Scalable interface for connecting multiple computer systems which performs parallel mpi header matching | |
JP6676027B2 (ja) | ネットワークプロセッサにおけるマルチコア相互接続 | |
US20160132541A1 (en) | Efficient implementations for mapreduce systems | |
CN107690622A (zh) | 实现硬件加速处理的方法、设备和系统 | |
CN110308984B (zh) | 一种用于处理地理分布式数据的跨集群计算系统 | |
TW201539190A (zh) | 用於多節點系統中的記憶體分配的方法和裝置 | |
CN115664892B (zh) | 虚拟监控器下Linux虚拟网卡的实现方法 | |
CN113157447A (zh) | 一种基于智能网卡的rpc负载均衡方法 | |
CN110347626B (zh) | 服务器系统 | |
CN114095251A (zh) | 一种基于dpdk与vpp的sslvpn实现方法 | |
CN111078516A (zh) | 分布式性能测试方法、装置、电子设备 | |
CN111404931A (zh) | 一种基于持久性内存的远程数据传输方法 | |
CN115686836A (zh) | 一种安装有加速器的卸载卡 | |
CN115639947A (zh) | 数据写入方法、数据读取方法、装置、设备、系统及介质 | |
Tajbakhsh et al. | Accelerator-aware in-network load balancing for improved application performance | |
US7929439B1 (en) | Multiple network interface core apparatus and method | |
Narayanaswamy et al. | An analysis of 10-gigabit ethernet protocol stacks in multicore environments | |
CN116755902A (zh) | 数据通信方法及装置、处理系统、电子设备、存储介质 | |
Yang et al. | SwitchAgg: A further step towards in-network computing | |
Camarda et al. | Performance evaluation of TCP/IP protocol implementations in end systems | |
WO2023124304A1 (zh) | 芯片的缓存系统、数据处理方法、设备、存储介质及芯片 |
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 |