温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
双散列
DPDK
负载
均衡
算法
设计
实现
熊义龙
工业控制计算机2023年第36卷第1期随着网络技术的迅速发展,网络应用不断涌现,给人们生活带来便利的同时也导致了各区网络流量急剧提升,数据呈现爆发式增长,各种安全问题不断涌现。为了解决安全问题,研究学者对网络安全领域中的应用进行了大量研究1-2,如网络安全IDS、IPS、防火墙、数据库防护系统、信息审计系统等,这些应用都需要依赖数据包捕获技术,因此对数据包捕获技术的研究将具有重大意义。但随着网络速率逐渐向10 Gbps过渡,负责数据包捕获的处理器上的负载不断增大,丢包问题也不断涌现。因此为了提高数据包捕获性能,研究学者提出了许多流量负载均衡方法。负载均衡方法有硬件实现、软件实现两种类别。基于硬件实现的负载均衡系统虽然性能稳定,需要相关的技术支持人员对设备进行维护保障,但是价格昂贵,依赖厂商提供技术支持。因此基于软件的负载均衡备受研究学者青睐。基于软件的负载均衡算法有轮转法、散列法、最小连接法、最快响应法等3,这些大多是基于集群的系统架构实现的,相对来说性价比不太高。目前多核处理器已经得到广泛应用,多核处理器不仅具备单核处理器价格低、操作简单以及软硬件资源丰富,还具备功耗低、并发度高等优点。在高速网络环境下通过多核处理器对网络流量进行并行处理是目前主流的方向。作为高性能数据包处理框架的DPDK,最近几年也是备受关注,对于负载均衡方面的研究,DPDK提供了RSS分流机制在多核处理器上实现负载均衡,该方法是通过DPDK开启网卡的硬件RSS分流特性实现的。由于默认的RSS机制对同一链路上双向数据包的五元组信息进行哈希计算得到的值不同,数据包会被分配到不同的逻辑核上处理,这将导致额外的性能开销,因此提出了一种对称RSS算法4,该算法能够保证同一链路上双向数据包会被分配到同一逻辑核上处理。但是对称RSS算法针对单一会话流将出现某个逻辑核负载过大的问题。为了解决对称RSS负载不均衡的问题,本文提出一种高效的负载均衡算法对改善数据包捕获性能具有重大研究意义。本文基于DPDK开发平台,在保证同一链路的双向数据包分配到同一逻辑核上进行处理的前提下,提出了双hash负载均衡算法,该算法分流效果可以满足目前用户的需求。1相关技术DPDK是Intel公司开发的一套强大、高度优化的数据平面开发工具套件5,它不同于Linux操作系统以通用设计为目的,DPDK集中于网络应用中数据包的高性能处理。DPDK最大的区别是应用程序运行在用户层,使用的是自己的数据平面库发送和接收数据包,这个过程不需要Linux内核协议栈参与。为了使得流量被均衡的分配到各个逻辑核上,可以对网卡接收的的数据流进行分流,DPDK提供了RSS分流机制。1.1多队列扩展技术RSSRSS是网卡的硬件特性,需要网卡支持才能被DPDK开启。通过设置rte_eth_conf结构体中的rss_hf和mq_mode字段来开启RSS功能。本次实验使用的是X710系列网卡,该网卡支持RSS特性。RSS能够利用特定的报文字段值进行哈希散列得出哈希值,根据哈希值确定数据包分配的队列,特定字段值由数据包类型确定。RSS的工作原理如图1所示:基于双散列的 DPDK 负载均衡算法设计与实现熊义龙曹炳尧谢莹庆(上海市特种光纤与光接入网重点实验室 上海大学通信与信息工程学院,上海200444)Design and Implementation of DPDK Load Balancing Algorithm Based on Double Hash摘要:随着网络快速发展,业务越发复杂,RSS和对称RSS分流不均衡导致高性能数据包处理框架DPDK性能不能充分发挥,针对这一问题提出了一种双hash负载均衡算法。该算法通过网卡硬件特性对称RSS机制和软件实现的对称hash算法,对数据包五元组信息进行哈希散列确定对应的逻辑核实现均衡分流。搭建了实验测试环境,和对称RSS算法对比,实验结果表明对称RSS算法分流不均衡,10次实验结果的CPU使用率的均方差为334.48。而双hash负载均衡算法分流均衡,各个逻辑核的CPU使用率均控制在50%范围小幅波动,对于10次实验结果的CPU使用率的均方差仅为23.92,达到了较好的均衡效果。提出的双hash均衡算法对于基于DPDK的网络处理设备研制具有一定参考价值。关键词:DPDK;RSS;对称RSS;负载均衡Abstract:This paper proposes a dual-hash load balancing algorithm.The algorithm uses the symmetric RSS mecha-nism of the hardware characteristics of the network card and the symmetric hash algorithm implemented by software tohash the quintuple information of the data packet to determine the corresponding logical core to achieve balanced distribu-tion.An experimental test environment is built,and compared with the symmetric RSS algorithm,the experimental resultsshow that the symmetric RSS algorithm is not balanced,and the mean square error of the CPU usage of 10 experimentalresults is 334.48.In the dual-hash load balancing algorithm,the CPU usage of each logical core is controlled within 50%and fluctuates slightly.The mean square error of the CPU usage of the 10 experimental results is only 23.92,achieving agood balancing effect.Keywords:DPDK,RSS,symmetric RSS,load balancing图1RSS工作原理65基于双散列的DPDK负载均衡算法设计与实现从图1可以看出,当网卡接收到数据包后,首先是经过哈希函数计算哈希值,哈希函数的输入包括源IP地址、目的IP地址、源端口、目的端口、协议类型五元组信息,取哈希值的最低有效位用于索引记录队列和逻辑核关系的映射表,通过索引值找到对应的队列和逻辑核,从而实现了将数据包分配到对应的队列和逻辑核上。默认使用的哈希函数是Toeplitz哈希函数,函数输入包括五元组信息的input数组以及随机密钥K,其中数组大小是12 Byte,密钥大小为40 Byte,经过哈希函数计算的哈希值可以通过访问数据包结构体rte_mbuf中的元素hash联合体,通过联合体的元素rss字段获得。1.2对称RSS由于采用DPDK默认的密钥值K,会使得对于同一连接的双向数据包经过哈希散列后得到的hash值不一样,关系如公式(1)所示:Hash(srcIP,srcPort,dstIP,dstPort,K)Hash(dstIP,dstPort,srcIP,srcPort,K)(1)因为修改RSS算法比较困难,而密钥值K是网卡驱动的一部分,在驱动程序首次加载的时候会设置到网卡中,所以求解一个密钥值K,使得同一通路上双向的数据包通过哈希散列得到的哈希值一样相对简单。对于一个双向的数据包,它们的五元组中协议类型位置是完全一样,所以只需要源IP地址、目的IP地址、源端口、目的端口计算得到的哈希值一样就能保证被分配到同一逻辑核。其实通过算法可以看出密钥值K并非每一位都参与哈希计算,对于给定的input的一比特位,只有32位K参与异或操作,input的元素和K的关系如表1所示:表1input对应的密钥值K的范围假设K1:N表示为密钥值K的第1位到第N位的范围,要使公式(2)成立:Hash(srcIP,srcPort,dstIP,dstPort,K)=Hash(dstIP,dstPort,srcIP,srcPort,K)(2)需要使srcIP和dstIP,srcPort和dstPort对应的K的范围分别相等,即满足公式(3)、公式(4)的关系,这样对于哈希函数的输入参数1和参数3,参数2和参数4只要值相同即使位置互换,它们的哈希值也将相同。K1:63=K33:95(3)K1:63=K33:95(4)从公式(3)、公式(4)可以看出对于有重叠部分,将其关系拆成三个不重叠的部分得到公式(5)(7)。K1:15=K17:31=K33:47=K49:63=K65:79=K81:95=K97:111=K113:127(5)K16=K48=K80=K96=K112(6)K32=K64(7)满足公式(5)(7)的一个密钥值K如图2所示:对称RSS相比RSS解决了同一链路上双向的数据流分配到不同逻辑核上的问题,但是对于单一会话流还是会出现某一逻辑核上负载过重的情况,就需要提出新的负载均衡方法。2双hash负载均衡算法2.1系统框架设计因为对称RSS存在负载分配不均衡问题,为了保证同一链路上的流量尽量分配到同一逻辑核上处理,且流量能平均分配到各个逻辑核上处理,提出了双hash负载均衡算法充分利用多核处理器的性能,系统的架构图如图3所示:图3双hash负载均衡算法系统架构图从图3可以看出,当网卡接收到数据包,将通过RSS分流机制和软件分流两个子模块计算对应的五元组信息的哈希值,其中RSS分流机制和软件分流组成了系统的双hash负载均衡模块。RSS分流机制是网卡的硬件特性,为了保证同一链路的流量分配到同一逻辑核,这里采用的是对称RSS算法,软件分流采用的是通过软件实现的对称哈希算法,软件分流的哈希计算是在主核上完成的,所以不影响负责数据包处理的逻辑核的性能。经过双hash算法得到数据包五元组信息的哈希值,将根据哈希值和队列的映射关系将数据包分配到对应的接收队列,进入对应的逻辑核上处理。经过双hash散列之后数据包能够进一步解决单hash出现的hash碰撞问题,从而将数据包更加均衡的分配到各个逻辑核上。2.2算法设计双hash负载均衡算法的思想是采用对称RSS和对称哈希算法实现流量均衡分配,对称RSS第2小节已经介绍过,对称哈希算法采用的是源IP地址、目的IP地址、源端口和目的端口进行异或运算。由于异或操作不关乎两个操作数的顺序,这样对于双向的数据流只要满足公式(2)就能被分配到同一逻辑核上进行处理。哈希算法的具体实现步骤如下:1)将源IP地址S_IP、目的IP地址D_IP、源端口S_Port和目的端口D_Port以8比特位进行拆分得到多个字节段。S_IP1=S_IP1:8,S_IP2=S_IP9:16S_IP3=S_IP17:24,S_IP4=S_IP25:32D_IP1=D_IP1:8,D_IP2=D_IP9:16D_IP3=D_IP17:24,D_IP4=D_IP25:32S_Port1=S_Port1:8,S_Port2=S_Port9:16D_Port1=D_Port1:8,D_Port2=D_Port9:16S_IP1:8表示源IP地址S_IP的第1到第8位,其他依次类推。2)对步骤1)得到的字节段进行平方运算,为了保证各字段平方的结果位数一致,对平方得到的结果只取低8位。例如对于S_IP1字节段平方截断之后表示为S_IP82。3)对步骤2)的结果进行异或运算,如公式(8)所示:图2对称RSS密钥值K66工业控制计算机2023年第36卷第1期HASH(S_IP,D_IP,S_Port,D_Port)=S_IP128S_IP228S_IP32