【教学课件】第四部分Intel网络处理器.ppt
第四部分 Intel网络处理器主要内容pIntel网络处理器概述pXScale核p微引擎p其它功能单元p编程模型p参考设计Internet eXchange Architecture(IXA)pIXA:泛指Intel网络处理器架构以及相关的支持芯片,包括网络处理器硬件及软件体系结构。pIXA包括控制面和数据面处理,定义了硬件抽象、应用编程接口和互连机制,但没有给出细节。pIXA的三个重要组成部分:n微引擎(Microengine,ME):Intel网络处理器的核心部件,在其它功能单元的支持下执行快路径上的操作。nXScale Core:Intel网络处理器的高层控制和管理单元,负责控制面及异常包处理,运行嵌入式实时操作系统。nIXA可移植框架:为基于Intel网络处理器的软件开发提供应用编程接口和硬件抽象。IXA的特性p灵活性:n微引擎完全可编程,在低层硬件设备的支持下可实现许多复杂的网络处理功能,具有较好的功能灵活性。p高性能(高可扩放性):n使用多个可并行操作的微引擎,通过增加微引擎的数目、提高微引擎及XScale核的时钟频率、采用各种减小访存延迟的技术及增加专用的硬件功能单元,可支持高达OC-192的高端处理速度。p可移植性:nIXA可移植框架提供了应用编程接口和硬件抽象,使得基于该框架开发的软件与底层硬件实现松耦合,具有良好的可移植性和重用性。Internet eXchange Processor(IXP)pIXP:指实现了IXA架构的网络处理器芯片。pIXP典型地包括:n一个XScale核n多个微引擎n片上存储单元n若干硬件功能单元n与各种外部连接的接口n内部总线第二代IXP网络处理器pIXP2400:8个微引擎,主要面向网络接入和边缘网应用,可用于WAN多服务交换、DSLAM、基站控制器和网关、47层交换、VoIP网关、多服务接入平台等。pIXP2800:16个微引擎,主要面向边缘网和核心网应用,可用于骨干网的路由与交换、无线设备、10Gbps的企业交换和路由等。pIXP2850:在IXP2800的基础上增加了加密单元,可达到10Gb/s的加解密速度,用于IPSec、VPN、QoS Router等场合。pIXP2xxx:泛指任何一种第二代IXP网络处理器芯片。IXP2xxx的主要部件p一个IXP网络处理器是一块独立的芯片,包含一组复杂的可编程及不可编程的处理器和功能单元:n一个嵌入式RISC处理器(XScale Core)n8到16个可编程包处理器(微引擎)n多条独立的片上总线:提供芯片内部各功能单元之间的高速通道n处理器同步机制n共享和不共享的片上存储器n一个低速串行接口:连接到XScale Core,用于控制和管理n多个外部存储器接口:连接外部SRAM、DRAM及ROM等n多个外部I/O总线接口n计算哈希和加密的协处理器n其它功能单元 IXP的外部连接p串行接口:连接到XScale Core,用于控制和管理。pPCI总线接口:连接I/O设备及传统CPU。pMSF接口:连接外部物理层设备及交换结构,是数据出入IXP的窗口。pDRAM总线接口:提供1条或多条DRAM总线。pSRAM总线接口:提供多条SRAM总线。p慢端口连接:访问ROM/FlashROM等外部硬件单元。IXP2400外部连接的速度IXP2xxx的内部组件数量数量组件组件目的目的1嵌入式RISC处理器控制、高层协议和例外处理8/16包处理引擎I/O、基本包处理和包转发1+SRAM访问单元协调对外部SRAM总线的访问1+DRAM访问单元协调对外部DRAM总线的访问1MSF访问单元协调对外部I/O设备的访问1PCI总线访问单元协调对外部PCI总线的访问1SHaC单元存储中间结果、计算哈希值等1加密单元加/解密操作1系统底盘(chassis)提供内部控制及数据传输通道 IXP2xxx的概念组织IXP2400硬件结构框图硬件体系结构:多主控+系统底盘+多目标IXP2400硬件结构特征p采用了多主控+系统底盘+多目标的分布式硬件体系结构,增强了IXP2400的并行处理能力。p具体而言,n采用分立的内部总线结构,将不同存储单元的数据总线、数据读/写总线分开,可以同时对不同存储单元进行双向读/写操作。n引入命令总线仲裁器对各主控单元发出的命令进行排队判优,保证指令的优先级,避免指令的冲突和拥塞。n采用分布式的硬件结构(即多主控+多目标),不同的硬件功能单元各司其职,负责专门的数据处理,可以并行操作。n采用多微引擎并行的硬件结构,所有微引擎可同时工作;而且微引擎被进一步分成两个簇,每个簇使用独立的SRAM数据总线,有效地缓解了总线冲突。IXP2xxx的处理器体系 处理器类型处理器类型 是否在芯片上?是否在芯片上?是否可编程?是否可编程?通用处理器否是嵌入式RISC处理器是是I/O处理器是是协处理器是否物理接口硬件 否否p通用处理器(GPP):不是IXP2xxx的一部分,用于执行整体控制和管理功能。p物理接口硬件:不是IXP2xxx的一部分,Intel提供专门的芯片实现第一层和第二层的处理。IXP2xxx处理器体系(续)p嵌入式RISC处理器(XScale Core):不是快路径的一部分,用于管理微引擎、提供一个可以下载程序和配置芯片的接口、处理高层协议及例外的包,运行常规嵌入式操作系统。pI/O处理器(MicroEngine):只提供少量基本指令的低级设备,不运行操作系统,用于处理I/O设备与存储器之间的低层数据传输及基本包处理,是快路径处理的基础。p协处理器和功能单元:有一些构成了快路径的一部分,如SHaC单元、加/解密单元等。IXP2xxx使用的存储器存储器类型存储器类型最大容量最大容量是否在是否在典型用途典型用途芯片上?芯片上?GP Registers2564bytes 是中间运算Inst.Cache32Kbytes 是最近使用过的指令Data Cache32Kbytes 是最近使用过的数据Mini Cache2Kbytes 是重用过一次的数据Write buffer未指定 是写缓冲区Local memory2560bytes/微引擎 是本地缓存Scratchpad16Kbytes 是进程间通信和同步Inst.Store4Kbytes/微引擎 是存放微引擎指令FlashROM未指定 否用于启动SRAM64Mbytes/通道 否存放表或包头DRAM2Gbytes/通道 否存储包四种主要存储器的特性类型类型 访问单位访问单位 相对访问相对访问 特性特性 (字节)(字节)延时延时Local4 1 用LM_ADDR寄存器访问Scratchpad4 10 支持原子操作、进程间通信、微引擎之间的 通信SRAM4 150 支持原子操作、队列和环、比特操作DRAM8 300 连接到XScale、微引擎和PCI总线控制器pLM:提供最小的访存时间pScratchpad和SRAM:支持原子操作,可用来同步并行处理器pSRAM:支持队列和环,适合于存放包头或包链表pDRAM:有对I/O设备的直接传输路径,容量大,带宽高,适合存放包。数据访问单位p每种物理存储器都定义了访问单位的长度(也称可寻址数据单位):n字(word):2字节的单位(16比特)n长字(longword):4字节的单位(32比特)n四倍长字(Quadword):8字节的单位(64比特)p尽管微引擎和XScale可以为每个字节产生地址,但是底层机制总是一次读/写一个访问单位长度的数据。p程序员必须了解存储器的组织,仔细规划数据的布局以最小化访存时间。基于IXP2xxx的典型系统结构单片IXP2xxx的系统架构主要内容pIntel网络处理器概述pXScale核p微引擎p其它功能单元p编程模型p参考设计IXP2xxx在网络系统中的使用方法 两种可能的网络系统设计方法嵌入式处理器的作用p嵌入式RISC处理器可以被分配以下一些或全部的任务:n自举:包括片上存储器和处理器的初始化n控制微引擎:如启动/停止包处理n内存分配n诊断和日志n交互程序调试(Interactive debugging)n用户接口和/或到通用处理器的接口n其它管理功能:如创建/修改微引擎使用的数据结构,维护本地转发表,描述配置细节(如每个网络接口的地址)等。n异常处理:不匹配任何分类规则的包,产生出错消息的包n高层协议处理:负责处理发给本地系统的包(如TCP)n应用程序(需要的话)XScale的主要特性p精简指令集计算(RISC):n包含较少的指令,指令被设计为能够很快执行,依靠寄存器获得高速度,保证每个时钟周期能够完成一条指令。p可配置大端/小端模式的的32位算术运算:n处理器引导时配置端模式。p由协处理器提供的矢量浮点运算p字节可寻址内存:n接口硬件按照底层存储器的访问单元长度存取,当与处理器通信时只传输需要的字节。XScale使用的地址空间p虚拟存储支持:n所有的外部存储器及部分片上存储器、PCI总线、其它存储器映射的I/O设备均被映射到一个大小为232字节的线性地址空间,XScale硬件包括一个提供虚存的存储管理单元。n有一些存储器是XScale和微引擎共享的,如Scratchpad、SRAM、DRAM,可以用来在XScale和微引擎之间传递数据。n微引擎不使用XScale的地址空间,XScale必须处理所有的地址转换。p其它I/O:nXScale可以访问设备的CSR,可以访问和控制PCI总线上的任何一个设备XScale的主要特性(续)p内部外设单元(只能由XScale使用):n作为控制台设备的串口n四个32位倒计数定时器:这意味着XScale必须处理所有涉及超时的协议处理任务。n四个通用I/O管脚:通过MSF访问,连接到另外的硬件或用于调试nSlowport接口:用于系统引导p支持内核化操作系统的硬件设施p系统控制协处理器15:n只能由XScale使用,用于配置和控制IXP2xxx上的几个硬件单元,如MMU、读/写缓冲器、时钟、高速缓存等。p性能监视单元:n监视指令cache不命中率、TLB不命中率、指令流水线中的停顿、软件引起的分支指令数目。主要内容pIntel网络处理器概述pXScale核p微引擎p其它功能单元p编程模型p参考设计微引擎的用途p在IXP2xxx的处理器体系中,微引擎构成了最低层的可编程处理器。p微引擎被设计用来执行快路径上的处理,包括Ingress和Egress协议处理任务:n从物理层硬件接收包 n检查校验和n包头处理和分类n包缓存n查表和转发n包头修改n校验和计算n从物理层硬件发送包微引擎架构的特点p一种可编程微控制器(微引擎不是一个传统的CPU)p采用RISC设计p本地的控制存储器:微引擎的指令存储器p执行数据通路(Execution Datapath):微引擎的指令执行单元n一个算术逻辑单元ALUn一个16入口的CAM,每个入口32比特n8个线程和上下文切换的硬件支持p数据通道寄存器n256个通用寄存器n512个传输寄存器n128个Next Neighbor寄存器n640个字的本地内存p一个CRC计算单元p可直接访问片上各种功能单元微序列控制器p微引擎不是一个传统的CPU,而是一个可编程微控制器。p微引擎不包含每一种操作的本地指令,运行在微引擎上的程序控制和使用芯片上的功能单元来完成指令。p例1:算术运算n传统CPU上的指令:add R2,R3n微引擎上的指令:alu dest,A_op,alu_op,B_op nalu_op包括12种运算符(+、+16、+8、+carry、B-A、B、B、AND、AND、AND、OR、XOR)p例2:内存引用n传统CPU上的指令:load R3,Xn微引擎上的指令:sram cmd,xfer,src_op1,src_op2,ref_cnt,opt_tok 微引擎指令集p微引擎指令集的操作码不到64个,分为以下四类:n通用指令:算术,循环,移位n分支和跳转指令:某一位置位/清零跳转,字节相等/不等跳转,根据事件状态跳转,nCAM指令:查找,清除入口,读标签/状态,写标签/状态 nI/O和线程交换指令:读/写DRAM,读/写SRAM,读/写队列描述符(SRAM),入队/出队,存储器环操作,访问Scratchpad,分离的存储器地址空间p微引擎硬件不将存储器或I/O设备映射到一个线性地址空间,程序必须说明数据传输所涉及的存储器,因此每一类存储器和每一类I/O设备都有专门的指令。p例如:nsram cmd,xfer,src_op1,src_op2,ref_cnt,opt_tokndram cmd,xfer,src_op1,src_op2,ref_cnt,sig1,sig2nscratch cmd,xfer,src_op1,src_op2,ref_cnt,opt_tokp程序员必须为每个数据项选择将要放入的存储器。执行流水线pRISC架构:RISC处理器将一个指令的执行分成若干个阶段,通过同时执行几条指令的不同阶段来重叠多条指令的执行。p执行流水线:重叠不同阶段执行的硬件。指令执行在各个级的划分执行流水线停顿p指令间的相互依赖可能导致执行流水线停顿,如:K:alu R2,R2,+,R1K+1:alu R3,R3,+,R2p条件分支也可能造成执行流水线停顿。通常情况下,微引擎硬件继续取下一条指令装入流水线,就好像没有分支一样。微引擎的执行数据通道p微引擎的指令执行单元也称执行数据通道(Execution Data Path),可执行移位、加/减、逻辑运算、乘法、字节对齐、比特操作、CAM查找等。p微引擎要执行的代码存放在本地的控制存储器中,源/目标操作数均为微引擎内部的存储单元(称数据通道寄存器)。p执行数据通道采用5级流水线结构:取指令、指令译码、取操作数、指令运算、写运算结果。p控制存储器和数据通道寄存器均位于微引擎内部,取指令或取操作数都在单个时钟周期内完成,所以执行数据通道执行一条指令只需要一个时钟周期。微引擎的执行数据通道(续)p字节对齐:从连续的8个字节中取出任意偏移量(03)的连续4个字节。pCAM用于快速查找:n16个入口n每个入口包括32位标签(查找关键字)和4位状态n可以写CAM中的任意一行,可以分别写标签和状态n程序提供一个32比特的查找关键字,CAM硬件报告查找结果(015的值):cam_lookupdest_reg,src_reg,其中src_reg为查找关键字,结果放在dest_reg中。CRC单元pCRC单元不是执行数据通道的一部分,它与执行数据通道并行工作。p支持16比特和32比特的CRC运算。p用于计算ATM或以太网等2层数据包的校验和。存储器访问延迟和多线程6?6?p存储器访问对系统性能影响很大,一次外部存储器访问相当于微引擎执行上百条指令。p隐藏存储器访问延迟的最好方法是使用多线程。硬件线程和上下文切换p每个微引擎支持8个执行线程p硬件为每个线程维护不同的状态信息(如一个程序计数器,一组信号事件)p硬件可以在线程之间迅速切换而不需要软件的支持,上下文切换为零开销或最多一个时钟周期的开销p概念上,微引擎线程就像传统操作系统中的线程一样操作。线程状态转移p未激活状态:不执行任何操作。p执行状态:正在执行控制存储器中的程序,同一时刻最多只有一个上下文处于该状态。p就绪状态:具备了继续执行数据处理任务的所有外部条件,等待获得微引擎的控制权。p休眠状态:等待某个外部事件的到来。p上下文切换由软件控制,处于执行状态的线程执行一条线程交换指令后转入休眠状态,微引擎对当前处于就绪状态的所有上下文进行仲裁判优,将控制权交给优先级最高的上下文。事件信号pIXP2xxx使用称为事件信号的软件机制同步微引擎的内部操作和外部事件的完成。p可以在指令中指定事件信号,令从属单元在完成指令规定的操作后向微引擎发送该事件信号,如:nsram cmd,xfer,src_op1,src_op2,ref_cnt,opt_tokndram cmd,xfer,src_op1,src_op2,ref_cnt,sig1,sig2p每个线程可以使用15个事件信号,这些信号将线程从休眠状态唤醒。p每个线程有两个本地寄存器,分别记录需要等待的事件信号和已经到来的事件信号。p在线程交换指令中,可以使用AND、OR等逻辑运算符指令线程需要等待的多个事件信号。指令存储器(控制存储器)pIXP2xxx使用单独的存储器系统(即不使用SRAM和DRAM)存储微引擎指令。p指令存储器的组织方式:n共享指令存储器:代码共享,节省空间,但有竞争。n专用指令存储器:无竞争,要求较多空间。pIXP2xxx提供折衷方案:n每个微引擎使用一个私有的指令存储器,避免竞争。n每个指令存储器的容量限制为4096条指令,避免使用较多的空间。p控制存储器属于微引擎的内部存储资源,因而可单周期地读取其中的程序指令。p控制存储器中的程序从IXP2xxx的ROM中读入,在XScale控制下完成。数据通道寄存器p微引擎需要与许多硬件设备交互,许多交互是通过硬件寄存器发生的。p微引擎使用的数据通道寄存器包括:n通用寄存器n传输寄存器n邻居寄存器n本地存储器通用寄存器(GPR)p每个微引擎有256个通用寄存器,每个为32比特,一般用作指令的源和目的寄存器。p通用寄存器的两种使用方法:n8个线程共享整个寄存器组:需要处理互斥。n每个线程分配32个专用的寄存器:不需要互斥。p寄存器寻址方式:n绝对寻址:唯一指定一个寄存器。n相对寻址:指定当前上下文的一个寄存器。p通用寄存器分为两个bank,绝对和相对寄存器地址都必须指明bank及bank中的一个寄存器。p指令的两个源操作数分别来自A Bank 和 B Bank。寄存器绝对编址传输寄存器p微引擎使用传输寄存器缓存与外部设备交换的数据,以协调微引擎与外部设备之间的速度差异。p每个微引擎有512个传输寄存器,按外部总线和传输方向分为四类:nD Xfer in reg及D Xfer out reg:用作微引擎与DRAM控制器的数据交换窗口。nS Xfer in reg及S Xfer out reg:用作微引擎与SRAM控制器、MSF及SHaC之间的数据交换窗口。p传输寄存器可以使用绝对地址或相对地址进行编址。邻居寄存器与软件流水线p微引擎硬件被设计为支持软件流水线模型,软件流水线可以包含来自多个微引擎的模块。p邻居寄存器用来在相邻的两个微引擎之间传递数据。p每个微引擎含有128个邻居寄存器,可以被8个线程共享,也可均分为8份。p邻居寄存器可由上一个邻居微引擎写入数据,也可由自身微引擎写入数据。p邻居机制只用来传递少量的数据,如数据项的地址。p邻居寄存器机制类似于一个环缓冲器,微引擎硬件包含了协调发送者与接收者的原语。访问邻居寄存器环的原语本地存储器p专用:每个微引擎有一个本地存储器。p容量小:2560字节。p低延迟:建立之后只需要一个指令周期,适合存放临时结果。p通过特殊寄存器访问:每个线程被分配一对LM_ADDR寄存器,LM_ADDR0和LM_ADDR1。首先将要访问的地址装入其中一个寄存器,然后用这个寄存器去访问地址。p改变存储器地址需要三个指令周期,地址建立后存/取操作只需一条指令,递增/递减寻址模式允许快速顺序访问。因此,当一个位置被反复引用或相邻位置被顺序引用时,本地存储器访问可以得到优化。主要内容pIntel网络处理器概述pXScale核p微引擎p其它功能单元p编程模型p参考设计SHaC单元pSHaC单元包括三个组成部分:n一个ScratchPad存储器n一个哈希单元n一个控制状态寄存器访问代理(CAP)pSHaC单元处理scratch、cap、hash和reflect指令。pSHaC单元独立操作,当命令执行完时通知微引擎。SHaC单元的概念组织SHaC单元与芯片其余部分的主要连接:到控制总线的连接,接收命令。到推/拉总线的连接,传递参数及计算结果。到推/拉仲裁单元的连接,控制推/拉总线上的传输。入口队列译码Scratchpad存储器p为IXP2XXX片内存储资源,由SHaC控制访问。p容量为16KB,组织成4K长字。p提供一般的数据读/写操作,一次可从Scratch中读/写64个字节(16个长字)的数据,可用作本地数据存储器。p提供两种可由微引擎线程用来进行协调的操作,因而常用于线程间通信:n提供原子操作,用于设置/清除比特、增量/减量、加/减、交换数值等。n提供实现通信环的逻辑,支持环缓冲器的自动管理和操作,可容纳16个环缓冲器,允许在不相邻的一对微引擎之间传递信息(使用pull/push reflector 指令)。Scratchpad的读/写过程p以将微引擎中的数据写入Scratchpad为例:n微引擎将数据写入传输寄存器,将指令“scratch wr,xfer,src_op1,src_op2,ref_cnt,opt_tok”发送到命令总线。nSHaC单元从命令总线接收命令,控制逻辑检查命令的Target_ID,若为Scratch则将指令缓存在入口队列中。n控制逻辑对指令进行译码,发送信号通知Pull总线仲裁器将数据从传输寄存器中读入pull_fifo中。n当数据读入完成后,将pull_fifo中的数据写入Scratchpad。nSHaC单元向微引擎发送信号,告知操作完成。p使用Pull/Push Reflector在不相邻的微引擎间传输数据:n首先通过Pull总线从源微引擎中将数据读入Scratchpadn再通过Push总线将数据写入目的微引擎。哈希单元p哈希单元用于执行查表和其它需要乘法或除法的任务。p支持48比特、64比特和128比特哈希操作。p哈希单元有两个输入缓冲器,微引擎可以用一条指令发射13个哈希请求,SHaC顺序地将请求传递给哈希单元。p 启动哈希操作的过程:n微引擎将13个数据值放在一组连续的SRAM传输寄存器中,然后将哈希运算指令发送到命令总线。n哈希单元接收命令,利用Pull总线从微引擎的传输寄存器中读取源操作数,执行哈希运算,然后通过Push总线将运算结果推送到微引擎的传输寄存器中。n操作结束后,哈希单元向微引擎发送信号。CAP操作p设备的控制状态寄存器(CSR)被映射到XScale的地址空间,但其中的一部分CSR是本地的(并不对应一个外部设备),本地CSR用于控制微引擎及记录微引擎的状态。p硬件定义了四十多个微引擎CSR,每个CSR控制处理的一个方面。pXScale使用本地CSR将指令装入微引擎并控制微引擎。p每个微引擎只能访问自己的本地CSR。pSHaC集成了许多CSR,对这些CSR的访问是通过SHaC中的CAP进行的。pCap指令用于读/写CSR,如:nCap read,xfer,csr_addr,opt_tok nCap write,xfer,csr_addr,opt_toknCap fast_wr,xfer,csr_addr,opt_tok.处理器间通信p微引擎与XScale通信(context-to-XScale):n中断:微引擎可使用SHaC单元向XScale发出中断n共享存储器:与polling机制一起使用n存储器环机制:用于转发数据p线程之间的通信(context-to-context):n事件信号nScratchpad或SRAM环机制:任意线程n邻居寄存器:相邻微引擎上的线程n反射总线机制:任意微引擎上的线程pIXP2xxx之间:nCBUS机制:不同IXP2xxx上的线程相互通信。DRAM控制器pDRAM控制器位于主控单元与DRAM存储设备之间,负责控制、管理主控单元对DRAM存储设备的访问。pDRAM控制器通过命令总线、Push总线和Pull总线与主控单元相连。DRAM控制器的特点p支持1个DRAM通道,64比特数据宽度,2GB存储空间。p以8字节为单位进行读/写,一条指令可以读/写连续的8128个字节,特别适合大数据量传输。p支持4个DRAM bank及交织操作:n交织:通过地址映射将连续的存储地址分布到4个bank上,一次操作可读/写相邻的两个bank中的数据。n地址映射完全由硬件完成,对软件是透明的。p访问DRAM的指令格式:ndram cmd,xfer,src_op1,src_op2,ref_cnt,sig1,sig2DRAM读指令的执行过程p微引擎发送指令至命令总线,DRAM控制器从命令总线接收指令。p检查指令的Target_ID,若为DRAM则将指令缓存在cmd_fifo队列中。p确定是否需要访问相邻的2个bank,若需要则根据指令提供的地址及数据字节数产生在相邻2个bank的bank操作及地址;否则直接使用指令中提供的地址。p将各相应的DRAM地址装入指定的bank队列,将bank队列中的DRAM地址发送到FSM管脚上。pFSM管脚检查bank操作符及DRAM地址是否符合规范,若符合,驱动相应的地址引脚,将数据从DRAM存储器中读出。p数据先缓存在push_fifo中,然后通过D Push总线将数据推送到xfer指定的传输寄存器,并给微引擎发送sig1和sig2指定的信号。SRAM控制器pSRAM控制器用于管理和控制主控单元对SRAM存储设备的访问,以及用于连接符合QDR规范的协处理器。p以长字为单位访问,一条指令可以读/写连续116个长字的数据。pSRAM控制器具有复杂的硬件功能结构,支持:n一般的数据读/写操作n原子操作:设置/清除比特位,递增/递减,数据交换n支持对链表、环缓冲器等复杂数据结构的自动操作pSRAM存储设备通常用于存储如发送队列、数据包描述符、缓冲区链表等重要而复杂的数据结构。链表和环缓冲器p链表和环缓冲器是网络数据处理中非常重要的数据结构,n链表:由位于不连续的存储空间中的若干buffer组成,buffer的个数不限。链表主要用作包队列,每个buffer存放一个包描述符。n环缓冲区:由位于连续存储空间中的若干存储单元组成,创建时即确定了位置和大小。p如果用软件实现以上数据结构,比如将一个数据包放入发送队列:n先从SRAM中读该发送队列的描述符(队列头指针及尾指针)n修改尾指针使指向新的数据包n将修改后的队列描述符写回SRAMp软件实现的缺点:n操作复杂n涉及多次SRAM读写,延迟大,效率低n这些数据结构需要被频繁使用,影响处理速度。Q-ArraypSRAM控制器集成了称为Q-Array的硬件结构来支持上述的数据结构:n每个SRAM通道有一个Q-Array。n每个Q-Array有64个存储单元,每个单元存储一个队列描述符或一个环缓冲器描述符。nQ-Array支持入队和出队操作。p微引擎只需向SRAM控制器发送指令,具体的数据读/写操作由SRAM控制器完成。MSF接口pMSF是IXP2XXX上的一个复杂单元,提供与外部设备进行高速包传输的主要接口。pMSF单元有相互独立的接收和发送接口,每个接口可被配置为处理标准的MAC接口和交换结构接口。p所有与外部的输入/输出均通过MSF中的一组硬件缓冲器(称BUF)进行,BUF构成了外设与微引擎之间的唯一通道。pBUF按照传输方向分为RBUF和TBUF。p每个BUF包含8KB,可以被划分为大小为64字节、128字节或256字节的单元。微引擎可以选择任意一个或一些单元用于一次传输。p较大的包划分成若干mpacket,每个mpacket装入一个BUF单元。MAC硬件及微引擎软件负责将包划分成mpacket。MSF接收单元MSF数据包接收流程p当某一个线程完成指定的数据包处理任务后,将自己加入到Receive_Thread_Freelist。p当数据包到达MSF的接收逻辑单元时,MSF为数据包分配合适的RBUF单元,并将数据包移入。p将该RBUF单元标识为Full Element,加入Full Element List。p控制单元从Full Element List中取出一个RBUF单元,从Receive_Thread_Freelist中取出一个空闲线程,创建该单元的接收状态字,送到空闲线程的传输寄存器,然后通知空闲线程处理数据包。p在将RBUF单元中的内容读入传输寄存器或DRAM存储器之后,线程将RBUF单元释放。MSF发送单元MSF数据包发送流程p线程取出一个空闲的TBUF单元,分配给要发送的数据包。p线程将数据包从传输寄存器或DRAM存储器中移入TBUF单元。TBUF单元中的数据包由附加数据和净荷数据组成,附加数据一般由线程创建,作为数据包的包头,净荷数据来自于DRAM存储设备,作为数据包的包体。p线程创建发送控制字。pMSF将TBUF单元中的数据包按发送控制字指定的方式发送出去。加密单元p加密单元提供了高速处理数据加/解密的硬件。p每个IXP2850包含两个相同的、独立运行的硬件单元,由程序员决定如何使用这两个硬件单元。p每个硬件单元包含了可执行多种加密标准的硬件:n两个3DES/DES核n一个AES核,可以使用128、192或256比特的密钥n两个用于认证的SHA-1核n支持一些常见的标准,如ECB和CBCp所有加密信息(如密钥)包含在两个加密硬件单元中,不会保存在共享存储器中。p从程序员的角度来看,加密单元是用一个API来访问的。总结p提高并行处理能力是IXP2xxx的主要设计考虑:n包含多个微引擎,每个微引擎有自己的专用资源n每个微引擎包含多个硬件线程,每个硬件线程有自己的专用资源n并行操作的功能单元,每个功能单元有自己的命令缓存队列、指令译码和指令逻辑n多条分立的总线,且读/写总线分开n通用寄存器组分成两个bankn传输寄存器按总线及方向划分nMSF包含独立的接收和发送接口nDRAM支持多个bank及交织操作主要内容pIntel网络处理器概述pXScale核p微引擎p其它功能单元p编程模型p参考设计网络应用结构p数据面:高速处理和转发数据包,对性能影响最大。n快路径:微引擎,处理绝大部分的数据包。n慢路径:XScale Core,处理例外包。p控制面:处理协议消息,并负责建立、配置和更新由数据面所使用的表及其它数据结构。p管理面:负责系统配置、收集和报告统计信息、根据用户输入或来自其它应用的消息停止或启动应用。为微引擎和XScale编码p区分微引擎和XScale对程序员来说很重要:n为微引擎编写的代码经编译后下载到裸露的硬件上执行,因此程序员必须直接处理硬件的所有方面;n为XScale编写的代码编译后运行在操作系统下,程序员不需要描写所有的低层操作,必须使用操作系统功能来执行底层任务。n由于访问微引擎的所有API位于内核地址空间,因此XScale上的代码必须被设计为是可装载内核模块的一部分。pIntel IXA中的网络处理本质上就是作用到一个持续的数据包流或信元流上的一系列任务。p这些任务被分布到若干个微引擎上,每个微引擎执行一个特定的任务。当一个微引擎完成它的任务后,将处理上下文传给下一个微引擎继续处理。pIntel IXA包括三个部分:微引擎、XScale和IXA可移植框架。IXA可移植框架为基于Intel IXP的软件开发提供应用编程接口和硬件抽象。pIXA可移植框架是用微引擎和XScale Core上的一个分层结构实现的。IXA应用的逻辑单元由常用的低层C语言函数和微代码宏组成,专门针对高性能和代码空间最小化而设计。用低层库写的宏或函数;多个微块可连接成微块组。内核组件:微块在XScale Core上的对应部分。微块(microblock)p微引擎上的快路径处理被划分成一些称为微块的逻辑功能,每个微块是用低层库(包括优化的数据面库和微块基础结构库)写的宏或函数。p微块是粗粒度的,每个微块完成一个功能。p微块可以重用,可以通过微块组合实现所需要的应用。p两种类型的微块:n包处理微块:对数据包执行高层处理功能,如IP包分类、转发等。n驱动微块:执行与底层硬件密切相关的处理功能。p可以用Dispatch Loop将多个微块连接起来形成一个微块组,运行在一个微引擎上。每个微块组独立完成一个数据包的处理功能,形成一个相对独立、完整的处理环节。微引擎编程模型-软件流水线p微引擎在快路径上使用软件流水线模型p有三种方法将流水线级组合起来并映射到微引擎上:上下文流水线,功能流水线,混合流水线。上下文流水线(context pipeline)p每个pipe-stage被映射到一个微引擎上,负责数据包处理的一个子任务。p微引擎中的每个线程被分配一个包,执行相同的处理。p数据包严格按顺序分配给各个线程。p优点:适合需要较多代码空间和需要保存较多状态的子任务。p缺点:不适合传递较大的上下文,功能均匀划分很困难。功能流水线(functional pipeline)p微引擎的执行时间被分成n个流水线级,每级实现一个处理子任务。p数据包严格按顺序分配给各个线程。p多个微引擎并行地执行相同的功能流水线。p优点:不需要在流水线级之间传递上下文,处理速度快p缺点:控制存储器必须能够支持多个子任务,互斥的解决比较复杂。功能流水线(续)p多个微引擎并行执行相同的功能流水线。p相邻微引擎之间的包处理步调错开一个子任务时间(称task staggering),解决不同微引擎之间的互斥问题。p流水线级的数目必须与微引擎数相等。p微引擎之间的延迟错位通过线程间信号机制实现。混合流水线流水线级之间的通信机制-环缓冲器多生产者-单消费者使用Scratch ring或 SRAM ring单生产者-多消费者使用Scratch ring或 SRAM ring单生产者-单消费者使用Neighbor ring串行数据流处理与RMW操作p串行数据流处理问题:多个线程需要访问同一个数据结构时,必须串行地进行。pRMW是串行数据流处理问题中最重要的一种情形,往往需要进行多次外部存储器访问,且操作的数据结构往往比较复杂,造成很大的访存延迟。p读-修改-写临界区数据的过程:1)检查数据是否处于锁定状态;2)若处于锁定状态,返回第1步,否则锁定该数据;3)将数据从外部存储器读入微引擎;4)修改数据;5)将修改过的数据写回外部存储器;6)将数据解除锁定。pRMW的访存延迟主要来自两个方面:n在RMW操作前后访问外部存储器,对数据进行加锁和解锁n在RMW操作中多次读/写外部存储器减小RMW操作的访存延迟p将数据的编号及锁定状态缓存在CAM中,利用CAM单元的并行比较功能快速确定数据的锁定状态。p将数据本身缓存在本地存储器或SRAM控制器的Q-Array硬件中,减少对外部存储器的访问操作。p改进后的RMW操作,线程先用数据标识符查找CAM:n命中:CAM查找返回一个hit标志和数据在本地存储器中的位置,直接对数据进行快速的RMW操作。n锁住状态:等待一会再测试。n不命中:CAM查找返回一个miss标识和一个最近最少使用的CAM入口号;线程锁住CAM入口,将本地存储器中与LRU对应的数据写回SRAM,向SRAM发送读命令;将从SRAM取回的数据放入本地存储器中处理,在CAM中创建相应的编号,解锁CAM入口。折叠(folding)p当同一个微引擎中有多个线程需要对同一个数据结构执行RMW操作时,只需第一个进入临界区的线程将外部存储器中的数据读入,修改后缓存在本地存储器中,后续的线程可直接对缓存在本地的数据结构执行RMW操作,最后一个线程将修改后的数据结构写回外部存储器。p这种技术称为折叠,即将多次的RMW操作折叠为一次读-多次修改-一次或多次写操作。无折叠的串行RMW操作采用折叠技术的串行数据流访问线程交织p当线程的指令执行时间/访存延迟=1/(线程数-1)时,可以将访存延迟完全隐藏在程序执行时间之后。p时延超限(latency bound):访存延迟大于微引擎中所有线程的程序执行时间。p计算超限(compute bound):访存延迟小于微引擎中所有线程的程序执行时间。p实际应用中时延超限情形居多,可以通过增加微引擎中的线程数来平衡计算和访存时间。p线程交织(interleaving threading):通过增加每个线程处理数据包的数量来平衡计算时间和访存时间。p线程交织解决了时延超限的问题,但在本地存储器或Scratch中需要缓存更多的状态,包处理过程更复杂。微块与流水线组织p微块是粗粒度、有状态的实体,负责执行主要的包处理任务。p一