首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用赛灵思 FPGA加速包处理-2

使用赛灵思 FPGA加速包处理-2

如果我们的 FAST 搜索引擎能够与客户数据流的匹配,则会执行指定的任务,如果不能,就执行默认的规则(丢弃或发送至 NPU)。我们允许的基本任务包括:丢弃包、将包直接转发至网络端口、将包转发给异常包处理 NPU 或复制包并依据独立规则转发包。我们的扩展任务包括包塌缩 (Packet collapse)(删除包的一部分)、包扩展/写入(在包中插入一系列字节)、包覆盖 (packet overwrite)(修改一系列字节)及其组合。以包覆盖规则为例,可以是修改MAC 源地址或目的地地址、修改 VLAN 的内或外部标记 (tag),或更改第 4 层报头标记。插入/删除的例子可以是简单到删除现有的 EtherType、插入 MPLS 标签或者 VLAN Q-in-Q 标记,也可以是复杂到需要先插入一个作为 GRE 交付报头的 IP 报头,接着紧随一个 GRE 报头(通用路由协议封装 (GRE) 是一种隧道协议,具体参阅因特网 RFC 1702 号文件)。
FAST 包处理器
FAST 入口包处理器可对所有包进行解码,以确定第 2 层、3 层以及 4 层的内容(若存在)。在完成以太网第 2 层的初步解码之后,可对包进行更进一步的 2 层处理。随后我们继续进行第 3 层,处理 IPv4 或 IPv6 包。假定我们发现这种第 3 层类型的其中之一存在,我们即继续进行第 4 层处理。
在对包进行解码的同时,我们的密钥抽取单元也在定位并存储密钥字段,以生成可供我们 FAST 搜索引擎在日后用于数据流查找的搜索密钥。图 2 是 Type II 以太网 (Ethernet Type II)的 TCP/IP 包格式和待抽取的标准 5 元组密钥,此外还显示了从本例中抽取的结果密钥。
我们还可同时对入口处理器与出口处理器的各类包执行 IP、TCP、UDP 以及 ICMP 校验和计算。两个 Virtex-5 FPGA DSP48E slice 可提供校验和计算以及验证所需的加法器。我们的第一个 DSP 可在 32 位的边界内对数据流进行汇总,而第二个 DSP 则负责在相关层的计算结束时将所得总数折叠成 16 位的校验和。然后我们进行校验和的计算;对于重计算,我们可将传输进入的数据流的校验和字节位置清空,使用存储缓冲器将校验和结果的倒数重新插回。可将第 4 层校验和要求的伪报头字节多路复用到传输进入的数据流中,以用于最终计算。
每个输出端口的 FAST 出口包处理器都可根据规则表(规则存储在内部 BRAM 中)进行包修改和第 3 层至 4 层校验和的重新计算及插入。该 FEPP 超越了传统的包修改“固定功能”方案,从而能够按照指定的修改规则编号对包进行覆盖、插入、删除或者截断操作等修改。我们的数据流修改规则支持可代表操作类型的操作码规范,以 OpLoc 代表启始位置、OpOffset 代表偏移、Insert Size 代表插入的数据大小、Delete Size 代表删除的数据大小,以及是否执行第 3 层和第 4 层校验和计算和插入以及是否进行修改规则链化。
我们的新一代实施方案不仅能够显著提升性能、进一步加强高速缓冲的能力,同时还能添加新功能。通过把我们的 FAST 芯片组升级到单个的赛灵思 Virtex-6 FPGA,我们不仅能够将新一代 FAST 的功能、接口和性能提升到一个前所未有的水平,同时还能缩小板级空间并降低功耗要求,从而实现单芯片深度包处理协处理器单元。
我们能够使用包覆盖特性来简单地对诸如 MAC 目的地地址、MAC 源地址、VLAN 标记甚或是单个 TCP 标志等现有字段进行修改。
如果只需要修改 MAC 目标地址,FEPP 在接受到包时收到的“任务”将会被使用,例如,流修改表(图 3)中的规则 2。对规则 2 预先配置的内容包括:指定操作码(覆盖)、OpLoc(在包中所处的位置,比如第 2 层)、OpOffset(距离启始位置的偏移)、掩码类型(使用什么字节)以及修改数据(实际覆盖的数据)等。执行的结果是使用预先配置的修改数据覆盖从第 2 层位置开始的 6 个字节。
另一种覆盖实例是如规则 6 所示的方案,例如我们希望修改某个特定的 TCP 标志,如 ACK、SYN 或者 FIN(参见图 4)。该规则将使用操作码(覆盖)、OpLoc(第 4 层)、OpOffset(从第 4 层开始 0 偏移)、掩码类型(使用字节 14)和位掩码(字节中的那些位需要掩蔽)。我们可以使用掩码类型来包含或是排除特定的字节,从而指定多个字段实现覆盖。

我们的覆盖功能不仅限于数据流修改规则表中存储的内容,而且还能包括作为关联数据存储在数据流任务表 (Flow Action Table) 中的内容。可以通过指定规则,让传输到 FEPP 的关联数据成为任务的组成部分,从而显著扩展可用于修改的数据的范围。其结果,举例来说,是可以覆盖整个 VLAN 标记范围。
我们的插入/删除功能能够实现甚至更为复杂的包修改。以规则 5(参见图 5)为例,使用我们的插入/删除功能。包括操作码(插入/删除)、OpLoc(第 2 层)、OpOffset(从第 12 个字节开始)、ISize(插入数据大小= 22 个字节)、DSize(删除的字节大小 = 2个字节)和Insert Data(0x8847,MPLS 标签)等与规则5相关的各种任务,将删除现有的 EtherType,并插入新的 EtherType=8847,这说明新的包将是一个 MPLS 单播包,接着是由插入数据所指定的 MPLS 标签组。
布局规划与时序收敛
在设计我们独特的包处理器过程中,我们面临的最严峻挑战是 FPGA 设计复杂程度不断增大,路由和使用密度的增加,各种 IP 核的集成,多种硬逻辑对象的使用(如 BRAM、GTP、DSP 以及类似对象),以及在项目最早期阶段的数据流规划不足等。我们发布的 Phase 1 Virtex-5 FPGA 的bit文件建立在较低的使用密度之上,特别是较低的 BRAM 使用密度基础之上,结果导致相对简单的时序收敛。在稍后阶段因为增加了新的重要功能,导致 BRAM 的利用密度接近 97%,我们开始强烈意识到优化布局规划的重要意义,以及产品生命周期初期的决策将对后期造成怎样的影响。
布局规划的主要目标通过减少路由延迟来改进时序。为此,在设计分析过程中非常重要的事情就是将数据流和管脚配置纳入考虑范围。现在已经与 ISE? Y合一起的赛灵思 PlanAheadTM工具作为布局规划和时序分析的单点工具 (point tool),为我们提供了如何在高利用率的使用设计中为了实现时序收敛而需要穿越重重复杂网络的交互分析和可视化功能。PlanAhead 使我们能深入了解我们的设计,即我们需要提供最少数量的约束条件来引导映射、布置以及布线工具充分满足我们的时序要求。我们发现,要做到这一点,往往需要在基于模块的设计区域约束之外优化放置一部分关键的 BRAM。
回想起来,如果我们在项目最初阶段即花更多的时间使用 PlanAhead 来进行假定方案的验证,帮助我们看到最佳的数据流和管脚,我们在设计后期的任务就会轻松许多。
动态自适应包处理
我们的整数流加速子系统能够在最高的灵活程度下以线速检查并和修改包,同时能够动态地与应用层业务进行交互,实现高度自适应的包处理。Virtex-class FPGA 是重要的实现手段,提供了一个前一代 FPGA 无法实现的片上系统平台,加速基于内容的路由以及实施重要包处理功能。
我们的新一代实施方案不仅能够显著提升性能、进一步加强高速缓冲的能力,同时还能添加新功能。通过在单个赛灵思 Virtex-6 FPGA 中升级我们的 FAST 芯片组,我们不仅能够将新一代 FAST 的功能、接口和性能提升到一个前所未有的水平,同时还能缩小电路板空间并降低功耗要求,从而实现单芯片深度包处理协处理器单元。
返回列表