几年前,以Intel为代表的国际芯片厂商推出了具有革命性意义的网络处理器(NP),业界观察家也曾十分看好并极力称颂,NP将引发不可预期的网络革命,然而,NP并没有如观察家所期待的那样结出硕果,各NP厂商的NP业务基本都处于亏损状态。2006年6月27日,Intel正式宣布把NP业务卖给Marvell,同时联想到2003年IBM把NP业务卖给Hifn。
从2002年开始NP倒是在网络安全领域开始应用,尤其在2004年后的中国信息安全领域。对于国内防火墙厂商而言,非常希望采用NP技术加快缩短和国外厂商的差距,加快千兆安全产品的开发,然而到目前为止国际、国内厂商推出的千兆NP安全产品还处于雷声大,雨点小的状态,各厂家的产品更多是在实验室和宣传材料上。针对这种情况,人们不仅要问,NP到底怎么了?它有那些优点与不足,今后它会有怎样的发展?
NP的历史与现状
最早提出网络处理器开发的时间是1997年,正式商用芯片于2000年面世。Intel、IBM、Motorola、MMC Networks、Ezchip、Lucent、Vitesse(Sitera)等厂商参与了网络处理器的早期研究。这一阶段仅仅是研究阶段,而真正将网络处理器投入商业应用的厂商是中国的华为,2000年华为开始开发基于网络处理器的核心路由器,并率先推出了基于NP的NE80/NE40系列核心路由器产品。到目前为止,NP在高速线卡和路由器上取得了一定的成功。
据国际网络处理器大会(Network Processors Conference)的定义:网络处理器是一种应用于特定通信领域的任务,如包处理、协议分析、路由查找、声音/数据的汇聚等的可编程器件。目前,比较典型的产品有Marvell(Intel)公司的IXP1200系列、IXP2400系列和IXP2800系列和Freescale(motorola)公司的C-5、Cisco公司的Toaster 2、Hifn(IBM)的NP3G4S等。
目前,NP 在网络系统的总体结构中可以作为下述角色,可以看到NP的位置基本是处于网络的边沿:
替代一个传统的CPU。
附加在一个传统的CPU 上,由NP 完成特殊的任务。
在网络接口卡的输入通路上,承担入口分组处理任务。
在网络接口卡与交换矩阵之间作为网络接口卡和交换矩阵的中介。
在交换矩阵和输出接口之间控制输出端口的访问。
在网络接口卡的输出通路上承担出口分组处理任务。
像其它端口一样连接在交换矩阵上作为一个中间站
目前网络处理器面临的挑战
由于网络处理器是个复杂的器件,可能用于多种目的,因此设计NP 面临了各种挑战,这些挑战直接导致了现在NP的不成熟和有限的应用范围。
可编程性和处理速度:可编程性和处理速度的权衡体现在选择传统的通用指令集CPU 还是选择专用芯片上,前者用在低速系统中,后者用在高速系统中。这种选择成为NP 设计者需要考虑的重要因素,它与NP 的体系结构和指令集设计息息相关。设计者需对应用目标有准确的把握,才能在体系结构的设计中对可编程性与处理速度做出恰当的考虑,NP的指令主要面向的包的快速转发的应用。
速度和功能:为了高速处理网络领域特定的任务,需要对NP 的指令集进行优化。随着任务的扩展,需要增加更多的指令,这样NP 的功能就增强了。但是,不同的指令可能需要不同的执行时间,处理器必须包含复杂的调度和同步机制,反过来增加了时间开销和设计复杂性。因此,速度和功能之间必须有很好的折衷,灵活性与性能是一对矛盾。
性能--数据速率、包速率和包的突发性的综合考虑。首先,由于NP 应用的范围很广,不存在可特征化的NP操作的小任务集合,于是需要在大量的任务模式下测量NP 的性能,而基准程序在不同NP 之间不可重用。第二,NP 的测量需要在流通负载下进行,而包的突发性使得流量特征很难刻画。稳定的包流与现实网络的情况是不一致的,精确的评估需要采用突发分布。不幸的是网络流量模型一直是困扰网络领域的一大问题。于是用于性能测试的流量负载选择的困难性就可想而知了,其实际应用效果也很难把握。
协处理器设计:协处理器有两种工作方式--旁路调用与数据通路。以旁路调用方式工作的协处理器类似于过程调用,由主处理器根据需要调用。而数据通路上的协处理器则以流水线方式处理数据,在数据通过它时对数据进行修改。后者有两个问题。首先,为了避免成为瓶颈,数据通路上的协处理器必须以线速度工作;第二,由于这些协处理器更紧密地集成在设计中,很难进行改变,也谈不上丝毫的灵活性。以旁路调用方式工作的协处理器可以根据需要扩展,增加新的协处理器,不需要对体系结构作太大改动。但是,旁路调用时主处理器与协处理器之间大量数据传输产生的开销将影响性能。例如如果把VPN加密部分作为NP的旁路协处理器,性能NP和加密的性能都急剧下降,如果VPN完全有主CPU实现,其性能将更低。
流水线的均衡与同步。如果流水线设计成不均衡的,最慢的阶段会成为流水线的瓶颈。
并行--吞吐量与包的乱序:并行体系结构通常都要有维护包的顺序的同步机制,包的乱序将严重影响吞吐量。
并行--速度与状态信息共享:任何特定时刻只有一个特定处理器可以修改共享的信息,这必然导致并行速度降低。网络系统中状态的频繁更新,使得状态信息共享对速度的影响变得更严重。包的分类是一个典型的例子。静态的包分类(即包头的值只需要与常数进行比较)能够获得并行带来的N 倍速度;而动态的包分类(即由一组数据流来决定类别)由于要保留状态信息,性能必然要下降。
存储器--速度与可编程性:存储器通常被划分成几个存储体,允许同时访问不同的存储体。在多数情况下,为了获得最大的访存速度,必须刻意地把数据放到存储体中以避免访存冲突。这自然会影响可编程性:程序员需要了解存储体,给编程带来困难。
编程语言的权衡:如果想获得强大的功能,就需要在易编程性与速度之间进行折衷。高级语言虽然容易使用,但映射到底层硬件结构时效率较低。如果使用汇编语言来获得最大的吞吐量,但扩展性与相应变化的应用将很慢。如果将一种语言限制在某个特定应用上,编译器能够产生高度优化的代码。随着一种语言功能的扩展,其所产生的代码优化也越来越困难。
多线程--吞吐量与可编程性:为了获得较高的吞吐量NP 必须支持多线程。线程的主要缺点是程序员必须协助线程的活动,从而增加了编程的复杂性。即使在硬件能够自动处理线程的抢占和切换时,程序员也许还是需要确保线程与共享资源使用之间的协调。因此,在高吞吐量和可编程性之间需要作出权衡。
千兆网络安全,NP力不从心
现在用于安全的NP比较有代表的是Hifn 的 4GS3和Marvell的 IXP2400。4GS3网络处理器包含16个协议处理器,可同时执行32个线程,具有并行处理32数据分组的能力;采用Embedded Power PC负责NP非实时管理控制。IXP2400 网络处理器通过8个多线程的,相互独立的32位微引擎整合了一个Intel Xscale核心,它被设计成大范围的接入和边缘应用,包括多服务交换,路由,宽带接入装置和无线机构系统等等。4GS3和IXP2400技术侧重点有所不同,前者侧重于2-3层的数据转发,主要面向路由器设计,并保留着一部分ASIC特性;而IXP2400面向的层次更多一些,更灵活一些。
在国际NP技术论坛(www.npforum.org)进行的一些性能基准测试中,IXP2400在MPLS VPN、IPv6数据包处理以及其它方面比NP4GS3有出色的性能表现。采用NP4GS3芯片千兆高端防火墙更多倾向于2-3层的数据转发,主要面向路由功能设计。作为防火墙的应用不仅要关注数据转发的性能,同时也要考虑兼顾分片报文重组,NAT,QOS,ARP处理,深度检测等能力。可以说NP4GS3芯片在防火墙应用方面的扩展有一定的局限性,而且目前还没有下一代产品的更新计划。
在防火墙的性能方面,尽管NP4GS3和IXP2400的芯片可以使防火墙的数据包的在纯粹的转发性能非常优秀,但是在每秒新建连接数这个环节和传统的X86构架的防火墙会有2倍以上的差距。
可以看出如果使用一个IXP2400来做4个千兆口,那么对于每个IP包的处理理论上不可以超过100*8*n,这还是理想情况下,也就是让微引擎处于绝对运行状态,而不是等待状态。实际上这是很难做到的,因为微引擎在访问内存的、使用寄存器、访问外围器件的时候,虽然只要一个指令,但是一般都有延时,多的可能达到100多个Cycles,如访问DRAM。根据经验,一般微引擎的利用率都在70%以下。
处理一个IP报文的过程是非常复杂的,一般都需要10K个Cycles以上才能完成处理,另外如果应用复杂的话,如防火墙应用中,还要兼顾分片报文重组,NAT,QOS,ARP处理,深度检测,VPN等,这些功能加上去后,处理的时间就会大大增加;因此使用单2400做出的防火墙可能在单纯包转发上到达线速(这也是测试结果的来由),但是用户并不是将一个防火墙当作路由器来用,而是需要它完成一系列安全处理功能,因此只要把包过滤、NAT、抗DOS攻击、抗蠕虫攻击等功能加上后,性能就会成倍的下降。
另外,每个微引擎可以存放4096条40bit长度的指令,这个空间对于防火墙的应用来说相对不足。NP微引擎编程难度是非常大的,高端NP的防火墙稳定性需要很长的开发周期,而应用的更新周期一般为三个月。总的来说,使用网络处理器设计整个系统会从一定程度上降低整个系统对于应该修改或者升级需求方面的响应速度,固定大小的微码空间也限制了复杂应用的设计,也限制了灵活性。
此外,NP往往不支持浮点运算,而网络安全应用很多需要浮点,这将大大降低NP的应用范围。
网络处理器的发展趋势
网络处理器是性能与灵活性的一种折中,在不是十分复杂的高速网络应用中,网络处理器是比较适合的。网络处理器比较专注与2-4层数据转发,因此比较适合做网络设备的接入部分,这也是NP的发展方向。
NP技术其优势在于网络底层数据的转发和处理,但如果要实现安全策略的控制和审核,特别是对于应用层的深度控制方面还需要大量的研发工作,NP不适合千兆网络安全。作为安全领域的ACIS技术虽然开发难度大,但却能够保障系统的效率并很好地集成防火墙的功能,在今后网络安全防护的路途上,防火墙采用ASIC芯片技术将要成为主导地位。
当前,针对网络处理器的问题,一些厂商也提出了自己的设计理念和产品。未来几年内,在技术和市场的发展过程中,网络处理器技术的发展将呈现如下趋势:
(1)特定应用性能不断提高:随着生产工艺的提高和体系结构的进一步优化(比如采用高速缓存和专业化的片内组件),网络处理器将会有更高的处理速度、更小的尺寸和功耗、更高的可扩展性、更方便实用的开发工具,在发展过程中NP必将进一步ASIC化。
(2)标准化:目前各厂家的网络处理器虽然有大致相同的基本结构和特点,但在具体的硬件实现和软件开发工具上各有不同。为了解决产品互连互通和软件可移植性等问题,必须解决标准化问题,必将逐步克服即便同一厂商的NP也不能移植的问题。
(3)产品系列化: 不同的网络应用对网络处理器的要求各不相同,很难找到一种能够全面顾及性能、灵活性和成本的“通用”网络处理器。因此针对IP网络而言,最现实的解决方案是采用一系列的网络处理器,分别针对不同的网络处理应用。
(4)逐步出现第3方队伍:将出现一支第3方队伍,分别在硬件组件、软件应用、开发工具和其他子系统方面推出自己的产品,并形成一种以网络处理器为核心的产品和价值链,克服现在各厂家单打独斗的现象。
(5)体系结构不断进化:体系结构的进化主要表现在并行结构、协处理器和通信体系结构3个方面。为了提高性能,网络处理器中部分常用单元将以ASIC协处理器的形式出现,同时原先一些片外协处理器也将逐步集成到网络处理器芯片内部。新一代网络处理器不但要增强处理器内部处理单元(PE)间的通信能力而且应改进处理器外部接口的通信能力。
基本结论
NP技术属于比较新的技术,必然存在潜在的风险,无论是4GS3还是IXP2400最大的风险就是后续的支持问题。IBM已经把4GS3卖了,现在Intel也把IXP2000系列卖了,到目前为止最大的NP厂商都没有继续开发的计划,这不得不令人联想到当初宣传的ATM技术,结果却是不能得到广泛应用。
总之,作为一种新技术,NP现在依然不太成熟,今后3到5年内NP依然不适合千兆网络安全。当然,作为路由加速的NP肯定会与通用CPU、ASIC等技术长期共存,其技术也会进一步发展,我们相信网络处理器必将开拓一片新的蓝海。