《Intel网络处理器概述.doc》由会员分享,可在线阅读,更多相关《Intel网络处理器概述.doc(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流Intel网络处理器概述.精品文档.第十四章 Intel网络处理器概述前面我们讨论了网络处理器的一般问题,从本章开始我们将深入讨论一个特定的网络处理器-Intel网络处理器,以便对前面介绍的一般概念提供一个具体的说明。(1)IXA术语IXA(Internet eXchange Architecture)泛指Intel网络处理器体系结构以及相关的支持芯片。尽管IXA主要集中在网络处理器硬件,它也包括软件体系结构,因为如果不预想使用硬件的软件,可编程硬件是无法定义的。IXA包括控制面(慢路径)和数据面(快路径)处理,定义了硬件抽象、应用编程接口和
2、互连机制,但是没有给出细节,IXA只是给出了概念组织。IXA中有如下三个重要组成部分:l 微引擎(Microengine,ME):微引擎是Intel网络处理器的核心部件,也是Intel处理器取得线速处理性能的关键,在其它功能单元的支持下执行快路径上的包处理。l XScale Core:XScale核是Intel网络处理器的高层控制和管理单元,是与Strong ARM兼容的一种微处理器,负责控制面的处理任务以及异常数据包的处理,上面运行VxWorks、嵌入式Linux等实时操作系统。l IXA可移植框架(IXA Portability Framework):为基于Intel网络处理器的软件开发提
3、供应用编程接口和硬件抽象,使得运行在XScale核和微引擎上的软件具有良好的可移植性和可重用性。开发者对新一代网络处理器的要求包括四个方面:灵活性,高性能,可扩展性和可移植性。IXA能够满足这四个方面的要求。l 灵活性:在IXA架构的网络处理器中,微引擎完全可编程,在低层硬件设备的支持下可实现许多复杂的网络处理功能,具有较好的功能灵活性。l 高性能:IXA架构的网络处理器使用多个可并行操作的微引擎,通过增加微引擎的数目、提高微引擎和XScale核的时钟频率、采用新技术减小存储器访问延时以及增加专用硬件功能单元,可使网络处理器线速处理高达OC-192的网络数据,具备了网络宽带化所要求的高性能。l
4、 可扩展性:通过增加微引擎的数目以及提高微引擎和XScale核的时钟频率,可使网络处理器达到OC-192的高端处理速率,具有良好的可扩展性。l 可移植性:IXA可移植框架提供了应用编程接口和硬件抽象,使得基于该框架开发的软件与底层硬件实现松耦合,具有良好的可移植性和重用性。(2)IXP术语IXP(Internet eXchange Processor)指实现了IXA架构的网络处理器芯片。尽管每一种IXP设计必须遵循IXA架构,但是不同的IXP可以定义自己的细节,比如片上功能单元的数量和种类、处理器的并行程度、存储器的大小以及内部数据带宽等。IXP网络处理器典型地包括一个XScale核、多个微引
5、擎、存储器、若干硬件功能单元、与各种外部连接的接口、内部总线等。Intel提供了多种IXP网络处理器芯片,目前已是第二代产品。第一代产品与第二代产品的区别包括并行程度(即片上处理器的数量)、物理接口、芯片封装、功率消耗、硬件功能特性(如用于加密的硬件加速器)等方面的差异。图14-1列出了三款第二代IXP网络处理器。IXP2400主要面向OC-12到OC-48/2.5Gbps的网络接入和边缘网应用,有8个微引擎,每秒可完成超过50亿次的操作,可应用于WAN多服务交换、DSLAM、基站控制器和网关、47层交换、VoIP网关、多服务接入平台、高端路由器和VPN等。IXP2800主要面向OC-48么O
6、C-192/10Gbps的边缘网和核心网应用,有16个微引擎,每秒可完成超过250亿次的操作,可应用于骨干网的路由与交换、无线设备、IPSec和VPN、10Gbps的企业交换和路由等。IXP2850在IXP2800的基础上增加了加密单元,可达到10Gbit/s的加/解密速度,可用于IPSec、VPN、QoS Router等场合。通常用IXP2xxx泛指其中的任何一款网络处理器芯片。图14-1 Intel 第二代IXP网络处理器(3)IXP2xxx的主要部件一个IXP网络处理器是一块独立的芯片,它包含了一组复杂的可编程及不可编程的处理器和功能单元。以下是IXP2xxx芯片中的主要部件:l 一个嵌
7、入式RISC处理器l 8到16个可编程包处理器l 多条独立的片上总线:提供芯片内部各功能单元之间的高速通道,包括多组单向高速数据总线和命令总线;l 处理器同步机制l 共享和不共享的片上存储器:每个微引擎内部有专用的本地存储器,芯片内部还有共享的Scratchpad存储器;l 一个低速串行接口:连接到XScale核,主要用于控制和管理;l 多个外部存储器接口:连接外部SRAM、DRAM及ROM(或Flash ROM)等;l 多个外部I/O总线接口:PCI总线接口及MSF接口;l 计算哈希和加密的协处理器l 其它功能单元(4)外部连接图14-2给出了IXP2xxx支持的主要外部连接。IXP2xxx
8、有四类外部连接:一个串行接口,三个外部I/O总线接口,两个外部存储总线接口,一个低速设备接口。图14-3列出了IXP2400主要连接的速度。每个IXP2xxx芯片包含一个通用异步收发器(UART)硬件,提供到传统串行线路的接口,串行线连接到嵌入式RISC处理器。由于串口主要用于控制和管理功能,因此它并不像其它I/O接口那样运行在高速度。所以,尽管程序员可以选择通过它传输数据,串口并不适合用于快路径。IXP2xxx芯片中的PCI(Peripheral Component Interconnect)总线提供两个主要功能。第一,允许一个IXP2xxx连接到I/O设备(如磁盘);第二,允许设计者使用传
9、统的CPU作为通用控制处理器。由于PCI技术非常流行,许多I/O设备遵循这个标准。尽管PCI技术非常流行,但是其整体的吞吐量限制在大约2.2Gbps。为处理更高的数据速率,IXP2xxx使用了一个媒体或交换结构(Media or Switch Fabric Interface,MSF)接口。MSF是IXP2xxx与外部物理层设备(PHY)及交换结构的接口单元,是数据出入IXP2xxx的窗口。MSF通过Utopia、SPI协议与PHY接口,通过CSIX与交换结构接口。Utopia、SPI和CSIX都是标准化协议,Utopia用于接收ATM格式的包,SPI用于接收POS格式的包,CSIX是IXP2
10、xxx与交换结构进行数据接收/发送时使用的接口协议,其数据包格式为Cframe。通过这些标准协议MSF能够方便地与其它厂家的产品进行接口。图14-2 IXP2xxx的主要外部连接图14-3 IXP2400外部连接的速度MSF接口有两个主要目的。第一,它构成了IXP2xxx与高速网络接口之间的快路径;第二,MSF接口提供了一种通信机制,允许两个或多个IXP2xxx芯片互连。第二个目的非常重要,因为可以将两个芯片连接起来处理较高的吞吐量。MSF接口的关键特性是可配置,可配置性使得MSF接口的灵活性足以连接几乎任何物理硬件。像图14-2指示的那样,MSF接口有两个外部连接:一个用于输入,另一个用于输
11、出。这两个外部连接使用不同的管脚,并且可以被独立配置,因此可以配置输入和输出使用不同的接口标准。比如配置输入使用SPI协议,而输出使用CSIX协议。DRAM总线的任务只有一个,提供对外部DRAM的访问。IXP2400使用一条总线访问DRAM,而IXP28x0使用多条总线来获得较高的吞吐量。在IXP中,DRAM提供低成本、高带宽的存储,主要用于存储块数据(如完整的包或帧)。除了64位数据线,DRAM总线还包括传输地址、控制存/取操作、以及传输时钟信号的线路。存储器使用时钟信号来使取或存操作与处理器时钟同步。访问SRAM的接口与访问DRAM的接口是完全分开的。尽管图14-2中只画出一条SRAM总线
12、,事实上,IXP2xxx使用多条SRAM总线以获得较高的吞吐量。SRAM总线除了提供对外部SRAM的访问以外,与协处理器的交互也是通过SRAM总线进行的。除了存储器总线,IXP2xxx还有一个慢端口(Slowport)连接。与存储器总线不同,慢端口连接是共享的,连接提供了对若干个外部硬件单元的访问。比如,在启动过程中慢端口总线提供对ROM或FlashROM的访问。正像名字指示的一样,慢端口总线不是为高速数据传输而设计的。(5)内部组件IXP2xxx的内部结构很复杂,因为芯片包含了总线、存储器、处理器、接口和其它功能单元。下面列出了主要的功能单元。数量组件目的1嵌入式RISC处理器控制、高层协议
13、和例外8/16包处理引擎I/O、基本包处理和包转发1+SRAM访问单元协调对外部SRAM总线的访问1+DRAM访问单元协调对外部DRAM总线的访问1MSF访问单元协调对外部I/O设备的访问1PCI总线访问单元协调对外部PCI总线的访问1SHaC单元存储中间结果、计算哈希值等1加密单元加解密操作1系统底盘(chassis)提供内部控制和数据传输的通道嵌入式RISC处理器负责执行网络处理器中的控制面处理任务,如进行芯片初始化配置、芯片控制/管理、运行路由协议、更新路由表等,另外还负责对异常数据包的处理。包处理引擎是IXP的核心部件,能够访问IXP中的所有共享资源,负责绝大部分的包处理任务,是IXP
14、取得线速处理性能的关键。IXP2400中包含8个32位包处理引擎,IXP28x0包含16个32位包处理引擎。SRAM访问单元用于和外部SRAM接口,控制和管理IXP中其它功能单元对外部SRAM的访问。SRAM访问单元还可用于和符合相应接口规范的协处理器接口,执行特定的包处理操作。IXP2400中有两个SRAM访问单元,IXP28x0中有四个SRAM访问单元。不同的SRAM访问单元相互独立,可并行工作。DRAM访问单元用于和外部DRAM接口,控制和管理IXP中其它功能单元对DRAM的访问。IXP2400有一个DRAM访问单元,而IXP28x0有三个DRAM访问单元。PCI总线访问单元用于和主控C
15、PU、其它IXP网络处理器以及PCI以太网卡等符合PCI规范的设备接口。SHaC单元其实包括了三个部分:用于存放中间结果的片上Scratchpad存储器,支持48比特、64比特及128比特哈希运算的哈希单元,以及用于对IXP中的控制和状态寄存器进行访问操作的单元(称为CAP)。加密单元是IXP2850特有的,负责进行加解密操作。系统底盘是IXP中各功能单元之间的内部高速通道,由多组单向高速数据总线、命令总线以及相应的总线仲裁单元组成。正是由于系统底盘的分立式多总线结构和高带宽的数据总线,使得IXP的并行处理优势得以充分发挥,取得较高的性能指标。图14-4是IXP2xxx的高层结构视图,给出了内
16、部组件和外部单元之间的连接。图14-4 Intel IXP2xxx的概念组织图14-5 IXP2400硬件结构框图图14-5是IXP2400的内部硬件结构图。总体上来看,IXP采用了多主控+系统底盘+多目标的硬件体系结构。多主控是指IXP的多个主控单元,包括XScale核、微引擎、PCI控制单元等硬件功能单元。多目标是指IXP中的多个从属单元,包括存储访问单元、MSF、SHaC等。主控单元发起和控制对多个目标的操作,目标执行主控单元规定的操作,而底盘提供了主控单元与目标之间的数据传输通道和命令传输通道。具体而言,IXP的硬件体系结构具有如下主要特征:1)采用分立的内部总线结构,将不同存储单元的
17、数据总线、数据读/写总线分开,可以同时对不同存储单元进行读/写操作,大大提高了IXP的并行处理能力。2)引入命令总线仲裁器对各主控单元发出的命令进行排队判优,保证了指令的优先级,避免了指令的冲突和拥塞。3)采用分布式的硬件结构,即多主控+多目标结构。不同的硬件功能单元在高速内部总线的支持下各司其职,负责专门的数据处理操作,大大增强了IXP的并行处理能力。4)采用多微引擎并行的硬件结构,所有微引擎可同时工作,大大增强了IXP的并行处理能力。IXP2400进一步将8个微引擎分为2组(Cluster0和Cluster1),并使用独立的SRAM数据总线,有效地缓解了总线冲突,进一步增强了IXP2400
18、的并行处理能力。(6)IXP2xxx处理器体系IXP2xxx使用一个五层的处理器体系,其中三层在芯片中,另外两层由外部硬件提供。以下是处理器类型及每种处理器的特性。处理器类型是否在芯片上?是否可编程?通用处理器否是嵌处式RISC处理器是是I/O处理器是是协处理器是否物理接口否否位于最高层的通用处理器(GPP)不是IXP2xxx芯片的一部分。在许多系统中,需要一个外部通用处理器执行整体控制和管理功能。GPP不是快路径的一部分。比如,考虑一个在每个接口都使用一个网络处理器的系统。在这种情况下,网络处理器不需要涉及全局路由决策,路由决策可被分配给一个与所有网络处理器有交互作用的通用处理器。通用处理器
19、收集路由信息,选择最佳路由,并通知每个网络处理器。Intel用术语核心处理器指代嵌入式RISC处理器。IXP2xxx上的RISC处理器是与ARM结构兼容的一种处理器,称为XScale。运行在常规操作系统(如Linux)上的XScale核作为一个控制点管理微引擎并提供一个可以下载程序和配置芯片的接口。另外,XScale处理高层协议以及例外的包。因此,嵌入式处理器不是用于执行常规的快路径处理。Intel使用术语微引擎(microengine)指代包处理器。IXP2xxx包含多个微引擎(IXP2400包含8个,IXP28x0包含16个)。与嵌入式RISC处理器不同,微引擎是一种只提供少量基本指令的低
20、级设备,微引擎构成了快路径处理的基础,主要用来处理I/O设备与存储器之间的低层数据传输以及基本包处理任务。与嵌入式处理器不同,微引擎不运行操作系统。IXP2xxx包含几种协处理器和功能单元,其中一些构成了快路径的一部分。比如,芯片包含一个哈希单元,可用来高速计算一个48比特、64比特或128比特的自适应多项式哈希函数。IXP2xxx还包含4个与实时时钟一起工作的定时器。IXP2850还包含了对几种加密算法(如三重DES、AES)、检查和累加以及安全哈希函数的硬件支持。物理接口硬件不是IXP2xxx的一部分,因此需要另外的芯片来实现第一层和第二层的处理。Intel提供处理POS-PHY以及传统以
21、太网组帧的接口芯片。由于MSF接口是可配置的,IXP2xxx上的每个高速物理接口可以遵循任何一种众所周知的标准(如SPI-3、SPI-4.2或Utopia)。Utopia是IXP2xxx接收/发送ATM格式的数据包时采用的接口协议,IXP2400支持Utopia L1/L2/L3三个速率等级,速率分别为OC-3、OC-12和OC-48。POS-PHY是IXP2xxx接收/发送POS(Packet Over SONET)格式的数据包时采用的接口协议。POS-PHY L3和POS-PHY L4规范分别被Optical Internetworking Forum批准为SPI-3和SPI-4.2,速率
22、分别为OC-48和OC-192。POS是利用点对点协议(PPP)实现IP包到SONET帧有效载荷映射的系列协议,标准的POS映射为IP/PPP/HDLC/SONET。IP包被封装到PPP分组中,PPP提供了多种协议封装、错误控制和链路初始化等功能。然后,PPP分组利用HDLC协议成帧,以提供分组分界和错误控制。(7)IXP2xxx的存储器IXP2xxx使用多种存储器。下面列出了各种存储器的大小和用途。存储器类型最大容量是否在芯片上?典型用途GP Registers256(2 banks)是中间运算Inst. Cache32Kbytes是最近使用过的指令Data Cache32Kbytes是最近
23、使用过的数据Mini Cache2Kbytes是重用过一次的数据Write buffer未规定是写缓冲区Local memory2560bytes/微引擎是本地缓存Scratchpad16Kbytes是进程间通信和同步Inst. Store4Kbytes/微引擎是存放微引擎指令FlashROM未规定否用于启动SRAM64Mbytes否存放表或包头DRAM2Gbytes否存储包程序员需要关注存储器体系中的某些存储器,其余的可以忽略。比如,尽管cache提供了性能改进,但是大多数cache对于程序员是透明的(即程序员不需要分配cache中的空间)。程序员主要关注四种存储器:SRAM、DRAM、本地
24、存储器和Scratchpad,程序员必须明确决定如何使用它们。也就是说,对于每一个数据项,程序员必须选择其中的一种存储器来存放。上表列出了选择存储器的标准之一:最大容量,下表列出了各种存储器的其它特性。存储器类型访问单位相对访问延时特性(字节)Local41用LM_ADDR寄存器访问Scratchpad410通过原子读-修改-写进行同步支持进程间通信push/pull reflector modeSRAM414遵循QDR规范,原子操作支持队列和环,比特操作DRAM820连接到XScale、微引擎和PCI总线控制器从上表可以看出,每种存储器都有一些特性,使其适合某些任务。比如,尽管本地存储容量很
25、小,但是它提供了最小的访存时间。Scratch和SRAM都提供原子操作,如读-修改-写,因此Scratch和SRAM都可以用来同步并行处理器(如微引擎)。SRAM的访存时间比Scratch长,但比DRAM小;此外,SRAM具有操作队列和环的机制。因此,SRAM适合于存放包头或包链表。最后,由于DRAM有到I/O设备的直接传输路径、容量大并有较高的带宽,DRAM适合于存放输出或输出的包。程序员需要注意的是,存储访问时间可能比指令执行时间长很多。比如,一次DRAM访存需要几十个时钟周期,其中每个时钟周期可以执行一条微引擎指令。因此,在等待从DRAM读取一个数值的时候,微引擎可以执行许多条指令。我们
26、在后面将会讨论访存时间和指令执行时间之间的差异,以及程序员应采取的措施。(8)字和长字访问除了访存时间和存储器特性以外,程序员还必须了解底层物理存储系统是如何组织存储器访问的。每种物理存储器都定义了访问单位的长度,有时称为可寻址数据单位。一个两字节的单位(即16比特)称为一个字,一个四字节的单位(即32比特)称为一个长字(longword),而一个八字节的单位(64比特)称为一个四倍长字(quadword)。为理解长度大于一个字节的可寻址数据单位带来的后果,考虑按长字组织的Scratch存储器。尽管微引擎和XScale处理器可为每一个字节产生地址,但是底层机制并不提供对单个字节的访问。事实上,
27、每次存储器访问读或存四个字节。因此,如果程序员要访问地址为2的字节,则底层存储器硬件会取地址0地址3的存储单元(即第一个长字)。将存储器组织为字或长字意味着程序员必须仔细规划数据的布局。假设程序员定义了两个数据项,每个数据项长16比特,存放在存储器中相邻的位置。如果每个数据项被分配在一个字中,则这两个数据项通过一次存储器访问就可全部读出。如果存放时跨越了字边界,则底层存储器硬件需要访问存储器两次。因此,为获得最佳的性能,程序员必须了解存储器组织,并且要合理安排数据布局以最小化访存时间。某些网络处理器体系结构特征(如底层物理存储系统的组织)对于程序员编写高质量的代码是非常重要的。程序员必须理解竞
28、争、同步和时序这样的问题,因此程序员必须重点理解各功能部件之间的连接、共享的资源以及按照特定顺序发射指令带来的结果。(9)基于IXP2xxx的典型系统结构图14-6是一个基于IXP2xxx的典型的Ingress/Egress系统结构。在该结构中使用了两个IXP2xxx进行包处理,其中Ingress IXP2xxx通过MACs或Framers从以太网接收数据包,对所接收的包进行处理后通过交换结构接口芯片将包发送到交换结构;Egress IXP2xxx从交换结构接收包,对包进行处理后发送到以太网。Ingress IXP2xxx与外部网络之间的MSF接口配置为SPI或Utopia协议模式,与交换结构
29、之间的MSF接口配置为CSIX协议模式。同理,Egress IXP2xxx与交换结构之间的MSF接口配置为CSIX协议模式,与外部网络之间的MSF接口配置为SPI或Utopia协议模式。Ingress/Egress模式是一种典型的基于IXP2xxx的系统架构模式。在实际应用中,当处理功能较简单时,可以采用单片IXP2xxx的系统架构模式,见图14-7;当处理功能较复杂时,也可以采用多个IXP2xxx串连的系统架构模式。图14-6 基于IXP2400的典型系统架构方案图14-7 使用一个IXP2800的全双工架构方案第十五章 嵌入式RISC处理器(XScale核)前一章概要介绍了Intel IX
30、P2xxx网络处理器的体系结构,这一章讨论称为XScale核的嵌入式RISC处理器。本章将不会给出所有的硬件细节,而是主要关注它的作用以及软件可以使用的设施。(1) 嵌入式处理器的用途Intel IXP2xxx中包含一个嵌入式RISC处理器。为理解嵌入式处理器的用途,我们需要考虑一个IXP2xxx是如何在一个网络系统中使用的。在一个只有少量低速接口的网络系统中,一片IXP2xxx能够处理几个接口;而在一个具有高速网络接口的系统中,每个接口必须使用一个IXP2xxx。整个网络系统的结构决定了嵌入式处理器的作用,因为包含多个IXP2xxx芯片的系统通常包括一个通用处理器,用于在多个IXP2xxx间
31、进行控制和协调。图15-1说明了这两种方法。图15-1 两种可能的网络系统设计方法在使用一片IXP2xxx芯片处理所有网络接口的设计中,片上RISC处理器执行整个系统的管理任务。在包括一个通用处理器的系统中,与整个系统相关的任务由通用处理器执行,芯片中的嵌入式处理器只处理与芯片相关的任务。因此,嵌入式RISC处理器可以被分配以下一些或全部的任务:l 自举l 异常处理l 高层协议处理l 交互程序调试(Interactive debugging)l 诊断和日志l 内存分配l 应用程序(需要的话)l 用户接口和/或到通用处理器的接口l 控制包处理器l 其它管理功能以上大部分任务都不言自明。管理和控制
32、功能包括:启动和停止包处理,创建或修改由包处理引擎使用的数据结构,描述配置细节(如每个网络接口的地址等)。自举包括片上存储器和处理器的初始化。比如,当系统启动时,嵌入式RISC处理器首先引导,然后将微引擎代码装入微引擎的指令存储区,启动微引擎。如果系统包括多个IXP2xxx芯片,通用处理器必须执行整个系统的管理任务,为此通用处理器必须与每个IXP2xxx上的嵌入式RISC处理器通信。比如,通用处理器运行路由协议软件;一旦计算出全局路由表后,通用处理器将信息传递给每个IXP2xxx上的嵌入式处理器;每个嵌入式RISC处理器从GPP接收路由信息,修改本地的转发表。转发表存放在嵌入式处理器和微引擎共
33、享的内存中,嵌入式处理器维护转发表,微引擎使用转发表查找每个数据包的下一跳地址。尽管嵌入式RISC处理器并不用于快路径,但它确实要处理一些数据包。首先,它要处理异常,如不匹配任何分类规则的包或产生出错消息的包(如目的地址不可达的包),因此嵌入式RISC处理器通常要负责产生ICMP错误消息。其次,嵌入式RISC处理器负责处理发给本地系统的包。比如,在一个小型系统中,嵌入式RISC处理器实现高层协议(如TCP);在一个较大的系统中,嵌入式RISC处理器将TCP包转发给通用处理器。(2) XScale架构IXP2xxx上的嵌入式RISC处理器由一个XScale处理器组成,XScale实现了ARM的一
34、个变化版本(实现了ARM V5TE指令集,但不包括浮点指令集)。其主要特性包括:l 精简指令集计算(RISC)l 可配置大端/小端模式的的32位算术运算l 由协处理器提供的矢量浮点运算l 字节可寻址内存l 虚拟存储支持l 内置串口l 支持内核化操作系统的硬件设施l 性能监视单元(3) RISC指令集和寄存器遵循RISC模式,XScale指令集包含了相对较少的指令,而且为保证每个时钟周期能够完成一条指令,指令被设计为能够很快执行。因此,XScale不提供执行时间依赖于操作数长度的指令,比如没有串拷贝或串比较等对一个内存块操作的指令。和大多数RISC处理器一样,XScale依赖寄存器来获得高速度。
35、指令执行前操作数必须先取到寄存器中。在一个典型的指令中,处理器从两个寄存器中取操作数,执行一个操作,结果放到第三个寄存器中。如果操作数都准备就绪的话,处理器每个时钟周期能够完成一条指令。性能监视单元能够在不降低处理器运行速度的情况下测量程序的运行性能,监视的内容包括:l 指令cache不命中率l Translation Lookaside Buffer(TLB)不命中率l 指令流水线中的停顿l 由软件发起的分支指令数目(4) XScale存储器组织XScale是一个32位处理器,它的寄存器及add、shift、load、store等操作均是32位的。对于算术运算采用大端还是小端的问题,ARM结
36、构采用的方法是不预先确定采用什么模式,而是在处理器引导时进行配置。Intel提供的IXP2xxx引导代码将XScale配置为大端模式。XScale允许运行程序对每个字节寻址。前面我们介绍过,IXP2xxx提供了访问QDR-SRAM和DDR-DRAM的机制,而这两种存储器分别定义了4字节或8字节的数据访问单元。如果底层存储系统使用长字或四倍长字的寻址能力,那么XScale如何提供字节寻址呢?答案在于接口硬件:在处理器和存储器之间使用不同的指令cache和数据cache。当数据cache存/取一个值时,它按照底层存储器的访问单元长度进行存/取;当它与处理器通信时,只传输需要的字节。因此,如果XSc
37、ale上的一个程序要从DRAM中读入一个字节,数据cache取8个字节单元,取出需要的字节传给处理器。类似地,当程序要将一个字节存入DRAM时,数据cache必须先取出8字节单元,修改要存储的那个字节,然后把整个8字节单元写回DRAM。XScale定义了一个大小为232字节的线性地址空间,所有的外部存储器及部分片上存储器、PCI总线、其它存储器映射的I/O设备等都被映射到这个空间。图15-2说明外部存储器和硬件设备是如何映射到地址空间的,从高地址到低地址依次是PCI存储器、Scratchpad和CSRs(控制与状态寄存器)、外部SRAM、DRAM和Slowport。从0开始的地址映射到Slow
38、port,这一点非常重要。因为低地址用于引导处理器,将从0开始的地址映射到Slowport意味着XScale用于引导的代码来自Flash ROM。图15-2 XScale使用的地址空间XScale硬件包括了一个提供虚存的存储管理单元。存储管理单元允许程序运行在一个虚地址空间,硬件将部分虚空间映射到物理地址上。也就是说,系统可以被配置成允许一个运行程序访问部分或全部的物理地址空间。XScale和包处理器是紧密结合在一起的,它们都执行某些包处理任务。共享存储是处理器用来高效交换数据的最重要机制之一,可以用来在XScale和包处理器之间传递数据。比如,包处理器统计包流量,当数据包到来或离开时更新共享
39、内存中的一个计数器,XScale从共享内存中取计数值,根据网络管理的要求计算统计数据。类似地,XScale可以使用共享内存创建和维护包处理器使用的转发表。然而包处理器不使用XScale的地址空间,因此当需要在XScale和微引擎之间传递一个指针时,必须将指针从一个地址空间转换到另一个地址空间。一般由XScale处理所有的地址转换。因此,当XScale创建一个转发表时,它将所有指针转换成微引擎能够理解的地址。类似地,当XScale从一个微引擎接收一个指针时,它将微引擎的本地地址转换成XScale地址空间中的一个等价的值。(5)其它I/O用于I/O设备的控制与状态寄存器(CSR)出现在XScale
40、的物理地址空间,因此,除了使用总线来执行数据访问和传输操作以外,运行在XScale上的设备驱动程序还可以访问设备的CSR。另外,由于XScale可以访问外部PCI总线,因此XScale可以访问和控制PCI总线上的任何一个设备。(6) 内部外设单元IXP2xxx中有四种机制只能被XScale处理器访问,即它们不能被微引擎所访问。这四种机制是:一个UART,四个32位的倒计数定时器,八个通用I/O管脚,一个Slowport接口。这些机制被称为内部外设,因为它们在IXP2xxx的内部,但对于XScale来说是外设。UART硬件提供符合EIA RS-232C标准的串行线路,只有XScale能够访问作为
41、控制台设备的串行线。四个倒计数定时器可以被配置为在计数值到达0时中断XScale。其中一个定时器可以用做系统看门狗,当定时器值到达0时,XScale重启动。定时器的计数速率是可配置的:可以运行在XScale的时钟频率、XScale时钟频率的1/16或XScale时钟频率的1/256。只有XScale能够使用这些定时器,这意味着XScale必须处理所有涉及超时的协议处理任务。XScale可以通过MSF接口访问四个通用I/O管脚,这四个管脚提供了一个外部连接,可以连接到了另外的硬件或用于调试。(7)用户模式和内核模式操作和许多处理器一样,XScale提供了多种带有保护级的操作模式。特别是,XSca
42、le提供了对内核化操作系统的硬件支持。操作系统内核运行在最高优先级,能够访问整个地址空间和控制所有的I/O。运行在操作系统下的应用程序作为用户级进程执行,应用没有优先级,不能直接控制I/O设备,不能访问整个地址空间。应用程序运行在一个不能被其它应用程序访问的受保护的虚地址空间。内核提供所有的服务,当应用程序需要执行I/O时,必须请求内核执行操作和返回结果。(8)协处理器15Intel芯片包含一个协处理器,它允许XScale配置和控制IXP2xxx上的几个硬件单元。这个协处理器称为系统控制协处理器15(CP15),只能由XScale访问。XScale调用CP15配置MMU、读/写缓冲器、时钟功能
43、和高速缓存。另外,在测试代码时CP15可以用来设置断点。第十六章 包处理硬件(微引擎)(1) 微引擎的用途在IXP2xxx的处理器体系中,微引擎构成了最低层的可编程处理器,因此使用微引擎执行协议处理比使用较高等级的处理器执行相同的任务获得的吞吐量要高。特别是,微引擎被设计用来执行快路径上的处理。为进一步提高快路径的处理,IXP2xxx包含多个可并行执行的微引擎。尽管允许并行微引擎可以获得比XScale处理器高得多的集合速率,但实际上要获得高速度是很困难的,因为必须将微引擎合理地分配给特定的任务。微引擎被设计来执行ingress和egress协议处理任务。典型地,微引擎要负责:l 从物理层硬件接
44、收包l 校验和检查l 包头处理和分类l 包缓存l 查表和转发l 包头修改l 校验和计算l 从物理层硬件发送包后面我们将会看到,微引擎不直接执行操作,而是依靠各种辅助功能单元执行操作。(2) 微引擎架构图16-1 微引擎内部结构框图微引擎具有以下的一般特性:l 可编程微控制器l 采用RISC设计l 本地控制存储器l 执行数据通道:一个算术逻辑单元ALU,一个16入口的CAM(每个入口32比特),8个线程和上下文切换的硬件支持;l 数据通道寄存器:256个通用寄存器,512个传输寄存器,128个Next Neighbor寄存器,640个字的本地内存。l 一个CRC计算单元l 可直接访问片上各种功能
45、单元(3) 微序列的概念从以上微引擎的特性可以看到,微引擎不是一个传统的CPU,而是一个作为微序列器的低级设备。也就是说,微引擎不包含每一种操作的本地指令,大多数指令只是调用芯片中的其它功能单元。有两个例子可以来解释这个概念。首先,考虑像加或减这样的算术运算。在一个传统的CPU中,每个算术操作被赋以一个唯一的操作码,程序对于每个希望的指令给出操作码。比如,运行在传统CPU上的程序可能包含一条指令:Add R2, R3,说明寄存器3中的整数值应当被加到寄存器2的数值上。然而,微引擎上的算术操作被合并到一个引用 ALU单元的操作码中。如为了将两个整数值相加,运行在微引擎上的程序调用alu操作,并声
46、明add为一个操作数。Alu指令的格式为:aludest, A_op, alu_op, B_op,其中dest为目的寄存器,用于存放指令的运算结果;A_op和B_op为源操作数寄存器;alu_op为ALU运算,包括12种运算符(+、+16、+8、+carry、B-A、B、B、AND、AND、AND、OR、XOR)。作为微引擎指令的第二个例子,考虑内存引用。在一个传统的CPU上,硬件将一个寻址模式关联到每个操作数,寻址模式说明操作数是常数(立即数)还是对内存中一个值的引用。因此,程序中可能包含如下的指令:Load R3, X,说明将内存位置X的当前值拷贝到寄存器3。和传统CPU(如XScale)
47、不同的是,微引擎不提供任何引用内存的寻址模式,微引擎也没有一个本地的load指令。程序员必须发射一条指令说明存储器接口、存储器中的地址和一个操作(即取或存)。如sramcmd, xfer, src_op1, src_op2, ref_cnt, opt_tok用于在微引擎和SRAM之间传输数据,其中cmd指明是read还是write;xfer指明使用的传输寄存器;src_op1+src_opt2指明SRAM中的一个位置;ref_cnt指明数据个数(18,以长字为单位);opt_tok是一个可选的令牌,可以用来改变访存的粒度、控制线程同步等。对于一个取操作,微引擎必须等待存储器接口硬件完成操作,然后将数值移到寄存器中被程序使用。由此可见,微引擎不提供算术操作的本地硬件指令,也不提供直接访问内存的寻址模式。运行在微引擎上的程序控制和使用芯片上的功能单元来访问内存和执行操作。(4) 微引擎指令集微引擎指令集的操作码不到64个,图16-2和图16-3总结了微引擎的指令集,并列出了每种指令的用途。
限制150内