无锁结构在国产防火墙上的应用与研究_第1页
无锁结构在国产防火墙上的应用与研究_第2页
无锁结构在国产防火墙上的应用与研究_第3页
无锁结构在国产防火墙上的应用与研究_第4页
无锁结构在国产防火墙上的应用与研究_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0引言随着网络技术的不断发展,传统的基于内核的报文收发方式造成大量的性能开销,网络传输速率很难得到提高。为了实现网络的高速传输,Intel设计了高性能的数据包处理框架DPDK(DataPlaneDevelopmentKit)。近年来,通过不断地对dpdk技术进行改造,在国产申威处理器平台上已实现了网络数据的高速转发。随着国产多核处理器的普遍使用,高并发数据结构变得越来越重要。为了充分发挥多核处理器的性能,软件人员必须编写可扩展的并发程序才能使其在多核环境下具有高的性能。并发程序编写存在一个重要问题,就是多个线程/进程对共享资源的同步访问问题。网络安全设备多核并行协议栈运行过程中,不可避免地要在核间共享数据,比如:ddos统计表,nat转换表,aspf表等。保证数据一致性的通用方法是加锁,但锁机制的引入带来了数据处理的串行化,大大降低了安全设备的网络转发性能,同时又增加死锁和数据竞争的风险。近年来,工程人员开始对无锁(lockfree)数据结构进行研究,使用CAS(compareandswap)细粒度同步原语的无锁数据结构能够摆脱死锁和数据竞争问题,更重要的是它对多核是可扩展的。针对以上问题与现状,结合对国产处理器平台的研究与应用,本文提出了一种无锁结构在国产防火墙上的应用方案。在并行处理的协议栈间使用无锁结构进行数据共享,减少数据竞争时的等待时间,从而提高网络转发速率。实验表明,该方案在小包(64字节)数据转发时,吞吐率性能比常规方法提升23.68%。1关键技术程序方法的调用到执行完成需要时间,从某个方法调用事件的开始到执行结束过程中,当这个方法调用事件开始而执行未结束,称其调用是未决的。并发程序方法的执行可以相互重叠,而单线程程序方法的执行总是顺序无重叠的。在一个程序中,当方法的未决调用能够延迟其他方法的未决调用时,我们称其是阻塞的;相反,当方法的未决调用不会延迟其他方法的未决调用时,我们称其是非阻塞的。在一个程序中,一个方法的无限次调用能够在有限次内完成,我们称其是无锁(lockfree)的;一个方法的每次调用都能在有限次内完成,我们称其是无等待(waitfree)的;一个方法调用存在着关于它的操作次数的确定界限,我们称其是有界无等待(waitfreebounded)的。无锁结构实现的方法也是无锁的,其实现的基础是CAS,且大多数国产处理器已硬件实现。CAS可以保证需要更新的地址在没有被其他线程或进程改动过的情况下安全地写入新数据,保证读写操作的一致性,不出现脏数据。而这个地址内存空间也是我们通常在锁机制中需要加锁重点保护的。2国产防火墙无锁结构的出现2.1国产防火墙简介基于dpdk技术的国产防火墙架构如图1所示。图1国产防火墙架构该防火墙在国产化多核处理器核和国产化多队列网卡的基础上,对dpdk技术进行改造,构建一个高速的二层转发平台。在dpdk驱动上构建一个多核并行运行的用户态协议栈,各协议栈与处理器核绑定且独立运行,并行协议栈间通过共享数据进行传递信息,运用无锁结构及其操作进行数据同步,保证一致性。2.2无锁结构的实现方法(1)初始化设备上电启动过程中,由协议栈0所运行的线程或进程在dpdk大页中使用rte_memzone_reserve方法申请共享内存,并进行初始化。(2)共享数据的获取协议栈并行运行时,各个协议栈使用rte_memzone_lookup方法获取共享内存,再根据其具体使用的数据结构方法获取所需的数据。比如:hash表可通过hash值获取。(3)共享数据的更新各个协议栈在获取共享内存后采用无锁机制对共享数据进行操作。无锁化机制的核心原语为CAS,其在大多数国产处理器中已经实现。比如龙芯平台的CAS原语实现方法如下:staticinlineintcas64(volatileuint64_t*dst,uint64_texp,uint64_tsrc){

uint32_tres=0;

uint64_t

temp=0;

__asm__

__volatile__(

"1:

lld%[tmp],%[dst]

\n"

"

li%[res],0\n"

"

bne

%[tmp],%[exp],2f\n"

"

move

%[tmp],%[src]\n"

"

scd

%[tmp],%[dst]\n"

"

li

%[res],1\n"

"

beqz

%[tmp],1b\n"

"2:

\n"

:

[res]"=&r"(res),

[tmp]

"+&r"(temp),

[dst]

"+m"(*dst)

:

[src]"r"(src),

[exp]

"r"(exp),

"m"(*dst)

:

"memory"

);

return

res;}在应用程序的线程或进程中,对64位共享数据的更新方法如下:do{

o64=A;

n64=A*;}while(!cas64(&A,o64,n64));其中A为被更新的数据,A*为更新后的数据。2.3性能分析相比于加锁的方式,采用硬件原语CAS实现的无锁数据结构在进行操作时,将缩短数据竞争时的等待时间,从而提高网络转发速率。在程序运行的整个周期中,数据竞争等待时间减少,则并行可执行部分将变大。著名的阿姆达尔定律指出:数据结构并发程序的优化取决于并发可执行部分占整个程序的比例和并发线程数,其表达式如下:其中,S为程序加速比,n为并发线程数,P为并发可执行部分。当并发线程数n一定时,并发可执行部分P越大,则程序加速比S越大。无锁结构降低了数据竞争的等待时间,则增大了程序并发可执行部分,进而提高了程序加速比。程序加速比的提高,使并行协议栈的网络处理能力增强。3实验与分析3.1实验环境实验硬件平台采用8核龙芯3A3000处理器,主频1399MHz,PCIE接口为4口、8队列SF400T千兆网卡,中标麒麟操作系统。3.2吞吐率测试采用spirenttestcenter仪表进行rfc2544吞吐率测试。多核并行协议栈环境下,核间数据竞争,将有锁机制与无锁机制下的吞吐率进行对比。实验采用dpdk提供的共享内存rte_memzone,dpdk读写锁rte_rwlock_write_lock,cas64原语及无锁方法。实验分别测试udp包长为64字节、128字节、256字节、512字节、1024字节、1280字节、1518字节时的网络吞吐率,其仪表连接关系如图2所示。图2实验仪表连接示意图SpirentTestCenter的PORT1和PORT2通过直连网线与国产防火墙的ETH1和ETH2相连。实验采用统计UDP目的端口包数的方法使共享数据产生竞争,处理器核数为8,端口数为4且仪表使用递增的方式发包,则理论上同一时刻有2个线程或进程竞争一个数据,此时测得结果如表1所示:表1吞吐率结果表核数端口数包长加锁吞吐率无锁吞吐率无锁比加锁提升百分比8464379.6M469.5M23.6884128664.4M814.6M22.61842561000M1000M0845121000M1000M08410241000M1000M08412801000M1000M08415181000M1000M0防火墙在全速转发的情况下,无锁结构同步机制比加锁结构同步机制的性能在包长64字节时提升23.68%,包长128字节时提升22.61%。包长为256、512、1024、1280、1518时,无锁结构的同步机制与加锁结构的同步机制转发速率均达到限速。3.3数据竞争时延测试按照图2仪表连接方法,仪表以1Gb/s速度发送500000包的同时,防火墙程序记录下并发不可执行部分(更新共享数据)所消耗的时间。程序使用CPU的运行周期作为时间单位进行统计,将加锁和无锁环境下更新共享数据所消耗的时间进行对比,其测试结果如表2所示。表2时间消耗表核数端口数包长包数加锁消耗时间周期无锁消耗时间周期846450000021154394041515221481从实验结果可以看出,无锁环境更新共享数据所消耗的时间短于有锁环境,则根据阿姆达尔定律可知,多核并行协议栈并行可执行部分大,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论