第四部分intel网络处理器(编辑修改稿)内容摘要:

到推 /拉总线的连接,传递参数及计算结果。 • 到推 /拉仲裁单元的连接,控制推/拉总线上的传输。 入口队列 译码 Scratchpad存储器  为 IXP2XXX片内存储资源,由 SHaC控制访问。  容量为 16KB,组织成 4K长字。  提供一般的数据读 /写操作,一次可从 Scratch中读 /写 64个字节( 16个长字)的数据,可用作本地数据存储器。  提供两种可由微引擎线程用来进行协调的操作,因而常用于线程间通信:  提供原子操作,用于设置 /清除比特、增量 /减量、加 /减、交换数值等。  提供实现通信环的逻辑,支持环缓冲器的自动管理和操作,可容纳16个环缓冲器,允许在不相邻的一对微引擎之间传递信息(使用pull/push reflector 指令)。 Scratchpad的读 /写过程  以将微引擎中的数据写入 Scratchpad为例:  微引擎将数据写入传输寄存器,将指令 “ scratch [wr, xfer, src_op1, src_op2, ref_t], opt_tok”发送到命令总线。  SHaC单元从命令总线接收命令,控制逻辑检查命令的 Target_ID,若为Scratch则将指令缓存在入口队列中。  控制逻辑对指令进行译码,发送信号通知 Pull总线仲裁器将数据从传输寄存器中读入 pull_fifo中。  当数据读入完成后,将 pull_fifo中的数据写入 Scratchpad。  SHaC单元向微引擎发送信号,告知操作完成。  使用 Pull/Push Reflector在不相邻的微引擎间传输数据:  首先通过 Pull总线从源微引擎中将数据读入 Scratchpad  再通过 Push总线将数据写入目的微引擎。 哈希单元  哈希单元用于执行查表和其它需要乘法或除法的任务。  支持 48比特、 64比特和 128比特哈希操作。  哈希单元有两个输入缓冲器,微引擎可以用一条指令发射1~3个哈希请求, SHaC顺序地将请求传递给哈希单元。  启动哈希操作的过程:  微引擎将 1~3个数据值放在一组连续的 SRAM传输寄存器中,然后将哈希运算指令发送到命令总线。  哈希单元接收命令,利用 Pull总线从微引擎的传输寄存器中读取源操作数,执行哈希运算,然后通过 Push总线将运算结果推送到微引擎的传输寄存器中。  操作结束后,哈希单元向微引擎发送信号。 CAP操作  设备的控制状态寄存器( CSR)被映射到 XScale的地址空间,但其中的一部分 CSR是本地的(并不对应一个外部设备),本地 CSR用于控制微引擎及记录微引擎的状态。  硬件定义了四十多个微引擎 CSR,每个 CSR控制处理的一个方面。  XScale使用本地 CSR将指令装入微引擎并控制微引擎。  每个微引擎只能访问自己的本地 CSR。  SHaC集成了许多 CSR,对这些 CSR的访问是通过 SHaC中的 CAP进行的。  Cap指令用于读 /写 CSR,如:  Cap [read, xfer, csr_addr], opt_tok  Cap [write, xfer, csr_addr], opt_tok  Cap [fast_wr, xfer, csr_addr], opt_tok. 处理器间通信  微引擎与 XScale通信( contexttoXScale):  中断:微引擎可使用 SHaC单元向 XScale发出中断  共享存储器:与 polling机制一起使用  存储器环机制:用于转发数据  线程之间的通信( contexttocontext):  事件信号  Scratchpad或 SRAM环机制:任意线程  邻居寄存器:相邻微引擎上的线程  反射总线机制:任意微引擎上的线程  IXP2xxx之间:  CBUS机制:不同 IXP2xxx上的线程相互通信。 DRAM控制器  DRAM控制器位于主控单元与 DRAM存储设备之间,负责控制、管理主控单元对 DRAM存储设备的访问。  DRAM控制器通过命令总线、 Push总线和 Pull总线与主控单元相连。 DRAM控制器的特点  支持 1个 DRAM通道, 64比特数据宽度, 2GB存储空间。  以 8字节为单位进行读 /写,一条指令可以读 /写连续的8~128个字节,特别适合大数据量传输。  支持 4个 DRAM bank及交织操作:  交织:通过地址映射将连续的存储地址分布到 4个 bank上,一次操作可读 /写相邻的两个 bank中的数据。  地址映射完全由硬件完成,对软件是透明的。  访问 DRAM的指令格式:  dram [cmd, xfer, src_op1, src_op2, ref_t], sig1, sig2 DRAM读指令的执行过程  微引擎发送指令至命令总线, DRAM控制器从命令总线接收指令。  检查指令的 Target_ID,若为 DRAM则将指令缓存在 cmd_fifo队列中。  确定是否需要访问相邻的 2个 bank,若需要则根据指令提供的地址及数据字节数产生在相邻 2个 bank的 bank操作及地址;否则直接使用指令中提供的地址。  将各相应的 DRAM地址装入指定的 bank队列,将 bank队列中的 DRAM地址发送到 FSM管脚上。  FSM管脚检查 bank操作符及 DRAM地址是否符合规范,若符合,驱动相应的地址引脚,将数据从 DRAM存储器中读出。  数据先缓存在 push_fifo中,然后通过 D Push总线将数据推送到 xfer指定的传输寄存器,并给微引擎发送 sig1和 sig2指定的信号。 SRAM控制器  SRAM控制器用于管理和控制主控单元对 SRAM存储设备的访问,以及用于连接符合 QDR规范的协处理器。  以长字为单位访问,一条指令可以读 /写连续 1~16个长字的数据。  SRAM控制器具有复杂的硬件功能结构,支持:  一般的数据读 /写操作  原子操作:设置 /清除比特位,递增 /递减,数据交换  支持对链表、环缓冲器等复杂数据结构的自动操作  SRAM存储设备通常用于存储如发送队列、数据包描述符、缓冲区链表等重要而复杂的数据结构。 链表和环缓冲器  链表和环缓冲器是网络数据处理中非常重要的数据结构,  链表:由位于不连续的存储空间中的若干 buffer组成, buffer的个数不限。 链表主要用作包队列,每个 buffer存放一个包描述符。  环缓冲区:由位于连续存储空间中的若干存储单元组成,创建时即确定了位置和大小。  如果用软件实现以上数据结构,比如将一个数据包放入发送队列:  先从 SRAM中读该发送队列的描述符(队列头指针及尾指针)  修改尾指针使指向新的数据包  将修改后的队列描述符写回 SRAM  软件实现的缺点:  操作复杂  涉及多次 SRAM读写,延迟大,效率低  这些数据结构需要被频繁使用,影响处理速度。 QArray  SRAM控制器集成了称为 QArray的硬件结构来支持上述的数据结构:  每个 SRAM通道有一个 QArray。  每个 QArray有 64个存储单元,每个单元存储一个队列描述符或一个环缓冲器描述符。  QArray支持入队和出队操作。  微引擎只需向 SRAM控制器发送指令,具体的数据读 /写操作由 SRAM控制器完成。 MSF接口  MSF是 IXP2XXX上的一个复杂单元,提供与外部设备进行高速包传输的主要接口。  MSF单元有相互独立的接收和发送接口,每个接口可被配置为处理标准的 MAC接口和交换结构接口。  所有与外部的输入 /输出均通过 MSF中的一组硬件缓冲器(称 BUF)进行, BUF构成了外设与微引擎之间的唯一通道。  BUF按照传输方向分为 RBUF和 TBUF。  每个 BUF包含 8KB,可以被划分为大小为 64字节、 128字节或 256字节的单元。 微引擎可以选择任意一个或一些单元用于一次传输。  较大的包划分成若干 mpacket,每个 mpacket装入一个 BUF单元。 MAC硬件及微引擎软件负责将包划分成 mpacket。 MSF接收单元 MSF数据包接收流程  当某一个线程完成指定的数据包处理任务后,将自己加入到Receive_Thread_Freelist。  当数据包到达 MSF的接收逻辑单元时, MSF为数据包分配合适的 RBUF单元,并将数据包移入。  将该 RBUF单元标识为 Full Element,加入 Full Element List。  控制单元从 Full Element List中取出一个 RBUF单元,从Receive_Thread_Freelist中取出一个空闲线程,创建该单元的接收状态字,送到空闲线程的传输寄存器,然后通知空闲线程处理数据包。  在将 RBUF单元中的内容读入传输寄存器或 DRAM存储器之后,线程将RBUF单元释放。 MSF发送单元 MSF数据包发送流程  线程取出一个空闲的 TBUF单元,分配给要发送的数据包。  线程将数据包从传输寄存器或 DRAM存储器中移入 TBUF单元。 TBUF单元中的数据包由附加数据和净荷数据组成,附加数据一般由线程创建,作为数据包的包头,净荷数据来自于 DRAM存储设备,作为数据包的包体。  线程创建发送控制字。  MSF将 TBUF单元中的数据包按发送控制字指定的方式发送出去。 加密单元  加密单元提供了高速处理数据加 /解密的硬件。  每个 IXP2850包含两个相同的、独立运行的硬件单元,由程序员决定如何使用这两个硬件单元。  每个硬件单元包含了可执行多种加密标准的硬件:  两个 3DES/DES核  一个 AES核,可以使用 12 192或 256比特的密钥  两个用于认证的 SHA1核  支持一些常见的标准,如 ECB和 CBC  所有加密信息(如密钥)包含在两个加密硬件单元中,不会保存在共享存储器中。  从程序员的角度来看,加密单元是用一个 API来访问的。 总结  提高并行处理能力是 IXP2xxx的主要设计考虑:  包含多个微引擎,每个微引擎有自己的专用资源  每个微引擎包含多个硬件线程,每个硬件线程有自己的专用资源  并行操作的功能单元,每个功能单元有自己的命令缓存队列、指令译码和指令逻辑  多条分立的总线,且读 /写总线分开  通用寄存器组分成两个 bank  传输寄存器按总线及方向划分  MSF包含独立的接收和发送接口  DRAM支持多个 bank及交织操作 主要内容  Intel网络处理器概述  XScale核  微引擎  其它功能单元  编程模型  参考设计 网络应用结构  数据面:高速处理和转发数据包,对性能影响最大。  快路径:微引擎,处理绝大部分的数据包。  慢路径: XScale Core,处理例外包。  控制面:处理协议消息,并负责建立、配置和更新由数据面所使用的表及其它数据结构。  管理面:负责系统配置、收集和报告统计信息、根据用户输入或来自其它应用的消息停止或启动应用。 为微引擎和 XScale编码  区分微引擎和 XScale对程序员来说很重要:  为微引擎编写的代码经编译后下载到裸露的硬件上执行,因此程序员必须直接处理硬件的所有方面;  为 XScale编写的代码编译后运行在操作系统下,程序员不需要描写所有的低层操作,必须使用操作系统功能来执行底层任务。  由于访问微引擎的所有 API位于内核地址空间,因此XScale上的代码必须被设计为是可装载内核模。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。