Intel网络处理器概述教学内容_第1页
Intel网络处理器概述教学内容_第2页
Intel网络处理器概述教学内容_第3页
Intel网络处理器概述教学内容_第4页
Intel网络处理器概述教学内容_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Good is good, but better carries it.精益求精,善益求善。Intel网络处理器概述-第十四章Intel网络处理器概述前面我们讨论了网络处理器的一般问题,从本章开始我们将深入讨论一个特定的网络处理器-Intel网络处理器,以便对前面介绍的一般概念提供一个具体的说明。(1)IXA术语IXA(InterneteXchangeArchitecture)泛指Intel网络处理器体系结构以及相关的支持芯片。尽管IXA主要集中在网络处理器硬件,它也包括软件体系结构,因为如果不预想使用硬件的软件,可编程硬件是无法定义的。IXA包括控制面(慢路径)和数据面(快路径)处理,定义了

2、硬件抽象、应用编程接口和互连机制,但是没有给出细节,IXA只是给出了概念组织。IXA中有如下三个重要组成部分:微引擎(Microengine,ME):微引擎是Intel网络处理器的核心部件,也是Intel处理器取得线速处理性能的关键,在其它功能单元的支持下执行快路径上的包处理。XScaleCore:XScale核是Intel网络处理器的高层控制和管理单元,是与StrongARM兼容的一种微处理器,负责控制面的处理任务以及异常数据包的处理,上面运行VxWorks、嵌入式Linux等实时操作系统。IXA可移植框架(IXAPortabilityFramework):为基于Intel网络处理器的软件开

3、发提供应用编程接口和硬件抽象,使得运行在XScale核和微引擎上的软件具有良好的可移植性和可重用性。开发者对新一代网络处理器的要求包括四个方面:灵活性,高性能,可扩展性和可移植性。IXA能够满足这四个方面的要求。灵活性:在IXA架构的网络处理器中,微引擎完全可编程,在低层硬件设备的支持下可实现许多复杂的网络处理功能,具有较好的功能灵活性。高性能:IXA架构的网络处理器使用多个可并行操作的微引擎,通过增加微引擎的数目、提高微引擎和XScale核的时钟频率、采用新技术减小存储器访问延时以及增加专用硬件功能单元,可使网络处理器线速处理高达OC-192的网络数据,具备了网络宽带化所要求的高性能。可扩展

4、性:通过增加微引擎的数目以及提高微引擎和XScale核的时钟频率,可使网络处理器达到OC-192的高端处理速率,具有良好的可扩展性。可移植性:IXA可移植框架提供了应用编程接口和硬件抽象,使得基于该框架开发的软件与底层硬件实现松耦合,具有良好的可移植性和重用性。(2)IXP术语IXP(InterneteXchangeProcessor)指实现了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么OC-192/10

6、Gbps的边缘网和核心网应用,有16个微引擎,每秒可完成超过250亿次的操作,可应用于骨干网的路由与交换、无线设备、IPSec和VPN、10Gbps的企业交换和路由等。IXP2850在IXP2800的基础上增加了加密单元,可达到10Gbit/s的加/解密速度,可用于IPSec、VPN、QoSRouter等场合。通常用IXP2xxx泛指其中的任何一款网络处理器芯片。图14-1Intel第二代IXP网络处理器(3)IXP2xxx的主要部件一个IXP网络处理器是一块独立的芯片,它包含了一组复杂的可编程及不可编程的处理器和功能单元。以下是IXP2xxx芯片中的主要部件:一个嵌入式RISC处理器8到16

7、个可编程包处理器多条独立的片上总线:提供芯片内部各功能单元之间的高速通道,包括多组单向高速数据总线和命令总线;处理器同步机制共享和不共享的片上存储器:每个微引擎内部有专用的本地存储器,芯片内部还有共享的Scratchpad存储器;一个低速串行接口:连接到XScale核,主要用于控制和管理;多个外部存储器接口:连接外部SRAM、DRAM及ROM(或FlashROM)等;多个外部I/O总线接口:PCI总线接口及MSF接口;计算哈希和加密的协处理器其它功能单元(4)外部连接图14-2给出了IXP2xxx支持的主要外部连接。IXP2xxx有四类外部连接:一个串行接口,三个外部I/O总线接口,两个外部存

8、储总线接口,一个低速设备接口。图14-3列出了IXP2400主要连接的速度。每个IXP2xxx芯片包含一个通用异步收发器(UART)硬件,提供到传统串行线路的接口,串行线连接到嵌入式RISC处理器。由于串口主要用于控制和管理功能,因此它并不像其它I/O接口那样运行在高速度。所以,尽管程序员可以选择通过它传输数据,串口并不适合用于快路径。IXP2xxx芯片中的PCI(PeripheralComponentInterconnect)总线提供两个主要功能。第一,允许一个IXP2xxx连接到I/O设备(如磁盘);第二,允许设计者使用传统的CPU作为通用控制处理器。由于PCI技术非常流行,许多I/O设备

9、遵循这个标准。尽管PCI技术非常流行,但是其整体的吞吐量限制在大约2.2Gbps。为处理更高的数据速率,IXP2xxx使用了一个媒体或交换结构(MediaorSwitchFabricInterface,MSF)接口。MSF是IXP2xxx与外部物理层设备(PHY)及交换结构的接口单元,是数据出入IXP2xxx的窗口。MSF通过Utopia、SPI协议与PHY接口,通过CSIX与交换结构接口。Utopia、SPI和CSIX都是标准化协议,Utopia用于接收ATM格式的包,SPI用于接收POS格式的包,CSIX是IXP2xxx与交换结构进行数据接收/发送时使用的接口协议,其数据包格式为Cfram

10、e。通过这些标准协议MSF能够方便地与其它厂家的产品进行接口。图14-2IXP2xxx的主要外部连接图14-3IXP2400外部连接的速度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总线,事实上,IXP2xxx使用多条SRAM总线以获得较高的吞吐量。SRAM总线除了

12、提供对外部SRAM的访问以外,与协处理器的交互也是通过SRAM总线进行的。除了存储器总线,IXP2xxx还有一个慢端口(Slowport)连接。与存储器总线不同,慢端口连接是共享的,连接提供了对若干个外部硬件单元的访问。比如,在启动过程中慢端口总线提供对ROM或FlashROM的访问。正像名字指示的一样,慢端口总线不是为高速数据传输而设计的。(5)内部组件IXP2xxx的内部结构很复杂,因为芯片包含了总线、存储器、处理器、接口和其它功能单元。下面列出了主要的功能单元。数量组件目的1嵌入式RISC处理器控制、高层协议和例外8/16包处理引擎I/O、基本包处理和包转发1+SRAM访问单元协调对外部

13、SRAM总线的访问1+DRAM访问单元协调对外部DRAM总线的访问1MSF访问单元协调对外部I/O设备的访问1PCI总线访问单元协调对外部PCI总线的访问1SHaC单元存储中间结果、计算哈希值等1加密单元加解密操作1系统底盘(chassis)提供内部控制和数据传输的通道嵌入式RISC处理器负责执行网络处理器中的控制面处理任务,如进行芯片初始化配置、芯片控制/管理、运行路由协议、更新路由表等,另外还负责对异常数据包的处理。包处理引擎是IXP的核心部件,能够访问IXP中的所有共享资源,负责绝大部分的包处理任务,是IXP取得线速处理性能的关键。IXP2400中包含8个32位包处理引擎,IXP28x0

14、包含16个32位包处理引擎。SRAM访问单元用于和外部SRAM接口,控制和管理IXP中其它功能单元对外部SRAM的访问。SRAM访问单元还可用于和符合相应接口规范的协处理器接口,执行特定的包处理操作。IXP2400中有两个SRAM访问单元,IXP28x0中有四个SRAM访问单元。不同的SRAM访问单元相互独立,可并行工作。DRAM访问单元用于和外部DRAM接口,控制和管理IXP中其它功能单元对DRAM的访问。IXP2400有一个DRAM访问单元,而IXP28x0有三个DRAM访问单元。PCI总线访问单元用于和主控CPU、其它IXP网络处理器以及PCI以太网卡等符合PCI规范的设备接口。SHaC

15、单元其实包括了三个部分:用于存放中间结果的片上Scratchpad存储器,支持48比特、64比特及128比特哈希运算的哈希单元,以及用于对IXP中的控制和状态寄存器进行访问操作的单元(称为CAP)。加密单元是IXP2850特有的,负责进行加解密操作。系统底盘是IXP中各功能单元之间的内部高速通道,由多组单向高速数据总线、命令总线以及相应的总线仲裁单元组成。正是由于系统底盘的分立式多总线结构和高带宽的数据总线,使得IXP的并行处理优势得以充分发挥,取得较高的性能指标。图14-4是IXP2xxx的高层结构视图,给出了内部组件和外部单元之间的连接。图14-4IntelIXP2xxx的概念组织图14-

16、5IXP2400硬件结构框图图14-5是IXP2400的内部硬件结构图。总体上来看,IXP采用了多主控+系统底盘+多目标的硬件体系结构。多主控是指IXP的多个主控单元,包括XScale核、微引擎、PCI控制单元等硬件功能单元。多目标是指IXP中的多个从属单元,包括存储访问单元、MSF、SHaC等。主控单元发起和控制对多个目标的操作,目标执行主控单元规定的操作,而底盘提供了主控单元与目标之间的数据传输通道和命令传输通道。具体而言,IXP的硬件体系结构具有如下主要特征:1)采用分立的内部总线结构,将不同存储单元的数据总线、数据读/写总线分开,可以同时对不同存储单元进行读/写操作,大大提高了IXP的

17、并行处理能力。2)引入命令总线仲裁器对各主控单元发出的命令进行排队判优,保证了指令的优先级,避免了指令的冲突和拥塞。3)采用分布式的硬件结构,即多主控+多目标结构。不同的硬件功能单元在高速内部总线的支持下各司其职,负责专门的数据处理操作,大大增强了IXP的并行处理能力。4)采用多微引擎并行的硬件结构,所有微引擎可同时工作,大大增强了IXP的并行处理能力。IXP2400进一步将8个微引擎分为2组(Cluster0和Cluster1),并使用独立的SRAM数据总线,有效地缓解了总线冲突,进一步增强了IXP2400的并行处理能力。(6)IXP2xxx处理器体系IXP2xxx使用一个五层的处理器体系,

18、其中三层在芯片中,另外两层由外部硬件提供。以下是处理器类型及每种处理器的特性。处理器类型是否在芯片上?是否可编程?通用处理器否是嵌处式RISC处理器是是I/O处理器是是协处理器是否物理接口否否位于最高层的通用处理器(GPP)不是IXP2xxx芯片的一部分。在许多系统中,需要一个外部通用处理器执行整体控制和管理功能。GPP不是快路径的一部分。比如,考虑一个在每个接口都使用一个网络处理器的系统。在这种情况下,网络处理器不需要涉及全局路由决策,路由决策可被分配给一个与所有网络处理器有交互作用的通用处理器。通用处理器收集路由信息,选择最佳路由,并通知每个网络处理器。Intel用术语核心处理器指代嵌入式

19、RISC处理器。IXP2xxx上的RISC处理器是与ARM结构兼容的一种处理器,称为XScale。运行在常规操作系统(如Linux)上的XScale核作为一个控制点管理微引擎并提供一个可以下载程序和配置芯片的接口。另外,XScale处理高层协议以及例外的包。因此,嵌入式处理器不是用于执行常规的快路径处理。Intel使用术语微引擎(microengine)指代包处理器。IXP2xxx包含多个微引擎(IXP2400包含8个,IXP28x0包含16个)。与嵌入式RISC处理器不同,微引擎是一种只提供少量基本指令的低级设备,微引擎构成了快路径处理的基础,主要用来处理I/O设备与存储器之间的低层数据传输

20、以及基本包处理任务。与嵌入式处理器不同,微引擎不运行操作系统。IXP2xxx包含几种协处理器和功能单元,其中一些构成了快路径的一部分。比如,芯片包含一个哈希单元,可用来高速计算一个48比特、64比特或128比特的自适应多项式哈希函数。IXP2xxx还包含4个与实时时钟一起工作的定时器。IXP2850还包含了对几种加密算法(如三重DES、AES)、检查和累加以及安全哈希函数的硬件支持。物理接口硬件不是IXP2xxx的一部分,因此需要另外的芯片来实现第一层和第二层的处理。Intel提供处理POS-PHY以及传统以太网组帧的接口芯片。由于MSF接口是可配置的,IXP2xxx上的每个高速物理接口可以遵

21、循任何一种众所周知的标准(如SPI-3、SPI-4.2或Utopia)。Utopia是IXP2xxx接收/发送ATM格式的数据包时采用的接口协议,IXP2400支持UtopiaL1/L2/L3三个速率等级,速率分别为OC-3、OC-12和OC-48。POS-PHY是IXP2xxx接收/发送POS(PacketOverSONET)格式的数据包时采用的接口协议。POS-PHYL3和POS-PHYL4规范分别被OpticalInternetworkingForum批准为SPI-3和SPI-4.2,速率分别为OC-48和OC-192。POS是利用点对点协议(PPP)实现IP包到SONET帧有效载荷映射

22、的系列协议,标准的POS映射为IP/PPP/HDLC/SONET。IP包被封装到PPP分组中,PPP提供了多种协议封装、错误控制和链路初始化等功能。然后,PPP分组利用HDLC协议成帧,以提供分组分界和错误控制。(7)IXP2xxx的存储器IXP2xxx使用多种存储器。下面列出了各种存储器的大小和用途。存储器类型最大容量是否在芯片上?典型用途GPRegisters256(2banks)是中间运算Inst.Cache32Kbytes是最近使用过的指令DataCache32Kbytes是最近使用过的数据MiniCache2Kbytes是重用过一次的数据Writebuffer未规定是写缓冲区Loca

23、lmemory2560bytes/微引擎是本地缓存Scratchpad16Kbytes是进程间通信和同步Inst.Store4Kbytes/微引擎是存放微引擎指令FlashROM未规定否用于启动SRAM64Mbytes否存放表或包头DRAM2Gbytes否存储包程序员需要关注存储器体系中的某些存储器,其余的可以忽略。比如,尽管cache提供了性能改进,但是大多数cache对于程序员是透明的(即程序员不需要分配cache中的空间)。程序员主要关注四种存储器:SRAM、DRAM、本地存储器和Scratchpad,程序员必须明确决定如何使用它们。也就是说,对于每一个数据项,程序员必须选择其中的一种存

24、储器来存放。上表列出了选择存储器的标准之一:最大容量,下表列出了各种存储器的其它特性。存储器类型访问单位相对访问延时特性(字节)Local41用LM_ADDR寄存器访问Scratchpad410通过原子读-修改-写进行同步支持进程间通信push/pullreflectormodeSRAM414遵循QDR规范,原子操作支持队列和环,比特操作DRAM820连接到XScale、微引擎和PCI总线控制器从上表可以看出,每种存储器都有一些特性,使其适合某些任务。比如,尽管本地存储容量很小,但是它提供了最小的访存时间。Scratch和SRAM都提供原子操作,如读-修改-写,因此Scratch和SRAM都可

25、以用来同步并行处理器(如微引擎)。SRAM的访存时间比Scratch长,但比DRAM小;此外,SRAM具有操作队列和环的机制。因此,SRAM适合于存放包头或包链表。最后,由于DRAM有到I/O设备的直接传输路径、容量大并有较高的带宽,DRAM适合于存放输出或输出的包。程序员需要注意的是,存储访问时间可能比指令执行时间长很多。比如,一次DRAM访存需要几十个时钟周期,其中每个时钟周期可以执行一条微引擎指令。因此,在等待从DRAM读取一个数值的时候,微引擎可以执行许多条指令。我们在后面将会讨论访存时间和指令执行时间之间的差异,以及程序员应采取的措施。(8)字和长字访问除了访存时间和存储器特性以外,

26、程序员还必须了解底层物理存储系统是如何组织存储器访问的。每种物理存储器都定义了访问单位的长度,有时称为可寻址数据单位。一个两字节的单位(即16比特)称为一个字,一个四字节的单位(即32比特)称为一个长字(longword),而一个八字节的单位(64比特)称为一个四倍长字(quadword)。为理解长度大于一个字节的可寻址数据单位带来的后果,考虑按长字组织的Scratch存储器。尽管微引擎和XScale处理器可为每一个字节产生地址,但是底层机制并不提供对单个字节的访问。事实上,每次存储器访问读或存四个字节。因此,如果程序员要访问地址为2的字节,则底层存储器硬件会取地址0地址3的存储单元(即第一个

27、长字)。将存储器组织为字或长字意味着程序员必须仔细规划数据的布局。假设程序员定义了两个数据项,每个数据项长16比特,存放在存储器中相邻的位置。如果每个数据项被分配在一个字中,则这两个数据项通过一次存储器访问就可全部读出。如果存放时跨越了字边界,则底层存储器硬件需要访问存储器两次。因此,为获得最佳的性能,程序员必须了解存储器组织,并且要合理安排数据布局以最小化访存时间。某些网络处理器体系结构特征(如底层物理存储系统的组织)对于程序员编写高质量的代码是非常重要的。程序员必须理解竞争、同步和时序这样的问题,因此程序员必须重点理解各功能部件之间的连接、共享的资源以及按照特定顺序发射指令带来的结果。(9

28、)基于IXP2xxx的典型系统结构图14-6是一个基于IXP2xxx的典型的Ingress/Egress系统结构。在该结构中使用了两个IXP2xxx进行包处理,其中IngressIXP2xxx通过MACs或Framers从以太网接收数据包,对所接收的包进行处理后通过交换结构接口芯片将包发送到交换结构;EgressIXP2xxx从交换结构接收包,对包进行处理后发送到以太网。IngressIXP2xxx与外部网络之间的MSF接口配置为SPI或Utopia协议模式,与交换结构之间的MSF接口配置为CSIX协议模式。同理,EgressIXP2xxx与交换结构之间的MSF接口配置为CSIX协议模式,与外

29、部网络之间的MSF接口配置为SPI或Utopia协议模式。Ingress/Egress模式是一种典型的基于IXP2xxx的系统架构模式。在实际应用中,当处理功能较简单时,可以采用单片IXP2xxx的系统架构模式,见图14-7;当处理功能较复杂时,也可以采用多个IXP2xxx串连的系统架构模式。图14-6基于IXP2400的典型系统架构方案图14-7使用一个IXP2800的全双工架构方案第十五章嵌入式RISC处理器(XScale核)前一章概要介绍了IntelIXP2xxx网络处理器的体系结构,这一章讨论称为XScale核的嵌入式RISC处理器。本章将不会给出所有的硬件细节,而是主要关注它的作用以

30、及软件可以使用的设施。嵌入式处理器的用途IntelIXP2xxx中包含一个嵌入式RISC处理器。为理解嵌入式处理器的用途,我们需要考虑一个IXP2xxx是如何在一个网络系统中使用的。在一个只有少量低速接口的网络系统中,一片IXP2xxx能够处理几个接口;而在一个具有高速网络接口的系统中,每个接口必须使用一个IXP2xxx。整个网络系统的结构决定了嵌入式处理器的作用,因为包含多个IXP2xxx芯片的系统通常包括一个通用处理器,用于在多个IXP2xxx间进行控制和协调。图15-1说明了这两种方法。图15-1两种可能的网络系统设计方法在使用一片IXP2xxx芯片处理所有网络接口的设计中,片上RISC

31、处理器执行整个系统的管理任务。在包括一个通用处理器的系统中,与整个系统相关的任务由通用处理器执行,芯片中的嵌入式处理器只处理与芯片相关的任务。因此,嵌入式RISC处理器可以被分配以下一些或全部的任务:自举异常处理高层协议处理交互程序调试(Interactivedebugging)诊断和日志内存分配应用程序(需要的话)用户接口和/或到通用处理器的接口控制包处理器其它管理功能以上大部分任务都不言自明。管理和控制功能包括:启动和停止包处理,创建或修改由包处理引擎使用的数据结构,描述配置细节(如每个网络接口的地址等)。自举包括片上存储器和处理器的初始化。比如,当系统启动时,嵌入式RISC处理器首先引导

32、,然后将微引擎代码装入微引擎的指令存储区,启动微引擎。如果系统包括多个IXP2xxx芯片,通用处理器必须执行整个系统的管理任务,为此通用处理器必须与每个IXP2xxx上的嵌入式RISC处理器通信。比如,通用处理器运行路由协议软件;一旦计算出全局路由表后,通用处理器将信息传递给每个IXP2xxx上的嵌入式处理器;每个嵌入式RISC处理器从GPP接收路由信息,修改本地的转发表。转发表存放在嵌入式处理器和微引擎共享的内存中,嵌入式处理器维护转发表,微引擎使用转发表查找每个数据包的下一跳地址。尽管嵌入式RISC处理器并不用于快路径,但它确实要处理一些数据包。首先,它要处理异常,如不匹配任何分类规则的包

33、或产生出错消息的包(如目的地址不可达的包),因此嵌入式RISC处理器通常要负责产生ICMP错误消息。其次,嵌入式RISC处理器负责处理发给本地系统的包。比如,在一个小型系统中,嵌入式RISC处理器实现高层协议(如TCP);在一个较大的系统中,嵌入式RISC处理器将TCP包转发给通用处理器。XScale架构IXP2xxx上的嵌入式RISC处理器由一个XScale处理器组成,XScale实现了ARM的一个变化版本(实现了ARMV5TE指令集,但不包括浮点指令集)。其主要特性包括:精简指令集计算(RISC)可配置大端/小端模式的的32位算术运算由协处理器提供的矢量浮点运算字节可寻址内存虚拟存储支持内

34、置串口支持内核化操作系统的硬件设施性能监视单元RISC指令集和寄存器遵循RISC模式,XScale指令集包含了相对较少的指令,而且为保证每个时钟周期能够完成一条指令,指令被设计为能够很快执行。因此,XScale不提供执行时间依赖于操作数长度的指令,比如没有串拷贝或串比较等对一个内存块操作的指令。和大多数RISC处理器一样,XScale依赖寄存器来获得高速度。指令执行前操作数必须先取到寄存器中。在一个典型的指令中,处理器从两个寄存器中取操作数,执行一个操作,结果放到第三个寄存器中。如果操作数都准备就绪的话,处理器每个时钟周期能够完成一条指令。性能监视单元能够在不降低处理器运行速度的情况下测量程序

35、的运行性能,监视的内容包括:指令cache不命中率TranslationLookasideBuffer(TLB)不命中率指令流水线中的停顿由软件发起的分支指令数目XScale存储器组织XScale是一个32位处理器,它的寄存器及add、shift、load、store等操作均是32位的。对于算术运算采用大端还是小端的问题,ARM结构采用的方法是不预先确定采用什么模式,而是在处理器引导时进行配置。Intel提供的IXP2xxx引导代码将XScale配置为大端模式。XScale允许运行程序对每个字节寻址。前面我们介绍过,IXP2xxx提供了访问QDR-SRAM和DDR-DRAM的机制,而这两种存储

36、器分别定义了4字节或8字节的数据访问单元。如果底层存储系统使用长字或四倍长字的寻址能力,那么XScale如何提供字节寻址呢?答案在于接口硬件:在处理器和存储器之间使用不同的指令cache和数据cache。当数据cache存/取一个值时,它按照底层存储器的访问单元长度进行存/取;当它与处理器通信时,只传输需要的字节。因此,如果XScale上的一个程序要从DRAM中读入一个字节,数据cache取8个字节单元,取出需要的字节传给处理器。类似地,当程序要将一个字节存入DRAM时,数据cache必须先取出8字节单元,修改要存储的那个字节,然后把整个8字节单元写回DRAM。XScale定义了一个大小为23

37、2字节的线性地址空间,所有的外部存储器及部分片上存储器、PCI总线、其它存储器映射的I/O设备等都被映射到这个空间。图15-2说明外部存储器和硬件设备是如何映射到地址空间的,从高地址到低地址依次是PCI存储器、Scratchpad和CSRs(控制与状态寄存器)、外部SRAM、DRAM和Slowport。从0开始的地址映射到Slowport,这一点非常重要。因为低地址用于引导处理器,将从0开始的地址映射到Slowport意味着XScale用于引导的代码来自FlashROM。图15-2XScale使用的地址空间XScale硬件包括了一个提供虚存的存储管理单元。存储管理单元允许程序运行在一个虚地址空

38、间,硬件将部分虚空间映射到物理地址上。也就是说,系统可以被配置成允许一个运行程序访问部分或全部的物理地址空间。XScale和包处理器是紧密结合在一起的,它们都执行某些包处理任务。共享存储是处理器用来高效交换数据的最重要机制之一,可以用来在XScale和包处理器之间传递数据。比如,包处理器统计包流量,当数据包到来或离开时更新共享内存中的一个计数器,XScale从共享内存中取计数值,根据网络管理的要求计算统计数据。类似地,XScale可以使用共享内存创建和维护包处理器使用的转发表。然而包处理器不使用XScale的地址空间,因此当需要在XScale和微引擎之间传递一个指针时,必须将指针从一个地址空间

39、转换到另一个地址空间。一般由XScale处理所有的地址转换。因此,当XScale创建一个转发表时,它将所有指针转换成微引擎能够理解的地址。类似地,当XScale从一个微引擎接收一个指针时,它将微引擎的本地地址转换成XScale地址空间中的一个等价的值。(5)其它I/O用于I/O设备的控制与状态寄存器(CSR)出现在XScale的物理地址空间,因此,除了使用总线来执行数据访问和传输操作以外,运行在XScale上的设备驱动程序还可以访问设备的CSR。另外,由于XScale可以访问外部PCI总线,因此XScale可以访问和控制PCI总线上的任何一个设备。内部外设单元IXP2xxx中有四种机制只能被X

40、Scale处理器访问,即它们不能被微引擎所访问。这四种机制是:一个UART,四个32位的倒计数定时器,八个通用I/O管脚,一个Slowport接口。这些机制被称为内部外设,因为它们在IXP2xxx的内部,但对于XScale来说是外设。UART硬件提供符合EIARS-232C标准的串行线路,只有XScale能够访问作为控制台设备的串行线。四个倒计数定时器可以被配置为在计数值到达0时中断XScale。其中一个定时器可以用做系统看门狗,当定时器值到达0时,XScale重启动。定时器的计数速率是可配置的:可以运行在XScale的时钟频率、XScale时钟频率的1/16或XScale时钟频率的1/256

41、。只有XScale能够使用这些定时器,这意味着XScale必须处理所有涉及超时的协议处理任务。XScale可以通过MSF接口访问四个通用I/O管脚,这四个管脚提供了一个外部连接,可以连接到了另外的硬件或用于调试。(7)用户模式和内核模式操作和许多处理器一样,XScale提供了多种带有保护级的操作模式。特别是,XScale提供了对内核化操作系统的硬件支持。操作系统内核运行在最高优先级,能够访问整个地址空间和控制所有的I/O。运行在操作系统下的应用程序作为用户级进程执行,应用没有优先级,不能直接控制I/O设备,不能访问整个地址空间。应用程序运行在一个不能被其它应用程序访问的受保护的虚地址空间。内核

42、提供所有的服务,当应用程序需要执行I/O时,必须请求内核执行操作和返回结果。(8)协处理器15Intel芯片包含一个协处理器,它允许XScale配置和控制IXP2xxx上的几个硬件单元。这个协处理器称为系统控制协处理器15(CP15),只能由XScale访问。XScale调用CP15配置MMU、读/写缓冲器、时钟功能和高速缓存。另外,在测试代码时CP15可以用来设置断点。第十六章包处理硬件(微引擎)微引擎的用途在IXP2xxx的处理器体系中,微引擎构成了最低层的可编程处理器,因此使用微引擎执行协议处理比使用较高等级的处理器执行相同的任务获得的吞吐量要高。特别是,微引擎被设计用来执行快路径上的处

43、理。为进一步提高快路径的处理,IXP2xxx包含多个可并行执行的微引擎。尽管允许并行微引擎可以获得比XScale处理器高得多的集合速率,但实际上要获得高速度是很困难的,因为必须将微引擎合理地分配给特定的任务。微引擎被设计来执行ingress和egress协议处理任务。典型地,微引擎要负责:从物理层硬件接收包校验和检查包头处理和分类包缓存查表和转发包头修改校验和计算从物理层硬件发送包后面我们将会看到,微引擎不直接执行操作,而是依靠各种辅助功能单元执行操作。微引擎架构图16-1微引擎内部结构框图微引擎具有以下的一般特性:可编程微控制器采用RISC设计本地控制存储器执行数据通道:一个算术逻辑单元AL

44、U,一个16入口的CAM(每个入口32比特),8个线程和上下文切换的硬件支持;数据通道寄存器:256个通用寄存器,512个传输寄存器,128个NextNeighbor寄存器,640个字的本地内存。一个CRC计算单元可直接访问片上各种功能单元微序列的概念从以上微引擎的特性可以看到,微引擎不是一个传统的CPU,而是一个作为微序列器的低级设备。也就是说,微引擎不包含每一种操作的本地指令,大多数指令只是调用芯片中的其它功能单元。有两个例子可以来解释这个概念。首先,考虑像加或减这样的算术运算。在一个传统的CPU中,每个算术操作被赋以一个唯一的操作码,程序对于每个希望的指令给出操作码。比如,运行在传统CP

45、U上的程序可能包含一条指令:AddR2,R3,说明寄存器3中的整数值应当被加到寄存器2的数值上。然而,微引擎上的算术操作被合并到一个引用ALU单元的操作码中。如为了将两个整数值相加,运行在微引擎上的程序调用alu操作,并声明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上,硬件

46、将一个寻址模式关联到每个操作数,寻址模式说明操作数是常数(立即数)还是对内存中一个值的引用。因此,程序中可能包含如下的指令:LoadR3,X,说明将内存位置X的当前值拷贝到寄存器3。和传统CPU(如XScale)不同的是,微引擎不提供任何引用内存的寻址模式,微引擎也没有一个本地的load指令。程序员必须发射一条指令说明存储器接口、存储器中的地址和一个操作(即取或存)。如sramcmd,xfer,src_op1,src_op2,ref_cnt,opt_tok用于在微引擎和SRAM之间传输数据,其中cmd指明是read还是write;xfer指明使用的传输寄存器;src_op1+src_opt2指

47、明SRAM中的一个位置;ref_cnt指明数据个数(18,以长字为单位);opt_tok是一个可选的令牌,可以用来改变访存的粒度、控制线程同步等。对于一个取操作,微引擎必须等待存储器接口硬件完成操作,然后将数值移到寄存器中被程序使用。由此可见,微引擎不提供算术操作的本地硬件指令,也不提供直接访问内存的寻址模式。运行在微引擎上的程序控制和使用芯片上的功能单元来访问内存和执行操作。微引擎指令集微引擎指令集的操作码不到64个,图16-2和图16-3总结了微引擎的指令集,并列出了每种指令的用途。图16-2一部分微引擎指令图16-3微引擎的另一部分指令分离的存储器地址空间微引擎架构不同于XScale的另

48、一个方面是:微引擎硬件不将存储器或I/O设备映射到一个线性地址空间。和XScale不同,微引擎不将存储器看成是一个无缝的、统一的存储空间,因此,运行在微引擎上的程序必须说明数据传输所涉及的确切的存储器。图16-1和图16-2说明了分离的地址空间是如何影响体系结构的:对于每一类存储器和每一类I/O设备,指令集必须包含一条单独的指令。比如,一条DRAM指令可以访问DRAM中的一个位置,但不能访问SRAM中的位置。类似地,一条SCRATCH指令可以访问Scratchpad存储器,但不能访问SRAM或DRAM。了解存储空间的这种分离对于程序员来说非常重要,这意味着数据项要较早地绑定到特定的存储器。也就

49、是说,在写程序时程序员就必须为每个数据项选择将要放入的存储器。执行流水线我们说XScale和微引擎都使用了RISC架构,而RISC处理器被设计为每个时钟周期执行一条指令。事实上,硬件不能在一个时钟周期内执行一条完整的指令,而是通过使用并行来获得高速度。处理器将一个指令的执行分成若干个阶段,通过同时执行几条指令的不同阶段来重叠多条指条的执行。人们用执行流水线指重叠不同阶段执行的硬件。大多数RISC处理器使用流水线来获得高速度。为理解流水线如何加速处理,想像一个理想化的处理器。每处理一条指令要进行两个操作,首先从存储器中取下一条指令,然后执行这条指令。假定每个时钟周期完成一个操作,显然处理器需要两

50、个时钟周期来处理一条指令。现在考虑增加一个执行流水线,即通过增加两个并行的硬件单元来扩展处理器:一个硬件单元可用来取指令,另一个硬件单元可用来执行指令。如果这两个硬件单元安排得好的话,处理器将能够在执行当前指令的时候取下一条指令。这样,一旦执行完指令N,执行单元就可以开始执行指令N+1。因此,处理器能够在每个时钟执行一条指令,有效地将速率增加了一倍。实际的执行流水线比我们的例子复杂得多。比如,IXP2xxx上的每个微引擎使用一个多级执行流水线,该流水线允许微引擎硬件同时操作在多条指令的不同部分。当硬件在执行某条指令的第k级时,可以同时执行下一条指令的第k-1级。图16-4给出了微引擎上的顺序指

51、令执行示意图。图16-4微引擎上的一个6级执行流水线在微引擎启动后的开始几个时钟周期内没有结果产生,因为第一个指令还没有通过最后一级。然而,一旦第一条指令完成了最后一级,流水线就满了,随后每个时钟周期可以完成一条指令。微引擎硬件如何将指令的执行划分到各个级?图16-5列出了流水线的各个级,并描述了每一级要执行的任务。图16-5微引擎中6个执行阶段高速执行的关键是指令不停地流过流水线-仅当流水线满时才能每个时钟周期完成条指令。不幸的是,图16-4中的理想模式在实际中不会总是出现。比如,考虑下面给出的两条指令:K:ALUoperationtoaddthecontentsofR1toR2K+1:AL

52、UoperationgoaddthecontentsofR2toR3由于两条指令都要引用寄存器R2,这个序列就产生了一个问题。按照图16-4列出的流水线操作中,指令K直到第6级才将结果写入R2,然而指令K+1在第4级就要从寄存器R2中取操作数。由于在指令K写R2之前,指令K+1不能从R2中读数,处理器硬件只能停顿。也就是说,指令K+1的处理等待,直到需要的数据就绪。图16-6说明停顿是如何影响流水线执行的。图16-6执行流水线停顿的例子在图中,指令K和指令K+1使用同一个寄存器。在第四个时钟周期时,指令K+1到达流水线的第3级操作数从寄存器中读出。然而,指令K直到第6级才将数值写入寄存器。因此

53、,指令K+1停在第4级等待操作数。一旦操作数得到了,在第7个时间单元流水线继续处理。从图中可以看到,当流水线的某一级停顿时,执行并没有停止,流水线仍在继续输出,因此在随后的几个时钟周期内延迟并不是很明显。比如,图中停顿发生在时刻5(指令K+1到达第4级),但是输出一直持续到时刻7,停顿导致这时没有指令到达第6级。我们说一个气泡穿过流水线并最终到达最后一级。指令停顿的概念对于像微引擎这种处理快路径的低级处理器来说尤其重要。理解执行流水线对于程序员来说很重要,因为指令间的相互依赖可能导致处理器停顿,造成性能下降。除了指令间的相互依赖可能导致处理器停顿外,条件分支也可能造成处理器停顿。程序很少执行很

54、长的直线代码序列,而是包含了不少的条件流,其要执行的计算依赖于数据。比如,微引擎代码可能使用一个检查和的值来确定是接受还是拒绝一个包。用机器指令的术语来说,测试是用一个条件分支指令来编码的。条件分支也可能导致执行流水线的停顿,因为取指令的硬件无法同时跟踪两条可能的路径。通常情况下,微引擎硬件继续取下一条指令装入流水线中,就好像没有分支一样。如果发生了分支转移,则硬件必须中止流水线中较早的级,然后从分支位置开始处理。了解微引擎硬件“假设不使用分支路径”的特点有助于程序员优化代码。程序员在安排每个测试时,应使得最常发生的情形继续执行而不引起分支转移。(7)执行数据通道微引擎的指令执行单元也称执行数

55、据通道(ExecutionDataPath),可执行移位、加/减、逻辑运算、乘法、字节对齐、某些比特操作等。微引擎要执行的代码存放在微引擎的控制存储器中,指令的源操作数及目标操作数均为微引擎的内部存储单元。执行数据通道采用了指令流水线技术,将指令的执行过程分为5级流水线:取指令、指令译码、取操作数、指令运算、写运算结果。执行数据通道根据程序计数器从控制存储器中取指令,对指令进行译码得到操作数的地址,根据源操作数地址从数据通道寄存器(微引擎内部存储单元,包括通用寄存器、传输寄存器、邻居寄存器和本地存储器)中取操作数,执行指令,将运算结果写到目的地址指定的数据通道寄存器中。由于控制存储器和数据通道

56、寄存器均位于微引擎内部,所以无论是取指令还是取操作数都是在单个时钟周期内完成,所以执行数据通道执行一条指令只需要一个时钟周期。执行数据通道还包括字节对齐和CAM两个重要的功能单元。字节对齐负责从连续的8个字节中取出任意偏移量(0、1、2、3)的连续4个字节;CAM主要用于快速查找。IXP2400的片上CAM具有16个入口,每个入口包含32位查找关键字(入口标签)和4位状态值。程序员可以将CAM看成是一个16行36列的阵列,用CAM_Clear指令清除CAM中的所有比特(即置所有比特为0),用CAM_Write和CAM_Write_State指令将任意值存入CAM中的任何行。当请求一个CAM查找

57、时,程序提供一个32比特的查找关键字,CAM硬件报告一个从0到15的值,指出标签值等于查找关键字的第一个行的索引。如果没有哪一行匹配查找关键字,硬件报告不命中。硬件通过设置一个32比特值中的9个比特来报告CAM查找的结果,结果被放置在比特3至比特11的位置,其余比特置0,见图16-7。CAM查找的指令为:cam_lookupdest_reg,source_reg,用源寄存器中的数值与CAM的16个缓存单元的标签值比较,比较结果放在目的寄存器中。图16-7CAM查找返回的结果每个微引擎中还包括一个CRC单元,用于ATM或以太网等2层数据包的校验和计算。CRC单元不是执行数据通道的一部分,它与执行

58、数据通道并行工作,执行CRC运算。CRC单元支持16比特和32比特的CRC运算。(8)硬件线程和上下文切换尽管处理器执行流水线中的气泡会使处理延迟,但这个延迟是很小的,只有几个时钟周期。其它的延迟可能很大,特别是由于微引擎比外部存储器快很多,一次存储器访问就会使执行延迟许多时钟周期。图16-8列出了IXP2xxx上四种主要的存储器访问所需要的微引擎周期数。图16-8几种主要存储器的访问延迟从图中看到,存储器访问延迟可以达到300个时钟周期。当微引擎全速运行时,每个时钟周期可以完成一条指令,这意味着一次存储器访问的时间就相当于微引擎执行300条指令的时间。即使使用cache,存储器访问也比计算慢

59、得多。我们如何克服由存储器访问引起的延迟呢?微引擎硬件提供一种机制来改善性能,即支持多个执行线程或上下文。每个微引擎有多达8个线程,更重要的是,由于硬件为每一个线程维护不同的状态信息(如一个程序计数器和一组信号事件),硬件可以在线程之间迅速切换而不需要软件的支持。因此,和传统CPU不同,微引擎的上下文切换为零开销或只要求最多一个时钟周期的开销。从概念上说,微引擎线程就像传统操作系统中的线程一样操作,即多个线程同时处于就绪状态,一旦当前线程阻塞或自愿放弃处理器,一个新的线程马上开始运行。尤其是,存储器访问可能导致线程阻塞,当一个线程等待访问内存时,微引擎执行另一个线程。图16-9给出了一个例子。

60、图16-9四个线程的运行例子图中给出了四个线程在同一段时间内的状态,白色表示线程空闲并准备好运行,深蓝色表示线程正在被微引擎执行,浅蓝色表示线程被阻塞。从左边开始,微引擎执行线程1,线程4阻塞,线程2和线程3就绪。在时刻t1,微引擎遇到一个操作导致线程1阻塞。这时发生一个上下文切换,处理器转而执行一个当前就绪的线程线程2。线程2执行到时刻t2时,处理器遇到一个操作导致线程2阻塞。这时只有线程3就绪,于是处理器执行线程3。至时刻t3线程3阻塞,由于这时线程1就绪,微引擎切换到线程1执行。线程的优点是很清楚的,处理器不需要停下来等待存储器访问或I/O,可以继续执行有用的工作。对于数据包处理来说,每

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论