基于CN56xx网络处理器的网络控制器的研究

2012-06-25 07:03沈晶聂
电视技术 2012年9期
关键词:链表数据包处理器

沈晶聂,叶 猛

(1.光纤通信技术和网络国家重点实验室,湖北 武汉 430074;2.武汉邮电科学研究院,湖北 武汉 430074;3.武汉虹旭信息技术有限责任公司安全产品部,湖北 武汉 430074)

如今上网是非常普遍的事情,在网络上可以随意发布信息,但是有些信息不能随意发布到互联网上,比如色情信息、暴力信息、反动信息和病毒等,这些信息将会影响网络安全、毒害青少年和影响社会和谐,所以需要一些技术手段来控制这些信息的随意传播,各大网站和监管单位可以使用网络控制器来达到这个目的。

当今网络的发展非常迅速,高清电视、大量的下载致使网络流量日益增大,使用传统普通的处理器和软件已经不能很好地胜任处理这些数据包的任务,此时网络处理器应运而生。网络处理器是专门设计用来处理网络上的数据包的,它无论在灵活性还是性能方面都要优于以前的硬件和纯软件方式。网络处理器的出现为网络系统构建了一个硬件平台,能够通过软件的升级以适合不断增长的功能需求,为网络技术的发展提供了开放的舞台,因而具有十分重要的意义。将网络处理器和网络控制结合起来将使得网络监控更加方便,网络处理器的强大功能使得监控更加全面[1]。

1 网络控制器概述

用户管控系统对用户来说是透明的,用户在正常使用网络的时候是感觉不到它的存在的,只有当用户发布或者下载了非法信息的时候,网络控制器才会出现干扰用户的使用,使得用户的不正当行为不能实施。图1给出了网络控制器以及其辅助设备在网络体系中的结构拓扑图。

用户管控系统的功能[2]介绍如下。

用户管理和服务功能:对用户的信息、用户的业务情况等进行管理,并且为用户的上网提供支持,保障用户上网环境的安全。

上网控制功能:主要是对用户的信息进行认证,外联非法网站的检测,病毒检测,以及对用户上网行为的审计。

图1 用户管控系统拓扑图

端点防护功能:该功能为用户提供了端点系统安全防护的机制和手段,它按照安全服务的安全策略来具体实施端点系统的安全防护。

接入管理功能:用来对接入网络的用户实施管理和检查。

用户管控系统是工作在网络层、传输层以及应用层的安全审计系统,通过用户事先内置的基本网络协议、数据库应用协议等分析模块,记录网络事件,将进出网络的通信数据进行实时和完整的还原,能够重现用户访问的网络资源,然后进行分析,再根据事先监管单位在管理界面上设置的规则来进行数据过滤,并将过滤出来的有用数据保存在数据库中供监控单位查询[3-5]。用户管控系统最终目的是保证用户使用网络的安全性和网络环境的良好。

2 CN56xx网络处理器

CN56xx是Cavium Networks面向智能网络、数据控制、存储以及无线应用的高性能网络处理器方案。CN56xx具有多达12个MIPS64的处理器核,具有强大的数据处理能力,其片内集成了多种硬件加密、压缩引擎以及包处理加速引擎,并提供了硬件的队列管理、调度、保序以及同步模块,此外,CN56xx具有强大的接口扩展能力:4路SGMII或者2路XAUI接口、USB2.0PHY、2路8通道PCIe 1.1接口。

网络控制器整个硬件平台除了CN56xx网络处理器这个核心部件以外,使用的平台还包括有主控处理器MPC8247,其中包括 SDRAM256M,Flash64M,该处理器主要用来运行系统的管理平台,对整个系统进行管理,控制面接口支持10/100 Mbit/s自适应以太网。整个平台还包括双通道4 Gbyte内存,其规格是DDR2 SDRAM,主频800 MHz。板载10GE/GE交换芯片提供4×10GE+24×1GE的数据面交换能力,可灵活控制数据流向。在I/O方面提供16路千兆以太网接口,4路GE接口。控制面和数据面都提供相应的高速链路进行连接,以达到灵活控制数据的目的[6]。

网络控制系统包括接入模块、过滤模块、转发模块、管理系统、规则库5个部分。

整个系统的处理流程是:接入模块将数据接入到系统后进行初步处理,将数据进行重组还原,过滤模块根据用户下的不同规则来过滤数据包,然后通过转发模块来转发这些数据到不同的指定地方,规则库用来存放用户指定的过滤和转发规则的,管理系统对整个系统进行管理,包括配置、性能、安全、用户、故障5大方面的管理。

CN56xx主要由数据处理模块(PKI)包括数据验证模块(PIP)和缓冲区申请模块(IPD)、空闲缓冲池(FPA)、同步模块(SSO)、核心(Core)、内存(L2/DRAM)、数据输出处理单元(PKO)等几个核心部件来完成数据包的处理,其硬件结构如图2所示。

图2 CN56xx网络处理器硬件结构图

多核处理器在默认情况下12个核心是使用的传统流水线方式来进行数据处理,简单的传统流水线就是每个核只进行数据包处理的一部分,数据包传给下1个核直到处理完成。在该多核处理器上,通过让每个核只接收1个组的任务来实现。在每个核完成它那部分的处理之后,它会改变数据包的任务组,把包传给下1个核。但是这种传统流水线在多数时候很多核是空闲的,因为它在等待其他的核完成相应步骤的处理,这样就浪费了许多资源,所以该技术对流水线架构进行了优化,即优化流水线[7-9]。

在优化流水线中,每个核可以执行所有数据包处理阶段。这很容易通过修改组掩码来实现[10-11]。在这个模型中,每个核可以运行相同的程序。在获取任务操作返回包所在缓冲区指针之后,核心根据数据包的组编号来执行适当的功能。

每个核心都可以完成所有特定任务的工作而不是只能完成其中一项工作,这样就不用等待其他的核心完成相应步骤才能执行下一步,减少了核心空闲的时间,提高了利用率,这就是优化流水线的优点所在。对此笔者做了实验,实验环境是在5 Gbit/s的数据流量的情况下,分别对普通处理器和网络处理器进行不同的数据包处理方式,在这种情况下,网络处理器在使用优化流水线处理数据包的时候优势明显,虽然会多花一点开销,但是现在看来是值得的。具体数据见表1。

表1 不同情况下吞吐量实验表

3 网络控制器的关键技术研究

3.1 流过滤算法

过滤模块在进行包过滤时,如果对每个输入包都进行一次5元组过滤和协议特征字过滤,那么过滤模块会带来很大的系统开销。

基于流的过滤并不是一类新的过滤规则,而是将输入数据根据IP 5元组抽象成不同的数据流,系统维护当前所有输入流上下文信息,这些信息包括流对应的过滤规则ID、状态、存在时间等。通过对流进行过滤,可以减少对规则表的盲访问,因而能快速定位出当前流命中的规则,减小了过滤模块的开销。

在流上下文建立之初,此时输入的数据包不能直接关联到过滤规则,所以在处理最初的几个数据包时,需要对规则表进行必要的盲访问。一旦确定了与当前流匹配的过滤规则,就可以创建流的上下文。对于随后到达的流中的所有数据包,根据这个上下文确定过滤规则。

3.1.1 流上下文的组织

接入系统通过IP 5元组来识别不同的输入数据流,为了加快对流上下文的访问,所有的流上下文通过5元组Hash表组织。

为了便于插入和删除,Hash表中所有流上下文节点FCN通过双向链表连接,同时Hash表头中包含相应的散列表头节点。Hash运算采用Linux内核中标准Jhash算法。

流上下文Hash表的组织结构如图3所示。

3.1.2 流上下文的维护

1)流上下文的访问

由于CN56xx的每个CPU核都可以读写流上下文,所以对Hash表的访问是一个典型的竞争问题。为了提高读操作的并发度,可以在每个Hash表头元素中增加一个读写锁,这样使得相对频繁的读操作能并发执行,每个CPU核在访问Hash链之前须获取表头中的读写锁。

图3 流的上下文HASH表组织结构图

2)流上下文节点的添加和删除

基本的数据流分为两种:TCP流和UDP流。TCP流具有流结束标记,而UDP流没有。对于TCP流上下文的删除可以通过判断流结束标识进行,而对UDP流结束标识只能通过超时机制实现。但在CN56xx环境中,并不存在Linux中的定时器软中断机制,为了能够回收超时的流上下文节点,在创建节点时就应该采取应对措施。

在每次创建流节点时,首先应在相应的Hash链中查找超时节点。如果存在超时节点,则直接使用该节点;否则,从节点池中申请。这种分配策略存在某种极端的情况:某个活跃的Hash链中总是找不到超时节点,而其他不活跃链中却存在大量超时节点,这便造成系统资源的大量损耗。此外,Hash链中大量的超时节点也会降低系统性能。为了及时释放Hash表中的超时节点,系统还是要对Hash表进行定时清理,可以在管理处理器上运行一个清理任务,该任务在系统资源紧张时或者在间隔较长时间之后,从较长的Hash链中回收节点。

3)减少Hash冲突

在7 Gbit/s的最大设计输入流量下,实时的流节点最多可能达到300万~400万个,如果使用1个64 kbyte长度的Hash表,那么Hash链的平均长度在45~60之间。为了降低Hash冲突次数,加快Hash链的访问,可以使用多张Hash表来减少Hash链的平均长度。

先将5元组进行1次运算,该运算不同于前面提到的Jhash运算,所以其运算结果与5元组的Hash值并不相同,通过该运算结果的最后若干位确定当前5元组的目的Hash表。随后,再进行相应的Hash运算。由于相同Hash值的5元组被分散到多张Hash表中,那么Hash链的平均长度会成倍减少。此外,由于每个5元组与Hash表和Hash链一一对应,多张Hash表不会带来额外的访问开销,只是在Hash查找前需要先确定目标表,而这个运算的开销与成倍的链表查找相比不值一提。

3.1.3 性能评估

Hash查找本来就是一种快速查找算法,查找效率很高,但维护开销较大。此外Hash表为多核共享,需支持多核并发读写,锁的使用会降低查找速度。在多Hash表的模式下,具有相同Hash值的Hash链由多个读写锁保护,因而能够提高Hash冲突时的并发访问度。同时,应当看到,多Hash表的使用会降低Cache的命中率,频繁的Cache刷新势必会降低系统性能。采用Hash查找的流过滤算法,存储器开销在300~500 Mbyte之间。同样情况下如果使用包过滤方式,存取器的开销在800 Mbyte左右,且时间是流过滤算法的几十倍。

3.2 潜在语义索引算法

在设计中过滤模块不仅可以支持IP包的过滤,还可以支持内容的过滤,对于文本内容的过滤来说它主要包括了4个方面:1)用户过滤规则的建立;2)获得待过滤文本内容的特征;3)待过滤文本与用户过滤规则的匹配;4)通过信息反馈,改进需求模板。

在日常使用的语言中,词语之间存在着同义词和多义词的问题,同义词的存在使得相同的意思可以用不同的词语来表达,导致过滤时普通的匹配方式不能匹配成功;多义词的特点是一个词有多个意思,这样在匹配中又会导致匹配到无关的内容。正是由于这种情况的所在,潜在语义索引算法就引入概念空间来解决这个问题,它的基本思想是文本中的词与词之间存在某种联系,即存在某种潜在的语义结构,用这种语义结构来表示词和文本,可消除词之间的相关性,达到简化文本向量的目的[12]。

潜在语义分析其实就是把高维的向量空间模型表示中的文档映射到低维的潜在语义空间中。这个映射是通过对文档矩阵的奇异值分解来实现的。文本构成的矩阵通过奇异值分解映射到低维的空间后于待过滤文本映射后的向量进行比较,获得一个相似度,这个时候必须设置1个过滤阈值,当相似度超过这个阈值时,认为这两个文本属于同一主题,即匹配成功。

在设计中使用潜在语义索引算法的主要目的就是消除同义词和多义词导致的匹配不成功的可能,并且潜在语义索引算法可以利用低维度的词条,文本向量代替原始的空间向量,可以有效地处理大规模的文本库。

在内容过滤的方法中主要包括关键词匹配算法和潜在语义索引算法,通过测试发现,关键字匹配算法在准确度方面不如潜在语义索引算法。在3 Gbit/s数据流量下,设置相同的关键字进行过滤测试,表2是实验中的测试数据,可以看出潜在语义索引算法的优势很明显。

表2 内容过滤算法测试数据

3.3 IP碎片处理技术

接入系统需要对应用层的IP碎片进行重组,以便对这些碎片进行统一数据封装。IP碎片重组在计算机网络中属于1个常见问题。在处理IP数据之前需要将可能的碎片重新组合,以保证在处理数据时的完整性。

Linux内核网络协议栈中实现了IP碎片重组的完整过程。每个碎片序列通过ipq结构进行组织,所有ipq结构通过Hash散列到1个ipq_hash[]数组中,具有相同Hash值的ipq通过链表链接起来,这是典型的链式开放地址Hash查找。此外,每个ipq通过1个双向链表维护当前序列中所有的IP碎片包。

在系统中,面临着同样的问题,可以采用上述类似的思想。但在网络处理器中,还存在许多其他特殊情况,需要针对网络处理器平台进行修改。

1)收到的碎片数据包不能像LINUX内核那样直接挂到ipq的双向链表中,需要先进行内存搬移。Hash表中的所有ipq节点通过双向链表(struct hlist_node)连接,便于插入和删除。Hash运算采用Linux内核中标准Jhash算法。散列表的维护相对容易,只需对Linux内核中相关接口进行移植即可。

2)在完成重组、封装后,如果报文长度大于以太网最大帧长,那么在发送数据包时,需要进行重新分片。

3)需要维护一个ipq的LRU队列,以便ipq维护程序能快速回收超时节点。Hash表中所有ipq节点按照先进先出的顺序维护一个双向链表。通过这个双向链表能够快速定位Hash表中的超时节点。可以在管理CORE的多任务系统中添加一个清理超时节点的任务,这个任务应该是在关中断的情况下进行相关操作。

4)碎片序列的维护。首先,网络处理器中不能直接维护输入数据缓冲区,这些缓冲区属于系统资源,如不及时释放,会影响系统的吞吐率。所以,这里不能简单地将输入数据挂到ipq的碎片序列链表中,在挂接之前,应该先申请一块临时缓冲区保存当前碎片的数据。其次,在碎片收集时,需要重新申请一个系统缓冲区进行碎片拼装。拼装完成后,进行必要的处理,然后再决定是否发送该系统缓冲区中的IP包。

碎片重组模块涉及的数据结构如图4所示。

图4 数据结构组织

虽然需要进行多次内存搬移,但是碎片重组的效率还是通过多核处理器的并行处理得到提高。碎片重组过涉及到多核的并行处理,在操作关键数据结构时,需要用锁进行保护。平台提供商的SDK中提供了自旋锁和读写锁,为了统一接口,最好对SDK中的锁接口进行统一封装。

4 小结

到目前为止,网络内容管理方面的研究取得了一定成功,也有很多产品已经投入了使用,但是随着互联网不断地发展,现有的一些网络内容管理工具在效率和性能上存在一定问题,一般只能适用于中小型网络的使用,而对于骨干网没有很好的支持,而本文中使用的基于CN56xx网络处理器的硬件平台可以很好地解决如今网络流量大、处理效率低的问题。除此以外本文还详细描述了几种数据过滤方面的算发,在硬件能力强大的情况下,通过不断地优化算法来达到更好的性能,这是本文的最终目的。

[1]彭来献,田畅,郑少仁.网络处理器设计分析及其应用前景[J].电信科学,2001(1):61-64.

[2]雷振甲.计算机网络管理及系统开发[M].北京:电子工业出版社,2011.

[3]李慧君,徐鹰,李建民.网络监控系统的设计与实现[J].计算机与现代化,2004(8):65-66.

[4]王东滨,方滨兴,云晓春.基于Web管理的网络监测技术的设计与实现[J]. 计算机工程,2002(10):203-204.

[5]王新刚,柴乔林,李琳.基于Windows的综合网络性能监测系统[J].计算机应用研究,2002(10):90-92.

[6]Cavium Networks Corp.Cavium Networks OCTEON Plus CN54/5/6/7XX Hardware Reference Manual[EB/OL].[2011-08-21].http://www.caviumnetworks.com.

[7]吴佳骏,张兆庆.网络处理器任务调度[J].计算机应用研究,2007(8):34-37.

[8]黄国睿,张平,魏广博.多核处理器的关键技术及其发展趋势[J].计算机工程与设计,2009(10):2414-2418.

[9]张骏,樊晓桠,刘松鹤.多核、多线程处理器的低功耗设计技术研究[J].计算机科学,2007(10):301-305.

[10]SHAH N.Understanding network processors[EB/OL].[2011-08-21].http://www-soc.lip6.fr/~genius/UnderstandingNPs.pdf.gz.

[11]LEE B K,JOHN L K.NpBench:A benchmark suite for control plane and data plane applications for network processors[EB/OL].[2011-08-21].http://engineering.utsa.edu/~blee/npbench/npbench.pdf.

[12]林鸿飞.基于混合模式的文本过滤模型[J].计算机研究与发展,2001(9):1127-1131.

猜你喜欢
链表数据包处理器
二维隐蔽时间信道构建的研究*
基于Jpcap的网络数据包的监听与分析
基于二进制链表的粗糙集属性约简
跟麦咭学编程
SmartSniff
基于链表多分支路径树的云存储数据完整性验证机制
Imagination的ClearCallTM VoIP应用现可支持Cavium的OCTEON® Ⅲ多核处理器
ADI推出新一代SigmaDSP处理器
链表方式集中器抄表的设计
AItera推出Nios II系列软核处理器