微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 一种TCP/IP卸载引擎架构的应用

一种TCP/IP卸载引擎架构的应用

时间:08-02 来源:互联网 点击:
tcp/ip是一组全世界广泛应用的协议,不仅仅用于internet,许多私有网络也使用tcp/ip作为其协议组,许多硬件设计都是基于tcp/ip或者相关的协议来开发的。传统的tcp/ip处理网络数据传输过程中,要占用大量的主机cpu资源,为了减轻cpu的压力,一种叫toe(tcp/ip offload engine,tcp/ip卸载引擎)的技术应运而生。toe技术对tcp/ip协议栈进行扩展,使部分tcp/ip协议从cpu转移到toe硬件,减轻cpu的负担。

toe技术  

所谓卸载是指将cpu上的计算或处理转移到专门的硬件单元上进行。在目前的以太网环境中,tcp/ip的处理都是通过软件在中心处理器上实现的,导致系统在协议处理、中断处理、数据拷贝方面面临困难。利用toe技术对tcp/ip卸载则简化了数据包的处理,如图1所示,toe将tcp/ip协议从cpu中移到硬件中处理。在主机中安装和toe通信的驱动后,内核和用户的应用都可以直接和toe通信,这样就可以使主机cpu来处理别的工作。toe在接收到网络上的数据后,进行一系列的协议处理,将数据放在指定地址,交给上层应用。发送方向则相反,将需要处理的数据包装后通过硬件缓冲发送出去。toe的处理简化了流程,主机只需要直接处理数据而不用对数据拆包重组,因而对协议处理,中断和数据拷贝都大大减少,降低了主机cpu的负担。  

  
图1 toe技术的原理框图  

toe硬件结构  

● 硬件设计方案  

从器件的实现上,toe实现方案可以采用两种结构:一种是分离元件结构,另外一种是asic芯片。分离元件采用电路板构建,具有修改灵活性,方便升级改进。采用asic芯片实现的方案是将协议处理集成到定制的芯片中,在性能上比分离元件的方式有所提高,但它在可编程性、扩展性和灵活性方面比较差。为了提高灵活性又保证处理速度,可以采用fpga来实现toe。  

在设计中采用了altera公司的FPGA来实现toe,并配合nios ii实现嵌入式处理器的功能。图2为toe的框架结构,它由一个嵌入式cpu、接收部分、发送部分和物理硬件接口构成。在这个结构中,所有的发送模块在一边,接收模块在另一边,是为了能直接访问一个共享的存储器,从而减少数据拷贝。为了支持众多的协议模块访问,通过一条内部总线来连接协议模块和共享存储器。由嵌入式cpu协调模块间的通信,状态管理以及和上层cpu的通信。  

  
图2 toe硬件结构  

当网络上送来一个数据包时,物理接口开始启动,进行简单的包头处理后,发送中断给嵌入式cpu,cpu移动数据到接收缓冲器(buffer),将消息队列置为有效。协议接收模块检测到有数据需要处理,启动协议分析处理。当所有的处理完成后,嵌入式cpu发送一个中断给主cpu,并将数据放入指定的地址。发送过程和接收过程相反,cpu把需要处理的数据放入发送缓冲器,协议模块检测到有消息后开始启动处理。完成后将数据移到物理层的发送缓冲中发送出去。在这个设计中,共享存储器的访问控制和协议模块的设计是难点,下边将详细介绍。  

● 共享存储器的访问  

在fpga中,所有的协议模块将对输入与输出缓冲器有控制权。这里使用总线的方式来访问缓冲器,并加上一个总线仲裁器来处理模块对缓冲器的访问。协议模块在这个总线上作为访问发起者。当某一模块需要访问缓冲器的时候,它需要向总线仲裁发起一个中断,等待其响应。总线仲裁使用轮询的方式来处理每个模块的响应。协议模块获得访问权限后,就可以对缓冲器进行操作了,操作结束后,释放访问权限。使用总线仲裁器轮询的方式只是目前设计的一种方式,在不同的应用中,可能会有更好的方式来处理共享存储器的访问,需要后续的研究进一步验证。  

● 存储器管理  

这里有两种类型的存储器:本地的及共享的存储器。本地存储器驻留在每个模块的内部。这些本地存储器是驻留在这些模块内部的寄存器或者高速缓冲存储器。共享存储器可以被任何模块通过指针来访问。每个模块使用它自己的本地存储器来保存索引和偏移量。这个存储器将保存本模块运行所需要的临时变量。每个模块将控制用来指向被处理的数据包引用的编号。特定模块的编号数量将直接控制模块的行为。  

图3描述了在tcp接收模块中,一个存储器区域使用索引来查找的例子。输入索引和输出索引对于每个模块来说都是有访问控制的权限,索引使得模块之间保持协调。  

  
图3 共享存储器的查找索引  

每次一个数据报离开或者到达一个输入缓冲器,都要先查询存储器管理模块。这个模块使用一个称作空闲队列表的索引来管理输入输出缓冲器中的空闲地址。通过查询这个表,存储器管理模块可以为进入的有效载荷分配空间。当一个数据报离开其中一个缓冲器,那么一个新的值将登记到这个空闲队列表中。这个表是用来管理缓冲器中的空闲地址的。它的结构包含:一个输入或者输出缓冲器的引用;一个缓冲器的识别号;可用空间的大小。丢弃模块以及内存释放模块也间接地与空闲空间表打交道。  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top