网络处理器软件开发模型的研究
基于运行在核心处理器和协处理器的不同硬件之上,网络处理器可分成数据平面与控制平台。
数据平面主要运行在微引擎处理之上,是实现输入端口和输出端口间高速转发数据包的处理功能,具有线速执行特点,并充分利用数据包的无关性,采取并行处理方式。控制平面一般运行在网络处理器核上,处理路由表更新、管理数据平面任务与状态、完成高层的QoS控制等。这些操作的性能要求低于
数据层面,因此通常采用高性能通用处理器硬件平台。为了有效支持网络处理功能,控制平面与数据平面之间存在复杂的信息交互与依赖关系。
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核之间发送和接收包的接口。
《网络处理器软件开发模型的研究(第2页)》