1 网络处理器硬件架构
IXP2400网络处理器是Intel公司在2002年推出的第二代互联网交换架构IXA网络处理器。它面向中高端应用,可用于实现OC-48的网络路由交换设备。IXP2400的结构充分体现了片上系统SoC (System onChip)的思想。IXP2400结构框图如图l所示,它的内部主要包括8个完全可编程的8线程微引擎ME和1个XSc ale核。此外,还有用于连接外部设备MAC的媒质和交换结构接口MSF单元、连接各种存储器和总线的接口单元等。这些单元通过内部的高速数据总线和控制总线彼此协作。
XScale核是32位的嵌入式精简指令集处理器,时钟频率是600MHz,具有32KB的指令缓存和32KB的数据缓存,它在
IXP2400中的每个微引擎就是一个32位精简指令集RISC处理器,时钟频率是600MHz,可以由8个并行硬件线程共享。数据包的接收、处理和发送等任务均由微引擎指令存储区中微代码程序的各线程并行执行。网络处理器数据的高速转发正是因为充分利用了硬件的并行性。
IXP2400通过数据线连接着各种存储设备,如SRAM和DRAM等。DRMA主要用于存放需要处理和转发的数据包、路由表等大型数据结构;SRAM主要存放对数据包包头进行处理所需的重要信息和数据包的队列描述等内容,如表、缓冲区描述符。
IXP2400具有丰富的标准高速I/0接口,包括物理链路接口、交换接口、存储器接口、PCI总线接口,能够方便地与其他厂家的设备进行接口、互连;拥有专用硬件加速处理单元;采用专用硬件对特定协议操作进行协处理:如CRC、哈希查找、树查找、字符匹配;针对安全产品,提供加/解密、大数运算等硬件单元。
综上所述,IXP2400拥有网络处理的一般特点,从系统角度看,IXP2400属于一个并行式的多处理器共享总线的计算机系统。
2 网络处理器软件开发平台
Intel提供丁网络处理器开发平台,称为Intd IXA可移植框架(Intel IXA portability framework)。IXP2400软件开发可移植框架层次图如图2所示。
Intel IXA可移植框架中,将数据的处理分为两个层次:数据面(Data Plane,也称为Fast Path)处理和控制面(Control Plane,也称为Slow Path)处理。
数据平面主要运行在微引擎处理之上,充分利用数据包的无关性,采取并行处理方式,用于实现高速转发数据包的处理功能,具有线速执行特点。数据面的数据包处理可分为若干微模块Microblock。各个微模块之间相互独立,可实现数据面层次上的可移植性。
控制平面一般运行在网络处理器核上,处理各种通信协议、更新路由表、管理数据平面任务与状态、完成高层的QoS控制等。这些操作的性能要求低于数据层面,因此通常采用高性能通用处理器硬件平台。为了有效支持网络处理功能,控制平面与数据平面之间存在复杂的信息交互与依赖关系。IXP2400的软件开发分为内核程序和微代码两部分。XScale内孩的开发通常使用基于嵌入式操作系统集成开发工具,如WindRiver公司提供的基于嵌入式操作系统VxWorks的集成开发工具Tornado或BMR TEC CO提供的基于嵌入式操作系统Montavista Linux的集成开发工具Teja。Teja开发工具给基于网络处理器的嵌入式开发带来极大的方便,它能缩短开发周期,优化生成代码,提高代码性能,而且生成的代码很容易移植到不同的目标系统。使用Teja集成开发工具,能独立于复杂的硬件而将网络应用表达为状态机。状态机逻辑可以被映射到选定的目标网络处理器的分布资源,基于这种逻辑设计和到硬件的逻辑映射,生成优化的目标代码(C、C++和MicroC)并且编译生成终的映像文件。此外,Teja对于此逻辑和系统设计还能提供模拟测试和调试功能;IXP2400中对微引擎的编程使用Intel公司提供的Developer Workbench开发环境,主要使用微代码来进行编程。Developer Workbench提供了完善的编译、链接、仿真和调试功能。
Intel IXA可移植框架中重要的组成部分就是在微引擎上和XScale核上开发的代码模块。基于不同硬件开发的代码模块分别为微模块和组件(Core component)。每个模块都代表了一个进行包处理的代码单元。这里实际上引入了构件的思想.各种模块以一定的顺序组织在一起,形成一个特定的应用。
3 基于网络处理器IXP2400的路由器体系结构
从本质上说,路由器是一种进行网络数据包转发的网络设备,其体系结构可分为三大部分:(1)输入/输出端口;(2)路由计算及处理;(3)交换结构。其中路由计算和处理是路由器的关键,对路由器高性能和灵活性起决定作用。由于网络处理器IXP2400具有高速和灵活性,本文采用IXP2400作为路由计算和处理部分,提出了一种全双工、可扩展的高性能路由器系统体系结构,如图3所示。
在图3中,IXP2400是系统部分,负责对数据包进行转发,实现路由功能。SBAM是IXP2400的外接存储设备,通过SBAM Controller与IXP2400连接,主要实现存储数据包处理过程中用到的发送列队、查找表等数据结构。DRAM也是IXP2400外接的存储设备,通过DRAM Controller与IXP2400连接,主要存储数据包和路由表。控制处理器是IXP2400的外接处理器,通过PCIController与 IXP2400连接,主要为系统提供高层的控制和管理功能。物理层设备收发数据包,通过介质和交换接口MSF与IXP2400连接。交换结构作为处理器与外部接口的传输枢纽,对整个系统的性能起着至关重要的作用。它主要分为总线、Cross-bar(纵横制矩阵)和共享内存三种方式。Cross-bar同其他技术相比,具有成本低,可扩展性良好和非阻塞特性,并且可以根据实际需要扩充宽带。
4 基于网络处理器IXP2400的路由器系统处理软件模型
基于IXP2400的路由器软件模块框图如图4 所示。入口(Ingress)IXP2400首先通过IXF1104或IXF6048从外部网络接收数据包,然后对数据进行处理,并将处理后的数据通过交换接口芯片发送到交换结构(SF);出口(Egress)IXP2400首先通过交换接口芯片从交换结构接收数据,然后对数据包进行处理,通过 IXFll04或IXF6048将数据包发送出去。微引擎的编程模式有流水线模式(HTC)和线程池(POTS)模式,二者各有优缺点。本文采用了HTC 和POTS相结合的编程模式,扬长避短,以取得的处理效率。所有的Context Pipe Stage模块(如包接收、包发送、列队管理等)各自占据一个单独的微引擎,采用HTC方式,每个Context Pipe Stage模块都映射到单独的一个微引擎上。而Funcational Pipeline映射到4个微引擎上,采用POTS方式,执行PPP Decap(数据包解封装)、Classfieation(数据包分类)和IP Forwarding(IP数据包转发)等操作。
如图4所示,系统的数据处理由以下模块组成:
(1)包接收模块。包接收(Packet Rx)模块是一个与低层硬件密切相关的驱动模块。负责接收来自外部网络的数据包分片mpacke,并将mpacket重组得到一个完整的数据包。将重组后的数据包写入DRAM,建立包头信息,Packet Rx模块使用一个微引擎上的8个Thread来进行mpacket包的接收和重组,每个Thread负责处理一个mpaeket 。 (2)解封装/分类/过滤模块。数据包处理模块包括PPP解封装、分类、转发、过滤子模块。这些子模块组成Funeational Pipeline.运行在4个微引擎、32个线程上。PPP解封装子模块通过修改Metadata中的offset和size,将MAC帧头去掉,提取 IP数据帧,实现数据包的解封装功能。分类子模块执行分类操作,将数据包分为IPv4、IPv6和ARP等类型。如果是ARP数据包,将其标记为异常数据包送到Xscale Core作进一步处理;否则,将数据包传送到下一个处理模块处理。
(3)包转发模块。首先检查包头是否符合RFC2460规范。如果不符合,则将该包丢弃;否则,根据IP头进行长前缀匹配LPM查找,得到Next Hop ID(下一跳ID)、Fabric Blade ID和Output Port三个参数。如果LPM没有找到匹配表项,则将包标记为异常提交给Xscale Core作进一步的处理;否则,根据Next Hop ID进行表查询,获得PPP头信息。将数据包封装为PPP格式之
(4)队列管理模块。管理模块是一个运行在单个微引擎的驱动模块,负责利用SRAM Controller中的Q-Array硬件结构对发送队列执行解封装Decap和封装Encap操作。
(5)发送调度模块。模块将处理来自Fabric的流量控制信息、来自QM的队列转换信息和来自MSF的发送状态机。
(6)CSIX发送模块。该模块是位于单个微引擎的驱动模块,接收来自QM发送的消息,对于每次发送请求,微模块将每个Cframer写入发送缓冲TBUF,通过MSF发送状态机发送到Fabric。
(7)CSIX接收模块。接收来自CSIX Fabric的Cframer,并将其重组为IP数据包。
(8)包封装模块。为接收到的信息添加包头,将IP Packet封装为PPP格式,并向队列管理发送加入队列请求,请求将封装后的包加入到相应的发送队列。
(9)出口的队列模块。该模块与信元队列模块的区别在于列队中传递的是分组而不是信元。对于每个出队请求,分组队列模块向调度模块返回一个出队响应消息。
(10)出口包调度模块。出口包调度模块是基于分组的调度,不需要处理来自Fabric的流控信息,出口调度模块对端口进行WRR调度,对每个端口的队列可进行DRR(Deficit Round Robin)调度。
(11)包发送模块。通过媒体介质接口发送分组,将分组分段成mpacket,并写入TBUF,通过MSF状态机进行发送。
本文以Intel IXF2400网络处理器为例,讨论了网络处理器硬件结构和软件开发技术,并在此基础上提出了一种基于网络处理器的路由器体系结构和软件开发流程。在今后几年里,基于网络处理器的路由器将有着非常巨大的发展空间,但其发展也是一个复杂的、长期的过程,将面临严峻的挑战。
[1]. RISC datasheet https://www.dzsc.com/datasheet/RISC_1189725.html.
[2]. PCI datasheet https://www.dzsc.com/datasheet/PCI_1201469.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。