随着网络带宽的不断发展,网络如何安全、高效地运行逐渐成为人们关注的焦点。上期文章《多核技术开创万兆时代》指出,经过多年不断的努力探索,在历经了高主频CPU、FPGA、ASIC、NP后,我们迎来了多核时代。是不是有了多核,就能够满足当前人们对网络安全处理能力的需求呢?答案也许并非那么简单。
本文将从多核处理器带来的机遇与挑战、多核编程的困境、联想网御的解决方案三个方面来详细阐述多核并行计算相关的技术问题。
多核处理器带来机遇与挑战
通常我们所说的多核处理器是指CMP(ChipMulti-processors)的芯片结构。CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(Symmetric Multi-processors,对称多处理器)集成到同一芯片内,各个处理器并行执行,在同一个时刻同时有多条指令在执行。
多核处理器的出现使得人们从以前的单纯靠提高CPU主频的“死胡同”走了出来,同时又使得软件开发人员能够采用高级语言进行编程,看似是一个比较完美的技术方案,但同时我们也应该看到多核处理器也给业界带来了一系列的挑战。
同构与异构
CMP的构成分成同构和异构两类,同构是指内部核的结构是相同的,而异构是指内部的核结构是不同的。核内是同构还是异构,对不同的应用,带来的性能影响是不同的。
核间通信
多核处理器各个核之间通信是必然的事情,高效的核间通信机制将是多核处理器性能的重要保障。目前主流的芯片内部高效通信机制有两种,一种是基于总线共享的Cache结构,一种是基于片上的互连结构。采用第一种还是第二种,也是设计多核处理器的时候必须考虑的问题。
并行编程
有了多核处理器,意味着用户具备了更多的性能提升空间,但如何发挥多核处理器的优势,也是一个非常具有挑战性的问题。另外,对软件开发人员也提出了更高的要求,软件开发人员需要非常清楚程序哪些部分需要互斥,哪些部分可以并行。
编译器
编译器如何产生出更加适合在多核处理器上的目标程序,虽然很多的芯片厂商已经在这方面做了不懈的努力,但效果甚微。
多核编程的困境
软件如何充分利用多核的优势,是软件业目前面临的重大挑战。多核编程与原来的单核处理器编程有什么区别呢?其中最重要的一个区别是,单核处理器运行的程序微观上都是“串行的”,而多核处理器从微观上来看,程序中的很多部分需要在多个核上并行执行。但并不是所有的程序都能够并行执行,多核编程最关键的两个难题必须得到解决:并行编程与负载均衡。
并行编程需要对必须串行化的部分进行识别界定,并对其进行性能评估。但是不幸的是,从下面三个定律我们将看到,即使能够很好地识别并界定必须串行化的部分,也未必就能够使得系统整体性能上升,它与多核处理器“核”的个数、执行代码的总量都有关系,而且并非简单的线性关系。
Amdahl定律
在评价一个多核处理器的性能时,通常会提到所谓的加速系数S(p) = 使用单处理器执行时间(最好的顺序算法)/ 使用具有p个处理器所需执行时间。
Amdahl定律认为加速比S(p)和串行部分所占比例f成反比,而与核数p的正比关系并非线性关系,得到的加速极限为1/f。
Gustafson定律
Gustafson假设随着处理器个数的增加,并行与串行的计算总量也是可以增加的。Gustafson定律认为加速系数几乎跟处理器个数成正比,如果现实情况符合Gustafson定律的假设前提的话,那么软件的性能将可以随着处理个数的增加而增加。
Sun-Ni定律
Gustafson定理无疑给我们带来了希望,但是在实际计算中,由于存储空间受限,软件规模不可能无限制的增加,所以Sun-Ni定律对Amdahl定律和Gustafson定律做了进一步的推广。Sun-Ni定律基于下面的假设:充分利用存储空间等计算资源,尽量增大问题规模以产生更好、更精确的解。
Amdahl定律和Gustafson定律的计算结果差距如此之大,原因在于两个定律的假设条件不一样。Amdahl定律认为程序规模并不会随着并行处理的核的个数增加而增加,如果此条件符合,则系统整体性能随着核的个数增加,性能增加并不明显;而Gustafson定律假设程序规模会随着并行处理的核的个数增加而增加。如果此条件符合,则系统整体性能将随着核的个数增加而显著增加。显然这两个定律的假设都比较理想化,现实情况并非完全符合此假设。
第二个难题,负载均衡问题。基于多核处理器进行软件开发,并行编程的效率是一个方面;对于网络设备来说,它具有自身的特点,由于网络设备是以数据驱动的方式进行工作,所以并行处理的另外一个方面是如何把数据均衡地分配到各个并行处理的核上。如果分配不合理,将会导致某些核过载,而某些核又过于空闲。
联想网御的多核并行处理技术
联想网御基于多年的对网络安全的深刻理解,同时深入地研究多核处理器的特点,在多核处理器相互之间的兼容性、并行编程、负载均衡、如何提升多核处理器的整体性能方面进行大胆的探索和实验,最终推出通用安全开发平台VSP(Versatile Security Platform),很好地解决了一系列多核相关的技术难题,同时取得整体吞吐率达到20Gbps以上、新建连接数大于30万个/秒、并发连接数在500万以上的超强性能。
那么VSP是如何做到的呢?我们知道,并行处理过程中的核的负载调整基本策略无非有三种:
1数据进入设备后按照轮询的方式递交到并行处理的核上;
2按照所谓的“流”分类方式递交到并行处理的核上;
3根据核的负载情况动态调整数据的分发。
第1种能够比较均衡地分配负载,但是势必造成程序中并行处理部分的增加。
第2种能够做到尽量少的并行运算,但是在多数情况下比较难以均衡地分配负载。
第3种看起来是比较理想的方案,但是既然要动态调整,则需要一定的计算量,而且与算法有比较大的关系,否则会适得其反。
另外,并行编程也是我们不能回避的问题,已经有定律证明了在并行处理过程中,有些部分互斥是不能避免的。我们知道,在并行处理过程中,如果互斥范围过大,势必造成系统整体性能很差,甚至还不如单核CPU的处理性能。如果互斥范围过小,势必造成系统频繁互斥,并行的整体效果也远达不到期望。如何解决这个矛盾,最容易想到的是流水线与并行相结合,单纯的并行或者单纯的流水线作业都难以达到整体性能的质的飞跃。
联想网御在上面提到的两个难题方面进行了大量的尝试,完美地设计出一套数据处理模型,提出了具有创新的Windrunner矩阵式算法,使得数据在多个核之间的处理始终处于均衡的状态,并行化运算达到99%,串行化部分仅仅占1%,使得整体性能得到极大的提高。
如图所示,Windrunner算法采用矩阵式并行处理系统并行处理数据。该系统将64颗虚拟CPU(vCPU)分为8×8的矩阵,对数据同时进行并行处理和流水线处理。从而实现对数据的高效处理,Windrunner矩阵式并行处理算法可动态预测CPU矩阵中的瓶颈,对虚拟CPU的资源实时、动态调度以达到整体效率最高的目的。
测试表明,联想网御KingGuard万兆安全网关的网络处理能力可达20Gbps,新建连接速率可达每秒30万个以上,可同时为2个万兆核心骨干网络做集中的安全防护,有效解决了目前10G网络无法得到安全防护的问题。
KingGuard万兆安全网关是联想网御积极创新的成果,也是联想网御为用户持续提供领先的信息安全整体解决方案的实践,联想网御将继续深入贴近用户需求,持续创新,打造民族信息安全新长城。
1
是
workbench
中调用
fluent,定义了一些调用的接口,作为整个流程中的一个模块
2
是单独的
fluent,与63及之前的版本差不多
本身功能上两者是一致的,因为用的都是同一个fluent程序
以上就是关于【联想网御的多核并行计算网络安全平台】fluent多核并行计算全部的内容,包括:【联想网御的多核并行计算网络安全平台】fluent多核并行计算、ansys 12.1的fluent模块问题、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)