APP下载

基于DPDK的流量动态负载均衡方法

2017-09-18李凯叶麟余翔湛胡阳

智能计算机与应用 2017年4期
关键词:负载均衡

李凯 叶麟 余翔湛 胡阳

摘要: 随着互联网技术的不断发展,数据中心网络以及国家骨干网络的流量规模也在不断增长,大规模的流量以及无用的恶意流量对多核处理器的负载均衡有着很大的影响,所以对于多核处理器来说,负载均衡是一个亟待解决的问题。本文提出了一种基于DPDK平台的动态多重Hash的技术来更好地解决在多核处理器中流量分配不均衡的问题。文章中对现有的RSS等相关技术进行分析,通过采用对称RSS技术与动态负载相关技术相结合的方法,将捕获的数据包发配到不同的收包队列,实现处理器多核间的负载均衡。

关键词: DPDK; 负载均衡; 多核处理

中图分类号:TP393

文献标志码:A

文章编号:2095-2163(2017)04-0085-06

0引言

随着互联网技术的不断发展,网络中的流量规模日益增大,传输速度也在不断提高,流量的负载均衡问题成为了限制诸多网络服务的瓶颈,为了应对网络中数据包的高速传输,Intel针对X86架构设计了高性能的数据包处理框架DPDK,DPDK通过对大页技术、零拷贝技术、 网卡队列技术以及CPU的亲和性等成熟技术的开发运用,以及对数据包处理的过程引入了效能优化,相比Linux系统的数据包处理性能提高了数倍。DPDK框架主要应用在多核处理器系统对数据包的处理流程中,在多核处理器的负载均衡方面,传统的负载均衡算法主要有轮询、哈希散列、响应速度等,DPDK框架在负载均衡上采用了RSS技术,但是单纯地采用RSS技术对于高性能会话连接的处理以及特殊情况出现Hash碰撞这些问题在技术探讨中却仍然呈现出一定的缺陷与不足。基于此,本文即研究提出了一种基于DPDK平台的动态多重Hash的技术,通过对原有的RSS进行修改以及结合动态调整的方法来更好地解决在多核处理器中流量分配不均衡的问题。

1相关工作

1.1RSS技术

RSS(Receive Side Scaling)是与底层硬件相关联,在多核处理器收到数据报文后能够在多核之间进行高速转发的网卡驱动技术。该技术需要通过相关的硬件网卡支持展开哈希值的计算,根据哈希值的不同将收到的数据报文发送到不同的收发队列当中,由于CPU的亲核性,Linux内核将不同队列的报文映射到不同的处理器核中。同时,考虑到DPDK支持网卡的多队列功能,因而可以比较容易地给特定应用指定接收(RX)或发送(TX)队列。

[JP2]通俗地讲,RSS是利用特定的报文字段值进行哈希计算得出哈希值,再通过得出的哈希值将数据报文送往不同的队列,网卡会根据数据包的不同类型确定其特定的字段信息,如表1所示。例如IPV4 TCP的特定字段是由(S-IP、D-IP、S-Port、D-port)四元组构成,此外,DPDK还可以根据需要采用数据包中的其他特定字段满足不同的需求。并且图1还进一步阐释了通过Hash计算得到的哈希值与队列索引之间的关系。

1.2对称RSS技术

对称RSS是指在网卡驱动开启RSS功能后相同连接的双向数据报文能够分配到多核处理器的同一个核中,因为在不同核中共享连接信息会产生死锁的现象,即使得对称RSS对于保存连接信息的网络应用在减少性能开销上获得了大幅提升。

[JP2]RSS采用的是Toeplitz Hash算法,此算法需要2個输入变量:数据报文中的五元组信息以及默认的Hash key。DPDK网卡驱动层采用的Hash key是Microsoft推荐的,对于相同连接的双向数据报文经过哈希后得到的Hash值是不同的,Hash值的不同会出现2个方向的数据报文分配到不同的接收队列,通过不同的处理器核心进行处理。对于如何生成对称的RSS,文献[1]对RSS原有的Hash key融入了一定的修改,并证明这组Hash key可以用来实现对称RSS。原有的Hash key以及论文中提到的Hash key值分别如图2和图3所示。

1.3技术分析

研究分析可得,RSS技术的缺点是一些网络应用处理的设备中,仅仅使用RSS技术会影响处理性能,例如电信转发设备,对一个网络连接的双向流处理的方式是相近的,所以希望在多核处理器的同一个核上对存在对称信息的数据报文进行处理,比较有代表性的应用有网络防火墙、服务质量保证。若在不同的核上处理同一个流上的双向信息,就会出现不同核研发设定数据同步的问题,这就会产生处理器的多余开销,降低处理器的性能。

相对DPDK平台的RSS技术改进的对称RSS技术虽然解决了同一个流的对向数据报文在不同核上有效处理的问题,但是对于出现Hash碰撞的情况以及大规模相同连接的流量时,还是会出现多核处理器某一个核上的负载过重,甚或负载不均衡的情况。

[JP2]综上可得,当网络流量出现比较单一极端的情况下,仅仅利用静态的哈希技术是无法满足对数据报文处理的需求的,也就是将出现单核负载过重的情形,从而降低CPU的处理效率。[JP]

2框架设计及实验分析

2.1负载均衡框架

DPDK 对于数据包的处理主要设计推出了2种框架,分别是: run-to-completion(运行至终结,简称RTC)模型和Pipeline(流水线)模型。在此,将给出各自研究阐释如下。

[JP2]首先,Pipeline模型能够将处理器密集的操作集中在一个核上执行,将I/O密集的操作配置在另一个核上执行,将不同的操作利用过滤器分配到不同的线程中。具体来说,Pipeline 模型把整个框架分为3部分:输入端口、输出端口和工作核(worker Lcore), ring 队列将端口与工作核相连。[JP3]通过这种方式,从一个端口收到的数据报文能够依据应用需求而分配至任一指定的工作核上处理,处理后工作核将数据包发送到输出端口。[JP]endprint

其次,run-to-completion模型主要是DPDK平台对于一般程序的运行方法, run-to-completion通过网卡的多队列的功能,将接收的数据报文分配给多个CPU核上处理,对于CPU的每个核,都是独立处理到达该队列的数据报文,硬件资源分配也比较固定,降低了数据报文在核间的传递的开销,能够随着核的数目较为灵活地扩展处理能力。

基于前文研究可知,run-to-completion 模型确实能够减少CPU核心间通信的开销,但对于负载均衡是不合适的,对于同属于一个链接的不同数据包会出现被分配到CPU的不同核上进行处理,这样保持会话连接就比较困难,而Pipeline能够通过自定义规则选出特定的核心来处理数据报文,为此在负载均衡框架的设计上采用了Pipeline模型。负载均衡的实现框架则如图4所示。

在该负载框架中用于处理来自不同网卡端口报文的逻辑核称I/O逻辑核(I/O Lcore),其余被指定执行应用处理的逻辑核称为工作逻辑核(Worker Lcore)。图4即建立展示了2个特定的RX I/O逻辑核和2个特定TX I/O逻辑核用于处理来自网卡端口的报文收发的过程。下面则针对各关键核的工作内容研究得到如下设计表述。[FL)]

1)I/O 接收逻辑核(I/O RX Lcore)。每个I/O接收逻辑核从指定的网卡环形队列接收报文,然后分发到工作线程(Worker Thread)。該框架允许每个I/O接收逻辑核与任何一个工作线程进行通信,因此每个(I/O RX Lcore,Worker Lcore)对之间就可以通过专用的“生产者—消费者”Ring环形队列而展开连接。

2)I/O 发送逻辑核(I/O TX Lcore)。针对多个已预先定义的网卡端口,每个I/O逻辑核拥有报文发送能力。为启动每个工作线程发送报文到任何TX端口,框架为每个(Worker Lcore ,NIC_TX_Port)创建了一个Ring环形队列,而每个I/O发送逻辑核就可以处理这些网卡端口上的环形队列。

3)工作逻辑核(Worker Lcore)。每个工作逻辑核从一系列的Ring环形队列读取报文,通过将这些报文拆分到输出软件环,报文被转发到网卡口。转发逻辑是基于DPDK提供的LPM查表转发的,所有的工作线程共享同样的LPM规则。

2.2多重Hash算法

主要思想是采用2种哈希的方法解决负载不均衡的问题。首先建立2张Hash表,用来存储一个连接与CPU不同核之间的映射关系,在网卡接收到报文后,对包头的四元组设定2次不同的Hash计算,为了保证相同连接需要送到同一个核而统一处理的大原则,即使在CPU过载情况也要遵循这一原则,根据计算来研究转入哈希表查询:若查到映射关系说明收到的数据包是已有连接中的数据包,将数据包送到相应CPU核心进行处理;若在查表过程中没有查询到映射关系,说明收到的数据包属于新连接,在负载正常的情况下,收到的新连接数据包进行对称RSS处理,将映射关系存在哈希表1中并将数据包送到相应CPU实现后续处理,若系统出现负载不均导致某些CPU核心过载的情况下则剔除负载过重的核,收到的新连接数据包即加载第2套哈希算法,将映射关系存在哈希表2中并将数据包送到相应CPU实现定制处理,通过这种方式能够将收到的新连接中的数据包分散到负载较轻的CPU核心中去,从而能够达到将负载均匀分配的目的。

采用多重Hash方法的好处是进一步分离不同流的数据包,因为单次Hash可能会出现Hash碰撞的可能。相对多核匹配,优点在于能有更多的核参与到均衡流量。图5即例示说明了在硬件层面对算法的支持。

过程中,需要在何种情况下对处理器的负载配置优化调整,算法即在本节内容中研究提出了采用负载均衡度[2]对多核的负载进行评估,负载均衡度表示了接收的数据包在CPU多核处理器之间的分配比例与多核之间的处理能力比例的差异程度。负载均衡度的值越小,表明各处理节点的负载程度就越均匀。而考虑到对于多核处理器各核的处理性能均相同,为此这里的负载均衡度就是CPU多核之间负载量的差异程度 。具体的公式表述如下:

RLBM(t)=1-〖SX(〗〖JB((〗∑〖DD(〗n〖〗i=1〖DD)〗Ri(t)〖JB))〗2〖〗n∑〖DD(〗n〖〗i=1〖DD)〗R2i(t)〖SX)〗[JY](1)

其中,R(t)表示在时刻 t 多核处理器的第i个核的利用率,n 为多核处理器核的数量。通过反复实验,可以得出在负载均衡度的值高于0.2时,就会对处理器的流量负载进行动态的多重Hash调整。在确定了动态调整的评估方法后,整体算法的基本流程则如图6所示。算法流程步骤详述如下:

1)收到数据包后,分别通过Hash1()以及Hash2()计算得到哈希结果,并利用哈希表1以及哈希表2进行查找,如果存在映射关系就将数据包分配到对应的处理核心中。

2)在第1)步中如果没有在2张哈希表中查到对应关系,说明数据包属于一条新连接,而后将通过对当前CPU的整体负载均衡度的统筹判断操作来决定数据包的下步操作。

3)负载均衡度没有超过系统设定的阈值,说明目前系统负载均衡情况较好,数据包根据Hash1()的结果在哈希表1中建立映射关系,并将数据包分配到对应的处理核心中。

4)负载均衡超过设定阈值时,说明目前出现了负载均衡不良,某些处理核心存在过载严重的情况,需在下一步中剔除过载严重的处理核心,并动态更新Hash2()的所有计算结果与处理核心id的映射关系,采用Hash2()进行计算,数据包根据Hash1()的结果在哈希表2中建立映射关系,并将数据包分配到对应的处理核心中。

2.3实验分析

实验选择Pktgen对单位时间内关于处理接收数据报文的CPU核心的使用率进行统计,并对一个时间段的核心使用率计算平均值,通过比较多核处理器各个处理节点的使用率来对负载均衡度而展开有效的衡定与测量。研究中选定的实验平台的配置信息则如表2所示。endprint

2)使用多重Hash方法,各核的负载情况。也可由研究得到对应运行效果即如图8所示。

在此基础上,又引入了柱状图的模式来展开研究,研究可得结果如图9所示。通过柱状图的递进趋势来看,相比在DPDK平台单纯使用RSS技术而言,使用多重Hash方法将负载过重的处理节点的后续接收的数据报文分配到其他负载较轻的负载节点上,从而能够使得各个处理节点的使用率相对平均,充分利用了多核处理器的性能,处理器也随即将更好地发挥可调用设计潜能,一定程度上提高了多核处理器的处理效率。

3结束语

本文围绕高速网络坏境中多核处理器关于捕获数据包负载均衡的问题,首先对DPDK平台提供的RSS以及对称RSS静态哈希的技术探讨引入了可行有效分析,并进一步论述了目前呈现的问题;其次是针对这些不足致力于研究改进,由此则开发提出了静态与动态相结合的多重Hash负载均衡的算法;最后,基于DPDK平台设计得出一个负载均衡的框架,并通过实验分析算法性能,从而全面对照比较了在DPDK平台单纯地采用RSS算法和多重Hash算法之间的差异程度。

参考文献:

[1] WOO S, PARK K S. Scalable TCP session monitoring with symmetric receive-side scaling[R]. Daejeon, South Korea:KAIST, 2012.

[2] 陈一骄, 卢锡城, 时向泉,等. 一种面向会话的自适应负载均衡算法[J]. 软件学报, 2008, 19(7):1828-1836.

[3] 赵宁, 谢淑翠. 基于dpdk的高效数据包捕获技术分析与应用[J]. 计算机工程与科学, 2016, 38(11):2209-2215.

[4] 何佳伟, 江舟. 基于Intel DPDK的高性能网络安全审计方案設计[J]. 电子测试, 2016(Z1):87-91.

[5] 张莹, 吴和生. 面向多进程负载均衡的Hash算法比较与分析[J]. 计算机工程, 2014, 40(9):71-76.

[6] 于洪伟. 基于多核处理器高效入侵检测技术研究与实现[D]. 成都:电子科技大学, 2009.

[7] 庄卓俊. 基于多核平台的入侵检测系统的设计与实现[D]. 上海:上海交通大学, 2009.

[8] Shemesh O. System and method for symmetric receiveside scaling (RSS):US,8635352[P]. 2014-01-22.

[9] BOKHARI M U, ALAM M, HASAN F. Performance analysis of dynamic load balancing algorithm for multiprocessor interconnection network[J]. Perspectives in Science, 2016, 8(C):564-566.

[10] ZAJDA K. Evaluation of possible applications of dynamic routing protocols for load balancing in computer networks[J]. Theoretical & Applied Informatics, 2010, 22(2):141-151.

[11]李敬喆. 多核环境下的负载均衡方法研究与设计[D]. 北京:北方工业大学, 2011.

[12]刘熙. 若干负载均衡技术的研究[D]. 南京:南京大学, 2011.

[13]李彦君, 钟求喜, 陈诚,等. 多核平台入侵检测系统负载均衡算法设计与实现[J]. 计算机应用研究, 2012, 29(4):1413-1416.

[14][JP4]HOU E S H, ANSARI N, REN H. Genetic algorithm for multiprocessor[JP] scheduling[J]. IEEE Transactions on Parallel & Distributed Systems, 1994, 5(2):113-120.endprint

猜你喜欢

负载均衡
LBS检索容灾架构研究
Linux负载均衡集群技术在网络服务器中的应用
Oracle MAA在汽车行业电子政务平台中的应用
社区教育平台运营策略研究
异构环境下改进的LATE调度算法
基于负载均衡的云资源调度策略研究
基于新型VPN 技术的高校校园网改造
基于云计算的虚拟实验系统的设计及应用
基于离散PSO算法的医疗云存储部署策略
多站点同步更新系统的设计