1.26k likes | 1.5k Views
第四部分 Intel 网络处理器. 主要内容. Intel 网络处理器概述 XScale 核 微引擎 其它功能单元 编程模型 参考设计. Internet eXchange Architecture (IXA). IXA :泛指 Intel 网络处理器架构以及相关的支持芯片,包括网络处理器硬件及软件体系结构。 IXA 包括控制面和数据面处理,定义了硬件抽象、应用编程接口和互连机制,但没有给出细节。 IXA 的三个重要组成部分: 微引擎( Microengine , ME ): Intel 网络处理器的核心部件,在其它功能单元的支持下执行快路径上的操作。
E N D
主要内容 • Intel网络处理器概述 • XScale核 • 微引擎 • 其它功能单元 • 编程模型 • 参考设计
Internet eXchange Architecture (IXA) • IXA:泛指Intel网络处理器架构以及相关的支持芯片,包括网络处理器硬件及软件体系结构。 • IXA包括控制面和数据面处理,定义了硬件抽象、应用编程接口和互连机制,但没有给出细节。 • IXA的三个重要组成部分: • 微引擎(Microengine,ME):Intel网络处理器的核心部件,在其它功能单元的支持下执行快路径上的操作。 • XScale Core:Intel网络处理器的高层控制和管理单元,负责控制面及异常包处理,运行嵌入式实时操作系统。 • IXA可移植框架:为基于Intel网络处理器的软件开发提供应用编程接口和硬件抽象。
IXA的特性 • 灵活性: • 微引擎完全可编程,在低层硬件设备的支持下可实现许多复杂的网络处理功能,具有较好的功能灵活性。 • 高性能(高可扩放性): • 使用多个可并行操作的微引擎,通过增加微引擎的数目、提高微引擎及XScale核的时钟频率、采用各种减小访存延迟的技术及增加专用的硬件功能单元,可支持高达OC-192的高端处理速度。 • 可移植性: • IXA可移植框架提供了应用编程接口和硬件抽象,使得基于该框架开发的软件与底层硬件实现松耦合,具有良好的可移植性和重用性。
Internet eXchange Processor (IXP) • IXP:指实现了IXA架构的网络处理器芯片。 • IXP典型地包括: • 一个XScale核 • 多个微引擎 • 片上存储单元 • 若干硬件功能单元 • 与各种外部连接的接口 • 内部总线
第二代IXP网络处理器 • IXP2400:8个微引擎,主要面向网络接入和边缘网应用,可用于WAN多服务交换、DSLAM、基站控制器和网关、4~7层交换、VoIP网关、多服务接入平台等。 • IXP2800:16个微引擎,主要面向边缘网和核心网应用,可用于骨干网的路由与交换、无线设备、10Gbps的企业交换和路由等。 • IXP2850:在IXP2800的基础上增加了加密单元,可达到10Gb/s的加解密速度,用于IPSec、VPN、QoS Router等场合。 • IXP2xxx:泛指任何一种第二代IXP网络处理器芯片。
IXP2xxx的主要部件 • 一个IXP网络处理器是一块独立的芯片,包含一组复杂的可编程及不可编程的处理器和功能单元: • 一个嵌入式RISC处理器(XScale Core) • 8到16个可编程包处理器(微引擎) • 多条独立的片上总线:提供芯片内部各功能单元之间的高速通道 • 处理器同步机制 • 共享和不共享的片上存储器 • 一个低速串行接口:连接到XScale Core,用于控制和管理 • 多个外部存储器接口:连接外部SRAM、DRAM及ROM等 • 多个外部I/O总线接口 • 计算哈希和加密的协处理器 • 其它功能单元
IXP的外部连接 • 串行接口:连接到XScale Core,用于控制和管理。 • PCI总线接口:连接I/O设备及传统CPU。 • MSF接口:连接外部物理层设备及交换结构,是数据出入IXP的窗口。 • DRAM总线接口:提供1条或多条DRAM总线。 • SRAM总线接口:提供多条SRAM总线。 • 慢端口连接:访问ROM/FlashROM等外部硬件单元。
IXP2xxx的内部组件 数量 组件 目的 1 嵌入式RISC处理器 控制、高层协议和例外处理 8/16 包处理引擎 I/O、基本包处理和包转发 1+ SRAM访问单元 协调对外部SRAM总线的访问 1+ DRAM访问单元 协调对外部DRAM总线的访问 1 MSF访问单元 协调对外部I/O设备的访问 1 PCI总线访问单元 协调对外部PCI总线的访问 1 SHaC单元 存储中间结果、计算哈希值等 1 加密单元 加/解密操作 1 系统底盘(chassis) 提供内部控制及数据传输通道
IXP2400硬件结构框图 硬件体系结构:多主控 + 系统底盘 + 多目标
IXP2400硬件结构特征 • 采用了多主控+系统底盘+多目标的分布式硬件体系结构,增强了IXP2400的并行处理能力。 • 具体而言, • 采用分立的内部总线结构,将不同存储单元的数据总线、数据读/写总线分开,可以同时对不同存储单元进行双向读/写操作。 • 引入命令总线仲裁器对各主控单元发出的命令进行排队判优,保证指令的优先级,避免指令的冲突和拥塞。 • 采用分布式的硬件结构(即多主控+多目标),不同的硬件功能单元各司其职,负责专门的数据处理,可以并行操作。 • 采用多微引擎并行的硬件结构,所有微引擎可同时工作;而且微引擎被进一步分成两个簇,每个簇使用独立的SRAM数据总线,有效地缓解了总线冲突。
IXP2xxx的处理器体系 处理器类型 是否在芯片上? 是否可编程? 通用处理器 否 是 嵌入式RISC处理器 是 是 I/O处理器 是 是 协处理器 是 否 物理接口硬件 否 否 • 通用处理器(GPP):不是IXP2xxx的一部分,用于执行整体控制和管理功能。 • 物理接口硬件:不是IXP2xxx的一部分,Intel提供专门的芯片实现第一层和第二层的处理。
IXP2xxx处理器体系(续) • 嵌入式RISC处理器(XScale Core):不是快路径的一部分,用于管理微引擎、提供一个可以下载程序和配置芯片的接口、处理高层协议及例外的包,运行常规嵌入式操作系统。 • I/O处理器(MicroEngine):只提供少量基本指令的低级设备,不运行操作系统,用于处理I/O设备与存储器之间的低层数据传输及基本包处理,是快路径处理的基础。 • 协处理器和功能单元:有一些构成了快路径的一部分,如SHaC单元、加/解密单元等。
IXP2xxx使用的存储器 存储器类型 最大容量 是否在 典型用途 芯片上? GP Registers 256×4bytes 是 中间运算 Inst. Cache 32Kbytes 是 最近使用过的指令 Data Cache 32Kbytes 是 最近使用过的数据 Mini Cache 2Kbytes 是 重用过一次的数据 Write buffer 未指定 是 写缓冲区 Local memory 2560bytes/微引擎 是 本地缓存 Scratchpad 16Kbytes 是 进程间通信和同步 Inst. Store 4Kbytes/微引擎 是 存放微引擎指令 FlashROM 未指定 否 用于启动 SRAM 64Mbytes/通道 否 存放表或包头 DRAM 2Gbytes/通道 否 存储包
四种主要存储器的特性 类型 访问单位 相对访问 特性 (字节) 延时 Local 4 1 用LM_ADDR寄存器访问 Scratchpad 4 10 支持原子操作、进程间通信、微引擎之间的 通信 SRAM 4 150 支持原子操作、队列和环、比特操作 DRAM 8 300 连接到XScale、微引擎和PCI总线控制器 • LM:提供最小的访存时间 • Scratchpad和SRAM:支持原子操作,可用来同步并行处理器 • SRAM:支持队列和环,适合于存放包头或包链表 • DRAM:有对I/O设备的直接传输路径,容量大,带宽高,适合存放包。
数据访问单位 • 每种物理存储器都定义了访问单位的长度(也称可寻址数据单位): • 字(word):2字节的单位(16比特) • 长字(longword):4字节的单位(32比特) • 四倍长字(Quadword):8字节的单位(64比特) • 尽管微引擎和XScale可以为每个字节产生地址,但是底层机制总是一次读/写一个访问单位长度的数据。 • 程序员必须了解存储器的组织,仔细规划数据的布局以最小化访存时间。
主要内容 • Intel网络处理器概述 • XScale核 • 微引擎 • 其它功能单元 • 编程模型 • 参考设计
IXP2xxx在网络系统中的使用方法 两种可能的网络系统设计方法
嵌入式处理器的作用 • 嵌入式RISC处理器可以被分配以下一些或全部的任务: • 自举:包括片上存储器和处理器的初始化 • 控制微引擎:如启动/停止包处理 • 内存分配 • 诊断和日志 • 交互程序调试(Interactive debugging) • 用户接口和/或到通用处理器的接口 • 其它管理功能:如创建/修改微引擎使用的数据结构,维护本地转发表,描述配置细节(如每个网络接口的地址)等。 • 异常处理:不匹配任何分类规则的包,产生出错消息的包 • 高层协议处理:负责处理发给本地系统的包(如TCP) • 应用程序(需要的话)
XScale的主要特性 • 精简指令集计算(RISC): • 包含较少的指令,指令被设计为能够很快执行,依靠寄存器获得高速度,保证每个时钟周期能够完成一条指令。 • 可配置大端/小端模式的的32位算术运算: • 处理器引导时配置端模式。 • 由协处理器提供的矢量浮点运算 • 字节可寻址内存: • 接口硬件按照底层存储器的访问单元长度存取,当与处理器通信时只传输需要的字节。
XScale使用的地址空间 • 虚拟存储支持: • 所有的外部存储器及部分片上存储器、PCI总线、其它存储器映射的I/O设备均被映射到一个大小为232字节的线性地址空间,XScale硬件包括一个提供虚存的存储管理单元。 • 有一些存储器是XScale和微引擎共享的,如Scratchpad、SRAM、DRAM,可以用来在XScale和微引擎之间传递数据。 • 微引擎不使用XScale的地址空间,XScale必须处理所有的地址转换。 • 其它I/O: • XScale可以访问设备的CSR,可以访问和控制PCI总线上的任何一个设备
XScale的主要特性(续) • 内部外设单元(只能由XScale使用): • 作为控制台设备的串口 • 四个32位倒计数定时器:这意味着XScale必须处理所有涉及超时的协议处理任务。 • 四个通用I/O管脚:通过MSF访问,连接到另外的硬件或用于调试 • Slowport接口:用于系统引导 • 支持内核化操作系统的硬件设施 • 系统控制协处理器15: • 只能由XScale使用,用于配置和控制IXP2xxx上的几个硬件单元,如MMU、读/写缓冲器、时钟、高速缓存等。 • 性能监视单元: • 监视指令cache不命中率、TLB不命中率、指令流水线中的停顿、软件引起的分支指令数目。
主要内容 • Intel网络处理器概述 • XScale核 • 微引擎 • 其它功能单元 • 编程模型 • 参考设计
微引擎的用途 • 在IXP2xxx的处理器体系中,微引擎构成了最低层的可编程处理器。 • 微引擎被设计用来执行快路径上的处理,包括Ingress和Egress协议处理任务: • 从物理层硬件接收包 • 检查校验和 • 包头处理和分类 • 包缓存 • 查表和转发 • 包头修改 • 校验和计算 • 从物理层硬件发送包
微引擎架构的特点 • 一种可编程微控制器(微引擎不是一个传统的CPU) • 采用RISC设计 • 本地的控制存储器:微引擎的指令存储器 • 执行数据通路(Execution Datapath):微引擎的指令执行单元 • 一个算术逻辑单元ALU • 一个16入口的CAM,每个入口32比特 • 8个线程和上下文切换的硬件支持 • 数据通道寄存器 • 256个通用寄存器 • 512个传输寄存器 • 128个Next Neighbor寄存器 • 640个字的本地内存 • 一个CRC计算单元 • 可直接访问片上各种功能单元
微序列控制器 • 微引擎不是一个传统的CPU,而是一个可编程微控制器。 • 微引擎不包含每一种操作的本地指令,运行在微引擎上的程序控制和使用芯片上的功能单元来完成指令。 • 例1:算术运算 • 传统CPU上的指令:add R2, R3 • 微引擎上的指令:alu [dest, A_op, alu_op, B_op] • alu_op包括12种运算符(+、+16、+8、+carry、B-A、B、~B、AND、~AND、AND~、OR、XOR) • 例2:内存引用 • 传统CPU上的指令:load R3, X • 微引擎上的指令: sram [cmd, xfer, src_op1, src_op2, ref_cnt], opt_tok
微引擎指令集 • 微引擎指令集的操作码不到64个,分为以下四类: • 通用指令:算术,循环,移位 • 分支和跳转指令:某一位置位/清零跳转,字节相等/不等跳转,根据事件状态跳转,… • CAM指令:查找,清除入口,读标签/状态,写标签/状态 • I/O和线程交换指令:读/写DRAM,读/写SRAM,读/写队列描述符(SRAM),入队/出队,存储器环操作,访问Scratchpad,……
分离的存储器地址空间 • 微引擎硬件不将存储器或I/O设备映射到一个线性地址空间,程序必须说明数据传输所涉及的存储器,因此每一类存储器和每一类I/O设备都有专门的指令。 • 例如: • sram [cmd, xfer, src_op1, src_op2, ref_cnt], opt_tok • dram [cmd, xfer, src_op1, src_op2, ref_cnt], sig1, sig2 • scratch [cmd, xfer, src_op1, src_op2, ref_cnt], opt_tok • 程序员必须为每个数据项选择将要放入的存储器。
执行流水线 • RISC架构:RISC处理器将一个指令的执行分成若干个阶段,通过同时执行几条指令的不同阶段来重叠多条指令的执行。 • 执行流水线:重叠不同阶段执行的硬件。
执行流水线停顿 • 指令间的相互依赖可能导致执行流水线停顿,如: K: alu [R2, R2,+,R1] K+1: alu [R3, R3,+,R2] • 条件分支也可能造成执行流水线停顿。通常情况下,微引擎硬件继续取下一条指令装入流水线,就好像没有分支一样。
微引擎的执行数据通道 • 微引擎的指令执行单元也称执行数据通道(Execution Data Path),可执行移位、加/减、逻辑运算、乘法、字节对齐、比特操作、CAM查找等。 • 微引擎要执行的代码存放在本地的控制存储器中,源/目标操作数均为微引擎内部的存储单元(称数据通道寄存器)。 • 执行数据通道采用5级流水线结构:取指令、指令译码、取操作数、指令运算、写运算结果。 • 控制存储器和数据通道寄存器均位于微引擎内部,取指令或取操作数都在单个时钟周期内完成,所以执行数据通道执行一条指令只需要一个时钟周期。
微引擎的执行数据通道(续) • 字节对齐:从连续的8个字节中取出任意偏移量(0~3)的连续4个字节。 • CAM用于快速查找: • 16个入口 • 每个入口包括32位标签(查找关键字)和4位状态 • 可以写CAM中的任意一行,可以分别写标签和状态 • 程序提供一个32比特的查找关键字,CAM硬件报告查找结果(0~15的值):cam_lookup[dest_reg, src_reg],其中src_reg为查找关键字,结果放在dest_reg中。
CRC单元 • CRC单元不是执行数据通道的一部分,它与执行数据通道并行工作。 • 支持16比特和32比特的CRC运算。 • 用于计算ATM或以太网等2层数据包的校验和。
存储器访问延迟和多线程 • 存储器访问对系统性能影响很大,一次外部存储器访问相当于微引擎执行上百条指令。 • 隐藏存储器访问延迟的最好方法是使用多线程。 6? 6?
硬件线程和上下文切换 • 每个微引擎支持8个执行线程 • 硬件为每个线程维护不同的状态信息(如一个程序计数器,一组信号事件) • 硬件可以在线程之间迅速切换而不需要软件的支持,上下文切换为零开销或最多一个时钟周期的开销 • 概念上,微引擎线程就像传统操作系统中的线程一样操作。
线程状态转移 • 未激活状态:不执行任何操作。 • 执行状态:正在执行控制存储器中的程序,同一时刻最多只有一个上下文处于该状态。 • 就绪状态:具备了继续执行数据处理任务的所有外部条件,等待获得微引擎的控制权。 • 休眠状态:等待某个外部事件的到来。 • 上下文切换由软件控制,处于执行状态的线程执行一条线程交换指令后转入休眠状态,微引擎对当前处于就绪状态的所有上下文进行仲裁判优,将控制权交给优先级最高的上下文。
事件信号 • IXP2xxx使用称为事件信号的软件机制同步微引擎的内部操作和外部事件的完成。 • 可以在指令中指定事件信号,令从属单元在完成指令规定的操作后向微引擎发送该事件信号,如: • sram [cmd, xfer, src_op1, src_op2, ref_cnt], opt_tok • dram [cmd, xfer, src_op1, src_op2, ref_cnt], sig1, sig2 • 每个线程可以使用15个事件信号,这些信号将线程从休眠状态唤醒。 • 每个线程有两个本地寄存器,分别记录需要等待的事件信号和已经到来的事件信号。 • 在线程交换指令中,可以使用AND、OR等逻辑运算符指令线程需要等待的多个事件信号。
指令存储器(控制存储器) • IXP2xxx使用单独的存储器系统(即不使用SRAM和DRAM)存储微引擎指令。 • 指令存储器的组织方式: • 共享指令存储器:代码共享,节省空间,但有竞争。 • 专用指令存储器:无竞争,要求较多空间。 • IXP2xxx提供折衷方案: • 每个微引擎使用一个私有的指令存储器,避免竞争。 • 每个指令存储器的容量限制为4096条指令,避免使用较多的空间。 • 控制存储器属于微引擎的内部存储资源,因而可单周期地读取其中的程序指令。 • 控制存储器中的程序从IXP2xxx的ROM中读入,在XScale控制下完成。
数据通道寄存器 • 微引擎需要与许多硬件设备交互,许多交互是通过硬件寄存器发生的。 • 微引擎使用的数据通道寄存器包括: • 通用寄存器 • 传输寄存器 • 邻居寄存器 • 本地存储器
通用寄存器(GPR) • 每个微引擎有256个通用寄存器,每个为32比特,一般用作指令的源和目的寄存器。 • 通用寄存器的两种使用方法: • 8个线程共享整个寄存器组:需要处理互斥。 • 每个线程分配32个专用的寄存器:不需要互斥。 • 寄存器寻址方式: • 绝对寻址:唯一指定一个寄存器。 • 相对寻址:指定当前上下文的一个寄存器。 • 通用寄存器分为两个bank,绝对和相对寄存器地址都必须指明bank及bank中的一个寄存器。 • 指令的两个源操作数分别来自A Bank 和 B Bank。
传输寄存器 • 微引擎使用传输寄存器缓存与外部设备交换的数据,以协调微引擎与外部设备之间的速度差异。 • 每个微引擎有512个传输寄存器,按外部总线和传输方向分为四类: • D Xfer in reg及D Xfer out reg:用作微引擎与DRAM控制器的数据交换窗口。 • S Xfer in reg及S Xfer out reg:用作微引擎与SRAM控制器、MSF及SHaC之间的数据交换窗口。 • 传输寄存器可以使用绝对地址或相对地址进行编址。
邻居寄存器与软件流水线 • 微引擎硬件被设计为支持软件流水线模型,软件流水线可以包含来自多个微引擎的模块。 • 邻居寄存器用来在相邻的两个微引擎之间传递数据。 • 每个微引擎含有128个邻居寄存器,可以被8个线程共享,也可均分为8份。 • 邻居寄存器可由上一个邻居微引擎写入数据,也可由自身微引擎写入数据。 • 邻居机制只用来传递少量的数据,如数据项的地址。 • 邻居寄存器机制类似于一个环缓冲器,微引擎硬件包含了协调发送者与接收者的原语。