'P>
'P>
IXP2400的软件开发也分为内核程序和微代码两部分。XSCALE内核的开发通常可以使用基于ARM平台嵌入式操作系统开发工具链,如WINDRIVER公司的TORNADO或基于GNU的LINUX工具链等;另一部分是对微引擎的编程,这部分使用INTEL公司提供的DEVELOPER WORKBENCH开发环境,主要使用微代码来进行编程。DEVELOPER WORKBENCH提供了完善的编译、链接、仿真和调试功能。为了方便开发人员开发,消除平面之间通信等一些细节,INTEL提供了它的网络处理器开发模型,称为IXA可移植框架(PORTABILITY FRAMEWORK)如图2所示。INTEL IXA可移植框架中最重要的组成部分就是在微引擎上和XSCALE核上开发的代码模型。基于不同硬件上开发的代码模块分别为微模块(MICROBLOCK)和核心组件(CORE COMPONENT)。每一个模块都代表了一个进行包处理的代码单元。这里实际上引入了构件的思想,开发人员将各种模块以一定的顺序组织在一起,组成一个特定的应用。下面分别对框架中的各个层次进行讨论。(1)微模块数据平面的微引擎在逻辑上分成一个或多个微模块(MICROBLOCK)。每一个微模块都是一个宏或者一个微引擎或由INTEL提供的一些底层库写成的函数。微模块之间彼此独立,这些就提高了代码的可重用性,同时也简化了微引擎手代码的编写。微引擎与INTEL XSCALE核共享一部分内存,大部分网络包的处理都通过微引擎来进行,一些例外的包将传递给INTEL XSCALE核心组件来处理。微模块从功能上一般包括与一些高层协议相关包的处理微模块和与硬件紧密相关的微模块。前者包括IPV4转发、网桥、网络地址转换(NAT)等;后者包括包的接收和发送模块及分组队列管理模块等。(2)核心组件核心组件(CORE COMPONENT)运行在XSCALE核上,实现了相关微模块的配置、管理和例外处理等工作。一个核心组件可能管理着多于一个微模块。具体来讲,核心组件主要完成以下一些功能:配置微模块(通过引入变量的静态配置和控制模块的动态配置);初始化维护一些可能被其它应用程序修改的数据结构;提供了一个例外处理和控制消息处理机制来处理微模块发送过来的包和消息。(3)微引擎数据平面优化库微引擎数据平面优化库(OPTIMIZED MICROENGINE DATA PLANE LIBRARY)包括一些底层的微引擎宏指令和用微引擎的特殊C语言写的函数库,用来编写微模块和一些微引擎的代码。这些为是经过INTEL优化的,非常高效,代码的占用小,同时也是非常底层的。库主要包含三信方面:对处理器硬件单元的操作,比如对微引擎内部的本地内存(LOCAL MEMORY)、临界区(CRITICAL SECTIONS)操作等;协议头的解析函数,如IPV4、IPV6协议等;哈希单元的查找,CRC等。(4)微模块基本设施库微模块基本设施库(MICROBLOCKS INFRASTRUCTURE LIBRARY)提供了访问暂存包描述符的API,DISPATCH LOOP的实现是通过它来完成的。一个DISPATCH LOOP将运行在一个微引擎内部线程之间的多个微模块组成一个MICROBLOCK组。关键的地方是,DISPATCH LOOP提供了一种多个微模块之间高效共享包的描述符、包头信息等重要数据结构的方式,实现了多个微模块间的数据传递。DISPATCH LOOP也提供了向其它DISPATCH LOOP也提供了向其它DISPATCH LOOP和XSCALE核之间发送和接收包的接口。(5)资源管理库资源管理库(RESOURCE MANAGEMENT LIBRARY)是XSCALE核的一个软件组件,它向内核提供了微引擎的API,比如硬件的资源管理接口,大大简化了硬件初始化的任务,配置和资源的共享;微模块与核心组件之间的通信API,开发者屏蔽了微引擎与XSCALE核之间通道的一些细节。(6)核心组件基本设施库核心组件基本设施库(CORE COMPONENTS INFRASTRUCTURELIBRARY)为XSCALE核心组件设计和构造提供了一些底层的API,同时也提供了组件之间传递包和消息的机制。其于核心组件基本设施库的一个核心组件一般都要包含以下函数:1个初始化函数;1个结束函数;1个或多个包的处理名句柄;1个或多个消息处理句柄。(7)操作系统服务层操作系统服务层(OPERATING SYSTEM SERVICES LAYER)对运行在XSCALE核上的代码提供了一个抽象层。开发人员编写的XSCALE核心运行代码包括资源管理库。应该利用这一层,而不是直接去利用操作系统提供的API,从而提高系统的可移植性。OSSL主要提供了以下几类接口:线程管理、同步原语、互斥操作、定时器、内存管理和消息日志。(8)控制平面平台开发工具包控制平面的PDK(PLATFORM DEVELOPMENT KIT)为XSCALE核心组件与运行控制平面的软件之间提供了接口。它所提供的API编程接口现在是符合国际网络处理器论坛(NPF)提出的标准的,各种控制平面的网络协议栈和用它可以很方便的集成进来。3 网络处理器应用实例利用INTEL IXA可移植框架来实现INTEL IXP2400的一个简单路由转发系统。数据分组在IXP2400中的流动过程如下:以太网MAC器件接收数据,放入MSD单元的接收缓存当中,向微引擎发出信号,表示数据已经收到,微引擎将接收缓存中数据传输到SDRAM,微引擎通过对MSF总线单元的访问命令将前几个字节(分组头)传送到传输寄存器中,微引擎对分组的以太网头进行修改,而将数据分组写入发送队列,然后通知MSF单元将数据分组传送给适当的MAC器件。图3所示为典型路由器应用系统中的数据流。在图3所示的处理转发结构中,每一个模块代表一个微模块。发送和接收模块和MSF硬件紧密相关。处理器芯片的MSF总线接口单元中有一对BUFFER,即输入BUFFER和输出BUFFER,分别用作接收和发送的缓冲区。开发者通过用这些相应的硬件寄存器,硬件设备可自动进行相应的转发处理。
