用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

网络处理器软件开发模型的研究

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 22:38:21
接收线程将自己的信息写入MSF的FREELIST单元控制豁口,其中包括了线程号、微引擎号与存放接收控制字(RSW)的寄存器地址,等待MSF的信号将数据从RBUFFER中移入SDRAM。发送微模块要选择并等待一个有效的TBUFFER,再将数据从SDRAM中移入TBUFFER,并写入相应的控制寄存器,标识分组要发送的端口,分组的发送由TSM硬件自动完成。

在中间处理包的各个模块中,代码首先从便存储器(SCRATCHPAD MEMORY)中将接收线程放入的包信息取出,进行以太网头的有效性验证,根据IP头的信息查找路由表,将以太网头更新。其中每一个处理都是由一个微模块来实现的。各个模块合在一起构成了一个Dispatch Loop,各个模块在便存储器中共享包描述符信息,其中dlNextBlock全局变量为下一个处理微模块的标识。Dispatch Loop的部分代码如下(简略)。

while(1){

dl_source(); //从接收线程取下包描述符

if(dlBufHandle= =0){ //dlBufHandle是Dispatch

//Loop维护的一个全局变量

continue;

}

Ethernet_validate();//验证这个包是一个有效的以太网头

Ethernet_strip_header();//去掉以太网头

Ipv4_five_tuple_class();//进行IPv4 classifier的转发

If(dlNextBlock= =IX_DROP){//clNextBlock也是全局变量,表示下一个

Goto drop; //跳转到丢弃包的处理模块

}

Ethernet_add_header();//添加新的以太网头

D1_sink(); //将处理后的包描述符放入发送缓冲区中

Drop:

Dl_BufDrop(dlBufHandle); //丢弃包的处理

}

Intel IXP2400开发平台中,微代码的源文件是*.uc格式的,经过预处理生成*.ucp的中间文件,进而进行汇编生成*.list汇编文件。微引擎程序的连接器将汇编程序的多个输出文件转变成一个可下载的微程序映像(image)。缺省情况下,连接器生成的微代码映像文件的扩展名为uof。连接器也可以生成C结构的程序格式,这样的输出文件与内核程序一起进行编译和连接。

Intel提供的资源管理库中,对微引擎部分的函数提供了接口,可以将uof文件当作Flash文件系统的一个普通文件进行处理。在内核代码初始化时,将uof文件读入内存,然后加载。但是如果要作成最终产品时,Intel推荐采用.c格式的文件,并直接链入到所开发的内核工程中。

4 网络处理器软件开发的关键环节

基于网络处理器开发工作的重点是对数据平面代码的开发,开发者要在以下三个方面进行设计和代码优化:多线程的任务分配和调度策略;数据结构的定义和存储分配;分组队列的管理和调度。

(1)多线程的分配和调度策略

对微引擎和线程分配任务是否合理,是影响系统性能的一个很重要因素。开发人员需要根据具体的网络应用和硬件平台的特点来科学合理的分配任务。比如,对一个一般的网络应用来说,可以分为包的接收、处理、发送几个阶段。对于包的处理阶段来说,又可以分成多个阶段来执行,每一个阶段可以由一个微模块来执行。这多个微模块是如何在每个微引擎中分配,就是一个任务分配的问题。如果分配才能使负载尽可能的达到平衡,处理器的资源得到最大效率的利用,这些都要进行研究、分析和实验。

网络处理器微引擎基于硬件的静态多线程调度基础上,即在一个微引擎内部中的线程调度是由硬件来实现的,通常采用轮询的策略。不同策引擎的线程间存在多种通信方法,线程之间在数据包处理过程中的同步方式也有多种。因此,开发者根据具体不同应用功能特点,不同数据处理相关功能需求,对围绕处理器的多个微引擎的并行调度算法进行选择,以尽可能达到系统负载的平衡。

Intel IXP2400提出了三种网络处理器数据平面的多线程编程模型:流水模型(context pipeline)、并行处理模型的顺序模式(ordered mode)和乱序的模式(unordered mode)。在任务的分配方面,Intel正在考虑对现有的微引擎编程语言进行扩展,提出了新的微引擎自动分配任务的编程模型,以加快网络处理器软件开发的效率。

(2)数据结构的这义和存储分配

影响网络处理器线速转发的一个最关键问题是存储器的访问延迟。网络处理器中往往有多层不同的存储体(在IXP2400中,就存在寄存器、Local Memory、Scratchpad Memory、SRAM、SDRAM等不同级别的存储器,它们的速度差别很大),不同层次的内存用于满足不 同数据结构的需要。另一方面,定义在网络处理器中的数据结构是非常精密的,比如,一个包头的描述符(packet descriptor metadata)。但同时也是非常庞大和复杂,比如包体的信息、路由表和队列管理的数据结构。举例来说,开发者在微引擎中定义多个线程共享的变量时,应最先考虑使用全局寄存器,但有时全局寄存器的容量有限,可以考虑Local Memory。多微引擎共享的变量存放在SRAM中,而Dispatch Loop变量存放在便(Scartch pad)中。不同数据结构定义和分配的不同策略都会对系统性能产生较大的影响。

(3)分组调度

网络处理器是典型的RISC内核的并行实时处理结构,同时存在着大量共享资源,比如内存、总线、SHAC等一些特殊硬件单元,这就必然需要系统对这些共享资源进行调度和仲裁。未来计算机网络的趋势是能够提供多种不同服务,支持多种不同应用需求。提高网络集成服务支持能力的一个很重要问题就是分组调度算法问题,分组队列的管理还是实现QoS的基础。

分组调度及处理算法的核心是链路层调度器的算法设计。在一般分组处理的存储-转发过程中,设计调度器必然要对分组处理时间进行预测,但处理器在调度器中要精确的获取并更新这些虚拟时间是十分困难的。这就要根据具体的应用,通过研究数据包的长度、数据类型、处理方式与处理时间之间的关系,提出合理的数据包处理时间预测方案,选择适当的分组调度算法,达到比较好的系统性能。

5 网络处理器面临的挑战

当今的网络处理咕嘟仍面临着许多挑战,例如采用什么技术扩展,如何简化编程模式等问题都需要进一步研究。数据平面上运行的软件开发通常仅提供微代码汇编和低通读C语言技术,这大大限制了网络处理器技术的发展和应用。因为缺乏高效的软件开发支持,软件问题已经成为网络处理器应用的一大障碍,必须研究面向网络处理器系统的高效系统软件平台。

网络处理器微引擎指令的提供非常有限,仅有不足40条,这远远不能满足开发人员的需求,仅用它去构造一些复杂的网络处理任务不太现实。在Intel提出的网络处理器开发框架中,给出了一些非常底层的数据平面的函数库,还给开发者提供了一些面向特定应用的更优化的接口和宏指令集。

目前,开发环境主要由各NP生产厂商提供,微引擎上运行的数据平面只提供微代码汇编和C语言编译器支持,有代表性的产品是Intel Workbench。控制平面上的处理器内核,普遍采用Linux或VxWorks作为操作系统。两个平面的开发相对独立,没有一种统一的开发手段,这给开发者带来了很大的不便。目前,也没有特别针对网络处理特点的操作系统,常见的RTOS由于并不是特别针对网络处理器的操作系统,因此并不能充分发挥网络处理器的潜能。

为了满足下一代Internet服务需求,网络处理器除了要满足局域网和广域网对带宽的需求增长外,还要能够以线速对数据、语音以及视频信号进行排序和处理。网络处理器官方论坛(Network Processing Forum)的成立,加快了网络处理器接口标准的制定和软件发展的步伐。

结语

网络处理器通过十分灵活的体系结构和强大的处理能力,将可编程能力和ASIC的处理能力有机的结合在一起,它的出现是网络设备开发的一次革命,它的发展必须对传统ASIC和MPU造成前所未有的冲击。在今后几年里,网络处理器将有着非常巨大的发展空间。本文以Intel IXP2400网络处理器为例,全面讨论了网络处理器软件开发技术,并提出网络处理器软件开发中的关键环节及面临的主要问题和挑战。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:25,296.88000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号