欢迎来到学术参考网

一种基于IXP2800网络处理器的路由器的实现方法

发布时间:2015-07-09 11:30
摘 要 本文介绍了一种基于Intel 2800网络处理器实现路由器的方法,按照该方法设计的路由器可以线速处理10G流量的SDH数据。
关键字 网络处理器;路由器;10G

0 引言
随着Internet技术的飞速发展,新兴的网络业务不断出现, 要求网络设备具有线速处理能力,同时具有很强的灵活性,以满足不同的网络应用的需要。网络处理器就是为了解决这一问题而研制的一种网络设备,网络处理器既具有ASIC芯片的高速处理性能,同时又具有通用处理器的可编程特性,既能完成线速处理分组所要求的高性能硬件功能,又能保证系统的灵活性。
路由器作为网络核心设备,其性能直接影响到网络传输性能和效果。随着新业务的不断出现,路由器功能已经不仅仅是转发分组, 而需要提供新的服务: 如集成服务, 区分服务, 拥塞控制等等。同时, 人们还要求路由器能够支持灵活的配置并提供通用的编程平台。
网络处理器的特点恰好可以满足对路由器的新的要求。因此基于网络处理器设计路由器,正日益成为国内外相关研究的热点以及网络设备制造商的首选方案。

1 路由器体系结构的发展趋势

路由器的体系结构经历了从单处理器到并行处理器,从共享总线到交换结构的发展过程。第一代路由器中,全体线路接口共享内部总线,随着网络上业务量和接口模块的增加,总线上数据也随之增加,同时分组的寻路、转发都是由软件处理,加重了CPU 的处理负担,使路由器传输性能迅速下降。
第二代路由器增强了线路接口卡的功能, 该卡上配有一定容量的存储器和一个存储路由信息的本地Cache。第二代路由器提高了系统的效率, 但仍有两个问题未解决:第一,随着网络规模的扩大,各个端口上的数据流量越来越大,各个端口中包含到达不同目的地的流量越来越多,造成cache命中率下降,导致路由器性能下降。第二,共享总线的体系结构决定了一旦达到共享总线带宽的极限值,性能很难继续提高。
第三代路由器设计,逻辑上将控制功能和数据功能两个主要平面分开,控制平面负责路由表维护、设备管理和异常处理等功能;数据平面负责转发报文。控制平面又称之为慢速通道,是速度比较慢的通路,因此大部分数据流量不经过它,主要是少量的路由和协议通信报文。控制平面的大部分功能仍然在通用的处理器上由软件实现。数据平面负责转发数据报文,属于快速通道,线速处理数据报文。在数据平面的输入侧,报文经过分类,用目的IP地址查找路由并转发。在数据平面的输出侧,报文必须被调度或者排队;对简单的IP路由,意味着报文需要被放置到正确的输出端口队列中,但 QoS保证要求更高级的队列调度算法。
网络处理器数据平面和控制平面分离的体系结构非常适用于开发第三代的路由器。

2 Intel IXP2800网络处理器介绍

IXP2800网络处理器是Intel公司的新一代网络处理器,支持10Gbps流量数据处理,具有16个1.4GHz的微引擎和一个700Mhz的核心处理器Xscale,可配置3块RDRAM和4块QDR SRAM,支持标准的线卡/交换接口标准SPI-4.2或CSIX-L1。
IXP2800网络处理器具有以下的特点:
1) 采用多内核并行处理器结构。片内处理器按任务分为控制平面处理器(核心处理器)和数据层面处理器(微引擎)。控制平面处理器通常负责非实时的管理任务;数据平面处理器进行实时、线速数据分组处理。
2) 支持硬件多线程。为了提高网络处理器的资源利用率,每个微引擎还支持八个硬件线程。每个线程都有一套专门的硬件来存放上下文(Context),以获得线程切换的零开销。
3) 优化指令集和专用硬件加速处理单元。采用RISC 技术,结合多级流水线技术,大部分指令在一个时钟周期完成。针对网络协议处理特点,设置专用硬件加速处理单元,提供专用指令。
4) 优化的分级存储组织和分布式存取。在微引擎内部有大量的不同类别的寄存器、本地存储器、CAM,在微引擎外部有片内存储器Scratchpad。在网络处理器外部可以扩展大容量的片外存储器SRAM和SDRAM。多层次的存储组织为用户提供不同速率、不同容量的存储器,便于用户根据应用的需求灵活配置。另外,不同的存储器有独立的总线支持,程序模块可并行访问多种数据存储单元。
5) 硬件支持的环和队列操作。网络数据处理涉及很多队列或环的数据结构操作,而入队和出队操作需要多次访问内存,极大地影响了数据处理分组处理的周期。IXP2800中的SRAM控制器提供了基于SRAM的先入先出队列,通过硬件实现了环和队列操作。

3 基于网络处理器实现的路由器的结构

3.1 硬件体系结构

图1 硬件结构图

为了满足10G流量的数据处理能力和可扩展性的要求,一共使用了三台IXP2800网络处理器。POS成帧器的一个输入输出端与SDH网络相连,其一个输出端作为第一个入口IXP2800的输入,经过处理的数据,从第一个入口IXP2800输出到第二个入口IXP2800,数据经过相应的处理,从第二个入口IXP2800经过CSIX交换网络传输到出口IXP2800,然后通过出口IXP2800发送到成帧器,通过成帧器的输入输出端发送到SDH。至此,整个数据包的分类和路由完成。

3.2 网络处理器的软件模块结构


图2 IXP2800网络处理器的微码模块图

第一个入口IXP2800从功能上可以分为包接收模块,预分类和转发模块和SPI4发送模块。从Media接口接收进来的POS数据,经过PPP头部剥离后,完成预分类,根据IP数据包的类型,进行IPv4转发,或者IPv6转发。最后, SPI4发送模块通过SPI4接口把数据发送到第二个入口IXP2800,继续进行处理。
第二个入口IXP2800从功能上可以分为SPI4接收模块,分类模块,统计模块,cell(48字节长度的数据块)队列管理模块,cell调度模块和CSIX发送模块。从SPI4接口接收前一个IXP2800传输来的数据,通过分类器完成分类后,进行相应的统计,最后,经过cell队列管理模块,cell调度模块和CSIX发送模块,通过CSIX交换网络将数据发送到出口IXP2800。
出口IXP2800从功能上可以分为CSIX接收模块,包调度模块,包队列管理模块和包发送模块。通过CSIX交换网络接收前一个IXP2800发送来的数据,调度和队列管理功能后,通过Media接口发送出去。

3.3 资源分配和数据流的说明

3.3.1 第一个入口IXP2800的资源分配和数据流
包接收模块:该模块把接收到的数据写到DRAM,同时把数据描述符写到SRAM。SDH数据经过成帧器后,被组装成第二层数据包,MSF把数据包分割成一个个固定大小的微包。接收模块接收SPI-4总线上的微包,根据接收状态字,把微包组装成第二层数据包,把组成的数据帧从接收缓冲区复制到SDRAM中,同时,包描述符写到SRAM中。存放数据包的缓冲区的句柄和其余的关于数据包的描述信息通过Scratch Ring传给预分类和转发模块。
预分类和转发模块:该模块包括PPP剥离/预分类微块和IPv4/IPv6处理微块,共占用8个ME。
PPP剥离/预分类微块去掉数据包的第二层PPP头部,并根据PPP头部中相关字段的信息,把数据包分类成IPv4数据包,IPv6数据包,或者PPP控制数据包。PPP控制数据包交给XScale 核心处理器处理,其余的数据包交给相应的处理模块处理。
IPv4转发微块:该模块检查IP数据包是否是有效数据,如果是无效数据,丢弃该IP数据包。如果是有效的IP数据包,根据IP头部执行最长前缀匹配(LPM)算法,如果找到了一个匹配结果,在该数据包中做标记,交给统计模块;如果没有匹配的结果,则该IP数据包交给XScale core做进一步的处理。
IPv6处理微块:该模块包括IPv6转发子模块,隧道剥离和隧道封装子模块。IPv6转发子模块的功能同IPv4转发子模块的功能近似。隧道剥离子模块处理到达终点的封装了IPv6数据包的IPv4数据报。隧道封装子模块处理需要封装成IPv4的IPv6数据包。一个封装的IPv6数据包首先经过IPv4转发模块,经过LPM查询后,其下一跳信息标志一个隧道,则该数据包被发送给隧道剥离子模块,然后交给IPv6转发子模块,经过IPv6的LPM查询后,如果需要经过一个隧道,则交给隧道封装子模块,最后封装完成的数据包像IPv4数据包一样处理。
SPI4发送模块:该模块通过SPI4接口发送数据包。该模块与发送模块类似,只是没有了到调度模块的反馈,同时在每一个数据包之前加上了一些额外信息,一起发送给第二个入口IXP2800。
3.3.2 第二个入口IXP2800的资源分配和数据流
SPI4接收模块:该模块通过SPI4接口接收前一个入口IXP2800发送的数据,并组装成完整的IP数据包。该模块与包接收模块类似,只是在接收到的每一个数据包前有额外的描述信息,根据这些信息来形成数据包的包描述符。把包描述符写到scratch ring中交给分类模块。
分类模块:从scratch Ring中读取数据的描述信息,读取数据包头部,存储到传输寄存器中,使用分类器进行分类,并在每一个数据包的描述符中做出相应的标记。把做过标记的数据包的描述信息写到scratch ring中,给后续模块使用。
统计模块:从scratch ring中读取数据的描述信息,统计每一个类别的数据包的个数,统计完成后,把数据包的描述信息写到scratch ring中,给后续模块使用。
Cell队列管理模块:与包队列管理模块算法相同,只是包队列管理模块是基于数据包的,而该模块是基于cell的。
CSIX调度模块:与包调度模块的算法相同,只是包调度模块是基于数据包的,该模块是基于C帧(固定长度的数据块)来调度的。
CSIX发送模块:该模块从SPI4接口上发送数据包。该模块的算法与发送模块相同,只是发送模块是基于数据包发送的,而该模块是基于C帧发送的。
3.3.3 出口IXP2800的资源分配和数据流
CSIX接收模块:该模块从CSIX交换网络接收C帧,把它们组装成IP数据包。根据接收的数据,形成IP数据包的描述符信息,存储在Scratch ring中,交给后续模块处理。
包队列管理模块:该队列管理器在SRAM 队列上执行入队列和出队列操作,QM从scratch ring接收到一个来自分类模块的入对列请求,在队列上执行入队列操作;从调度ME得到出队列消息,在队列上执行出队列操作。当队列在空与非空之间转换时,QM通过邻居寄存器发送一个转换消息给调度,每完成一个出队列操作,QM就会向发送scratch ring中传递一个发送请求。
包调度模块:调度的功能就是从所有的队列中选择一个准备发送的packet后,向QM发送一个出队列请求,调度的另一个任务就是处理QM返回的对于出队列请求的回复消息。一共有两个线程:一个调度线程和一个QM消息处理线程。调度线程实际调度一个队列,并且给QM发送出队列请求。消息处理线程处理从QM回来的消息。
包发送模块:发送通过MSF向千兆网口发送数据包,发送模块从scratch ring中取出一个发送请求(来自QM,用来访问包描述符),并把取到的包切割成微包,并通过数据包描述信息中指定的端口发送出去,所有分段发送完之后,包缓冲区再循环使用。发送模块周期性地与调度模块通信,以通知调度有多少包发送成功,如果端口上队列中的包数目超过一个限定(就是指这个队列中的包被调度但是一直没有发送出去),就不再对这个端口上的队列进行调度。

4 结束语

本文介绍了一种基于Intel IXP2800网络处理器的可以处理10G数据流量的路由器的实现方法,在一些模块的设计上使用了比较简单的方法,随着各个模块的逐步完善,通过该设计实现的路由器的灵活性必将更好,效率必将更高。

参考文献

1 Douglas E. Comer着,张建忠,陶智华等译,吴功宜审校.《网络处理器与网络系统设计》. 机械工业出版社,2004
2 Andrew aum 着,潘爱民 译,徐明伟 审.《计算机网络》.清华大学出版社
3 谭章熹, 林 闯, 任丰源, 等.网络处理器的分析与研究.软件学报,2003,14
4 陈云芝,白英彩,李小勇.《基于IXP1200网络处理器构建路由器研究》.计算机应用与软件,2005.5
5 李洪杰,张宏科.基于网络处理器构建的核心路由器方案研究.计算机工程与应用,2003.6
6 施 恩, 郑爱蓉, 杨 彬, 陈 宇, 许榕生.基于网络处理器实现千兆级多功能路由器.计算机应用,2005.3
7 李金库,张德运,杨振江,廖明涛.基于网络处理器的DiffServ边界路由器研究与实现.微电子与计算机,2004.7
8
9 Intel Corporation, Intel IXP2800 Network Processor Hardware Reference Manual 2005
10 Intel Corporation, Intel Internet Exchange Architecture Software Building Blocks Applications Design Guide 2005
11 ntel Corporation, Intel Internet Exchange Architecture Software Building Blocks Developer’s Manual 2005
12 Intel Corporation, Intel Internet Exchange Architecture Software Building Blocks Reference Manual 2005
13 Intel Corporation, Intel IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual 2005

上一篇:无线传感器网络中路由协议的能量有效性设计

下一篇:基于Bayes的邮件过滤系统的研究与设计