您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

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

时间:2007-1-20栏目:电子通信论文

有效的以太网头

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变量存放在便(

上一页  [1] [2] [3] [4] [5] 下一页

下页更精彩:1 2 3 4 下一页