摘要:网络处理器是一种可编程处理器,用于高效的处理网络中的数据流。网络处理器具有广泛的用途,基于网络处理器的路由器同使用通用处理器的路由器和使用专用集成电路的路由器相比,既具有快速的特点又具有灵活性的特点。
1 前言
网络处理器是现代综合业务数据网络不断发展更新的产物,是一种基于可编程 ASIC 结 构的新一代SoC 芯片。它是为了适应下一代高速网络特点,即为了能够提供Qos,能够不断 适应新的网络应用,能够发展新的网络管理模式以及能够快速响应市场对新的网络功能的需 求而推出的一种新的芯片产品。网络处理器同时具有GPP 和ASIC 两方面的优点,即具有专用 集成芯片线速转发报文的高速度特性同时又具有通用芯片的可编程性。近来对于网络处理器 的研究非常活跃,国际各知名计算机芯片生产公司也纷纷推出自己的产品和标准。INTEL IXA(INTEL Internet Exchange Architecture,互联网交换架构) 作为一种网络处理架构, 是INTEL 公司网络处理器的技术基础。
在互联网中,路由器具有核心的地位。互联网一直在不断向融合语音、数据等多种业务 的综合开放结构发展。因此,路由器必须提供更高的吞吐量、服务质量保证、可靠性和更多 的网络管理功能。为了适应互联网的发展变化,路由器的结构也一直在发展变化之中。 最初的路由器通常采用单一的通用CPU 来负责分组的处理和转发。这种结构是在单一 CPU 中通过软件来实现分组处理和转发,它的特点是实现简单,可以通过修改软件来提供新 的业务,缺点是单一CPU 处理能力有限,全软件实现也难于实现高速分组转发。因此,在高速 路由器中普遍采用了专用集成电路来负责数据的处理和转发,采用通用CPU 来负责路由器 的管理。
高速的专用集成电路,可以满足日益增长的带宽需求。但是由于专用集成电路的开 发时间长,并且在灵活性方面受到极大的限制,而不断出现的新的业务却期望厂商能够在最短 时间内更新路由器的功能。网络处理器集中了专用集成电路的高速处理能力,同时还具有可 编程,扩展性强的特点,能够很快适应业务的发展变化。因此基于网络处理器的路由器得到了 许多网络设备生产商和研究机构的重视,目前已有一些基于网络处理器的路由器产品问世。
2 网络处理器简介
网络处理器是一个被集成在一个半导体设备上的可编程器件。它主要用于优化网络处 理任务,这些任务是:接收包,处理包和转发包。典型的网络处理器由一个核心处理器和许 多包处理引擎组成。它利用并行分布式和流水线架构,并把高速度、灵活性的良好特性和可 扩充性相结合来提供更好的性能。 网络处理器由两类硬件功能单元组成,即网络处理器单元和专用的智能协处理器/加 速器。网络处理器运行的软件是经过优化的,支持系统级应用和网络专有功能。网络处理器 单元是网络处理器核心,它提供高速、大容量智能处理数据包功能,包括数据解析、分类和转 发等等,因此网络处理器单元常常被称为数据包处理引擎。不同的协处理器则实现包分段/ 重组、加速查表、队列/缓冲区管理、顺序管理、存储器控制和多播支持等功能。
为了保证关键数据包的实时处理, 网络处理器一般将网络处理任务划分为数据层和控 制层两个层面, 控制层面专门负责非实时性的管理和策略控制等,数据层面承载高速易变的 数据实时处理。网络处理器位于数据通路物理接口处理器和背板之间, 它的典型功能包括: 分段和重组、协议识别和分类、排队和存取控制、流量整形和流量工程、服务质量。网络处 理器的主要特征是其可编程特性和ASIC 处理性能的结合。
这一特征引发了通信系统设计的 革新,它使系统设计者摆脱了原先复杂、零散的设计,将注意力放在高层服务上,缩短产品推 向市场的时间,延长产品的生命周期,这也是生产商在激烈竞争中得以生存和发展的关键。表 1 中列出了网络处理器七个关键的特性,它们来源于下一代网络对网络处理器编程能力、性 能和开放性的需求。
表 1:网络处理器的七大特性
总之,网络处理器技术是网络发展的趋向,它不仅可以减少开发商的开发成本,缩短开发 时间,加快产品升级换代的能力,同时也保护用户的利益,减少用户在网络新功能需要的投资 和升级换代的费用,所以无论在技术上还是在经济上都具有重要意义。
3 IXP1200 网络处理器架构 IXP1200 由六个可编程的微引擎和一个协调系统行为的工作在200MHz 的StrongARM 内 核组成。每个微引擎有四个硬件线程,在IXP1200 芯片上一共有24 个线程。除了微引擎, IXP1200 还用一些别的特殊的硬件设备来辅助进行包处理。 微引擎和StrongARM 还共享有 一个可编程的HASH 引擎和专门的队列,IXP1200 网络处理器的架构图如图1 所示。
下面我们将对 IXP1200 中的微引擎和StrongARM 做一个详细的介绍。微引擎有一个特 别适用于处理网络数据的指令集。微引擎除了可以在单个指令里执行位、字节、和长字操作外,还有带有移位和循环移位的算术和逻辑操作。但是微引擎没有整数乘或除、也没有浮点 数操作。微引擎的乘法是通过反复进行加运算来完成的。在微引擎中每个指令占用一个长字 (32 位)的存储空间。每个微引擎有一个独立的可容纳1024 条指令的4KB 的指令存储器。 在微引擎开始运行之前,StrongARM 内核上的代码负责给这个指令存储器装入代码。一旦微 引擎运行时,指令以一个五阶段的流水线来运行,并且当流水线充满时,平均只需用一个周 期去执行一条指令。当指令阻塞在存储器或设备存取操作完成时,或当跳转指令迫使在流水 线中的某些指令退出执行,平均的指令执行时间就会长于一个周期。