17.08.2013 Views

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

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

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

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

无线通信精彩应用<br />

使用赛灵思 FPGA <strong>加速包处理</strong><br />

Virtex 器件使可编程 FAST 处理器能够以最少的<br />

CPU 资源占用实现对包的解码、检测及修改功能。<br />

14<br />

赛灵思中国通讯 36 期


作者:Andy Norton<br />

SAIC旗下CloudShield<br />

Technologies 公司 CTO<br />

办公室杰出工程师<br />

ANorton@cloudShield.com<br />

随着10Gb以太网发展趋于成熟,且<br />

业界甚至已开始期待 40GbE 和 100GbE<br />

以太网的出现,新一代网络基础架构方<br />

兴未艾。融合型网络在流量处理方面向<br />

可扩展开放式平台提出了全新的挑战。<br />

新一代融合型基础设施底板通常由高性<br />

能兆位 (TB) 交换结构和可编程内容处理<br />

器构成,能够在复杂性不断增长且层出<br />

不穷的各类应用中处理应用层高达数 10<br />

Gb 的流量。CloudShield 已创建了一系<br />

列全新的可编程包处理器,能够对包进<br />

行检测、分类、修改以及复制,融合与<br />

10GE<br />

10GE<br />

10GE<br />

10GE<br />

Packet<br />

(1)<br />

Per-10GE Ingress Port<br />

Key Registers<br />

[LUT RAM]<br />

FAST Ingress Packet<br />

Processor<br />

Hash Registers<br />

[LUT RAM]<br />

应用层的动态交互。<br />

我 们 的 流 程 加 速 子 系 统 ( FA S T )<br />

采用 <strong>Xilinx</strong> ® Virtex ® -class FPGA 来完<br />

成为 CloudShield 深度包处理与修改<br />

(CloudShield Deep Packet Processing<br />

and Modification) 刀片的包预处理。这<br />

些 FPGA 包含 10Gb 以太网 MAC,并为<br />

每个端口配备了用于分类及密钥提取的<br />

入口处理器 (ingress processor)、用于包<br />

修改的出口处理器 (egress processor)、<br />

使用四倍数据速率 (QDR) SRAM的包队<br />

列、基于赛灵思 Aurora 的消息传输通道<br />

以及基于三态内容可寻址存储器 (TCAM)<br />

的搜索引擎。我们的 FPGA 芯片组能够<br />

以最少的 CPU 参与来完成包的高速缓存<br />

及处理,可实现每秒高达 40Gb 的高性<br />

能处理能力。其采用 2 至 7 层字段查询<br />

PIB<br />

1.0<br />

Packet<br />

Key Message<br />

Packet Queue<br />

[External QDR SRAM]<br />

(2)<br />

FAST Data Queue<br />

Message Key<br />

Message Result<br />

(3) (4)<br />

FAST Search<br />

Engine<br />

(5)<br />

PIB<br />

1.0<br />

PIB<br />

1.0<br />

Packet<br />

Packet<br />

Packet<br />

Search Key<br />

PIB<br />

1.0<br />

Match/No Match<br />

Matched Flow Action<br />

图 1 流加速子系统中的数据流<br />

2010年 夏季刊<br />

无线通信精彩应用<br />

法,能够根据动态可重配置规则在线速<br />

条件下以灵活和可确定的方式进行包修改。<br />

FAST 包处理器的核心功能<br />

我们当前部署的深度包处理刀片采<br />

用两个刀片存取控制器 FPGA 和一个包<br />

交换 FPGA,所有这些都通过 LX110T<br />

Virtex-5 FPGA 来实施。每个刀片存取控<br />

制器都具备使用两个赛灵思10GbE MAC/<br />

PHY 内核实现的数据层连接功能、基于<br />

赛灵思 ChipSync TM 技术的芯片间接口以<br />

及使用赛灵思 IP 核的包处理功能。包交<br />

换 PFGA 使用标准的赛灵思 SPI-4.2 IP<br />

核来实现与我们的网络处理器 (NPU) 及<br />

我们的 IP 核搜索引擎接口相连。<br />

为了将片上系统的设计重点集中在<br />

包处理功能上,我们尽可能使用标准的<br />

Per-10GE Egress Port<br />

Flow Modification Table<br />

[BRAM]<br />

(6)<br />

FAST Egress Packet<br />

Processor<br />

Exception Packet Handler<br />

[External NPU]<br />

Flow Tables<br />

[External TCAM]<br />

Match Index<br />

Flow Action Table<br />

[External QDR SRAM]<br />

Modified Packet<br />

10GE<br />

10GE<br />

10GE<br />

10GE<br />

15


无线通信精彩应用<br />

赛灵思 IP 核。我们选用赛灵思 10Gb<br />

以太网 MAC 内核配合双 GTP 收发器来<br />

实施 4 x 3.125-Gbps 的 XAUI 物理层接<br />

口。针对 NPU 接口,我们使用了带动<br />

态相位对准与 ChipSync 技术且支持每<br />

LVDS 差分对高达 1Gbps 速率的赛灵思<br />

SPI-4 Phase 2 内核。我们主要的包处<br />

理 IP 核如下:<br />

• FAST 包处理器:FPP 的入口包<br />

处理器 (FIPP) 负责第一层包解析、密<br />

钥与数据流 ID 的散列生成以及按端口<br />

进行的第 3 层至第 4 层校验和验证。<br />

FPP 的出口包处理器 (FEPP) 可执行出<br />

口包修改并重新计算第 3 层至第 4 层的<br />

校验和。<br />

• FAST 搜索引擎:我们 FSE 在<br />

TCAM 和 QDR SRAM 中维护着一个流<br />

数据库,可用于决定需要在入口包上执<br />

行的处理任务。该 FSE 可从每个端口<br />

的 FIPP 处接受密钥消息,决定针对该<br />

包需要执行的处理任务,然后将结果消<br />

息返还给原始发出消息的队列。<br />

EXTRACTED KEY (Hex Bytes):<br />

EXTRACTED KEY (Network Notation):<br />

• FAST 数据队列:我们的数据队<br />

16 赛灵思中国通讯 36 期<br />

列 (FDQ) 可在“无序”保持缓冲器中<br />

存储传送进来的包。当入口包被写入到<br />

QDR SRAM 时,该队列将密钥消息从<br />

FIPP 发送至 FAST 搜索引擎。该 FSE<br />

将使用这一密钥来决定如何处理此包,<br />

然后将结果消息返还给 FDQ。根据该结<br />

果消息,队列可对每个缓冲的包进行转<br />

发、复制或丢弃处理。此外,该队列还<br />

可对已转发或已复制的包独立进行包修<br />

改。<br />

C0A80A 14<br />

Source IP Address:<br />

192.168.10.20<br />

Layer 2:<br />

Ethernet II<br />

Header<br />

Layer 3:<br />

Internet<br />

Protocol<br />

Layer 4:<br />

Transmission<br />

Control<br />

Protocol<br />

Dest IP Address:<br />

192.168.10.10<br />

数据流的输入与输出<br />

图 1 显示了流经我们流量加速子<br />

系统的数据流。核心 FPGA 功能以绿色<br />

表示,包数据流为黄色,控制消息为蓝<br />

色,外部器件则为灰色。<br />

Extracted Fields for Key<br />

C0A80 A 0A 10 24 00 50 06<br />

Src Port:<br />

4132<br />

Dst Port:<br />

80 (http)<br />

首先,我们可从 10GbE 网络端口<br />

所接收到的包来识别客户数据流的开<br />

始。每个端口上的包都会进入 FAST 入<br />

口包处理器进行包解析与分析(图中<br />

的 1 号)。在对协议和封包进行分类之<br />

后,FIPP 可定位第 2、3 以及 4 层的报<br />

头偏移量。接下来是数据流散列与密钥<br />

Protocol:<br />

60 (TCP)<br />

图 2 针对 Type II 以太网 TCP/IP 包的 5 元组密钥提取<br />

抽取(数据流选择查找规则,如使用源<br />

IP 地址、目的地 IP 地址、源和目的地<br />

端口和协议的五元组法 (5-tuple))。<br />

此时,我们的队列管理器缓冲器负<br />

责接收包,以释放外部 QDR SRAM 的<br />

存储器页面。在此阶段接收到的包都被<br />

认为是无序的。在等待 FAST 调度的同<br />

时,我们将它们置于外部 QDR SRAM<br />

中。FAST 数据队列(图中的 2 号)分<br />

配包 ID,并向 FAST 搜索引擎(图中的<br />

3 号)分派密钥消息。FAST 搜索引擎<br />

使用该密钥来识别数据流。外部 TCAM<br />

中匹配的数据流条目可在关联的 SRAM<br />

中向数据流任务表 (Flow Action Table)<br />

提供索引。匹配的数据流任务根据客户<br />

配置的应用订阅进行确定。<br />

FAST 搜索引擎向 FDQ(图中的 4<br />

号)发送结果消息进行回复,然后由任<br />

务调度程序根据其指定的任务将包分配<br />

给某个输出队列。然后我们从包队列中<br />

将包解至专用的目的地输出端口(图中<br />

的 5 号),其中我们的 FAST 出口包处<br />

理器(图中的 6 号)可根据指定任务的


要求按数据流修改表 (Flow Modification<br />

Table) 中的规则处理包修改。<br />

如果我们的 FAST 搜索引擎能够与<br />

客户数据流的匹配,则会执行指定的任<br />

务,如果不能,就执行默认的规则(丢<br />

弃或发送至 NPU)。我们允许的基本任<br />

务包括:丢弃包、将包直接转发至网络<br />

端口、将包转发给异常包处理 NPU 或<br />

复制包并依据独立规则转发包。我们的<br />

扩展任务包括包塌缩 (Packet collapse)<br />

( 删 除 包 的 一 部 分 ) 、 包 扩 展 / 写 入<br />

(在包中插入一系列字节)、包覆盖<br />

(packet overwrite)(修改一系列字节)<br />

及其组合。以包覆盖规则为例,可以是<br />

修改MAC 源地址或目的地地址、修改<br />

VLAN 的内或外部标记 (tag),或更改<br />

第 4 层报头标记。插入/删除的例子可以<br />

是简单到删除现有的 EtherType、插入<br />

MPLS 标签或者 VLAN Q-in-Q 标记,也<br />

可以是复杂到需要先插入一个作为 GRE<br />

交付报头的 IP 报头,接着紧随一个<br />

GRE 报头(通用路由协议封装 (GRE)<br />

是一种隧道协议,具体参阅因特网 RFC<br />

1702 号文件)。<br />

FAST 包处理器<br />

FAST 入口包处理器可对所有包进<br />

行解码,以确定第 2 层、3 层以及 4 层<br />

的内容(若存在)。在完成以太网第 2<br />

层的初步解码之后,可对包进行更进一<br />

步的 2 层处理。随后我们继续进行第 3<br />

层,处理 IPv4 或 IPv6 包。假定我们发<br />

现这种第 3 层类型的其中之一存在,我<br />

们即继续进行第 4 层处理。<br />

在对包进行解码的同时,我们的<br />

密钥抽取单元也在定位并存储密钥字<br />

段,以生成可供我们 FAST 搜索引擎在<br />

日后用于数据流查找的搜索密钥。图 2<br />

是 Type II 以太网 (Ethernet Type II)的<br />

TCP/IP 包格式和待抽取的标准 5 元组<br />

密钥,此外还显示了从本例中抽取的结<br />

果密钥。<br />

我们还可同时对入口处理器与出口<br />

处理器的各类包执行 IP、TCP、UDP<br />

以及 ICMP 校验和计算。两个 Virtex-5<br />

FPGA DSP48E slice 可提供校验和计<br />

算以及验证所需的加法器。我们的第一<br />

个 DSP 可在 32 位的边界内对数据流进<br />

行汇总,而第二个 DSP 则负责在相关<br />

层的计算结束时将所得总数折叠成 16<br />

位的校验和。然后我们进行校验和的计<br />

算;对于重计算,我们可将传输进入的<br />

数据流的校验和字节位置清空,使用存<br />

储缓冲器将校验和结果的倒数重新插<br />

回。可将第 4 层校验和要求的伪报头字<br />

节多路复用到传输进入的数据流中,以<br />

用于最终计算。<br />

每个输出端口的 FAST 出口包处<br />

理器都可根据规则表(规则存储在内部<br />

BRAM 中)进行包修改和第 3 层至 4 层<br />

校验和的重新计算及插入。该 FEPP 超<br />

越了传统的包修改“固定功能”方案,<br />

从而能够按照指定的修改规则编号对包<br />

进行覆盖、插入、删除或者截断操作等<br />

修改。我们的数据流修改规则支持可代<br />

表操作类型的操作码规范,以 OpLoc<br />

代表启始位置、OpOffset 代表偏移、<br />

Insert Size 代表插入的数据大小、<br />

Delete Size 代表删除的数据大小,以及<br />

是否执行第 3 层和第 4 层校验和计算和<br />

插入以及是否进行修改规则链化。<br />

我们能够使用包覆盖特性来简单地<br />

对诸如 MAC 目的地地址、MAC 源地<br />

址、VLAN 标记甚或是单个 TCP 标志等<br />

现有字段进行修改。<br />

如果只需要修改 MAC 目标地址,<br />

FEPP 在接受到包时收到的“任务”将<br />

会被使用,例如,流修改表(图 3)中<br />

的规则 2。对规则 2 预先配置的内容<br />

包括:指定操作码(覆盖)、OpLoc<br />

(在包中所处的位置,比如第 2 层)、<br />

OpOffset(距离启始位置的偏移)、掩<br />

码类型(使用什么字节)以及修改数据<br />

(实际覆盖的数据)等。执行的结果是<br />

使用预先配置的修改数据覆盖从第 2 层<br />

位置开始的 6 个字节。<br />

我们的新一代实施方案不仅能够显著提升性能、进一步加强高速缓冲的<br />

能力,同时还能添加新功能。通过把我们的 FAST 芯片组升级到单个<br />

的赛灵思 Virtex-6 FPGA,我们不仅能够将新一代 FAST 的功能、接口<br />

和性能提升到一个前所未有的水平,同时还能缩小板级空间并降低功耗<br />

要求,从而实现单芯片深度包处理协处理器单元。<br />

2010年 夏季刊<br />

无线通信精彩应用<br />

17


无线通信精彩应用<br />

另一种覆盖实例是如规则 6 所<br />

示的方案,例如我们希望修改某个特<br />

定的 TCP 标志,如 ACK、SYN 或者<br />

FIN(参见图 4)。该规则将使用操<br />

作码(覆盖)、OpLoc(第 4 层)、<br />

OpOffset(从第 4 层开始 0 偏移)、掩<br />

码类型(使用字节 14)和位掩码(字节<br />

中的那些位需要掩蔽)。我们可以使用<br />

掩码类型来包含或是排除特定的字节,<br />

从而指定多个字段实现覆盖。<br />

我们的覆盖功能不仅限于数据流修<br />

改规则表中存储的内容,而且还能包括<br />

作为关联数据存储在数据流任务表 (Flow<br />

Action Table) 中的内容。可以通过指定规<br />

则,让传输到 FEPP 的关联数据成为任<br />

务的组成部分,从而显著扩展可用于修<br />

改的数据的范围。其结果,举例来说,<br />

是可以覆盖整个 VLAN 标记范围。<br />

我们的插入/删除功能能够实现甚<br />

至更为复杂的包修改。以规则 5(参见<br />

图 5)为例,使用我们的插入/删除功<br />

能。包括操作码(插入/删除)、OpLoc<br />

(第 2 层)、OpOffset(从第 12 个字<br />

节开始)、ISize(插入数据大小= 22<br />

个字节)、DSize(删除的字节大小 =<br />

2个字节)和Insert Data(0x8847,<br />

MPLS 标签)等与规则5相关的各种任<br />

务,将删除现有的 EtherType,并插入<br />

新的 EtherType=8847,这说明新的包<br />

18 赛灵思中国通讯 36 期<br />

将是一个 MPLS 单播包,接着是由插入<br />

数据所指定的 MPLS 标签组。<br />

布局规划与时序收敛<br />

Rule 2 MAC DA MAC SA EtherType MAC DA MAC SA L3 L3 Header Payload<br />

EtherType<br />

图 3 简单 MAC 目的地地址覆盖修改<br />

Rule 62 MAC DA MAC SA EtherType MAC DA MAC SA L3 L3 Header L4 Header Payload<br />

0 x 0800<br />

图 4 TCP 标志的覆盖修改<br />

MPLS<br />

0 x 8847<br />

Label<br />

MPLS<br />

Label<br />

在设计我们独特的包处理器过程<br />

中,我们面临的最严峻挑战是 FPGA 设<br />

计复杂程度不断增大,路由和使用密度的<br />

增加,各种 IP 核的集成,多种硬逻辑对<br />

象的使用(如 BRAM、GTP、DSP 以及<br />

类似对象),以及在项目最早期阶段的<br />

数据流规划不足等。我们发布的 Phase 1<br />

Virtex-5 FPGA 的bit文件建立在较低的使<br />

用密度之上,特别是较低的 BRAM 使用<br />

密度基础之上,结果导致相对简单的时序<br />

收敛。在稍后阶段因为增加了新的重要功<br />

能,导致 BRAM 的利用密度接近 97%,<br />

MPLS<br />

Label<br />

MPLS<br />

Label<br />

Rule 52 MAC DA MAC SA EtherType MAC DA MAC SA<br />

L3 Header Payload<br />

图 5 MPLS 标签插入修改<br />

MPLS<br />

Label<br />

我们开始强烈意识到优化布局规划的重要<br />

意义,以及产品生命周期初期的决策将对<br />

后期造成怎样的影响。<br />

L3 Header Payload<br />

布局规划的主要目标通过减少路<br />

由延迟来改进时序。为此,在设计分析<br />

过程中非常重要的事情就是将数据流和<br />

管脚配置纳入考虑范围。现在已经与<br />

ISE ® 结合一起的赛灵思 PlanAhead TM 工<br />

具作为布局规划和时序分析的单点工具<br />

(point tool),为我们提供了如何在高利<br />

用率的使用设计中为了实现时序收敛而<br />

需要穿越重重复杂网络的交互分析和可<br />

视化功能。PlanAhead 使我们能深入了<br />

解我们的设计,即我们需要提供最少数<br />

量的约束条件来引导映射、布置以及布<br />

线工具充分满足我们的时序要求。我们<br />

发现,要做到这一点,往往需要在基于<br />

模块的设计区域约束之外优化放置一部<br />

分关键的 BRAM。<br />

回想起来,如果我们在项目最初阶<br />

段即花更多的时间使用 PlanAhead 来进<br />

行假定方案的验证,帮助我们看到最佳<br />

的数据流和管脚,我们在设计后期的任<br />

务就会轻松许多。<br />

动态自适应包处理<br />

我们的整数流加速子系统能够在<br />

最高的灵活程度下以线速检查并和修<br />

改包,同时能够动态地与应用层业务<br />

进行交互,实现高度自适应的包处理。<br />

Virtex-class FPGA 是重要的实现手段,<br />

提供了一个前一代 FPGA 无法实现的片<br />

上系统平台,加速基于内容的路由以及<br />

实施重要包处理功能。<br />

我们的新一代实施方案不仅能够显<br />

著提升性能、进一步加强高速缓冲的能<br />

力,同时还能添加新功能。通过在单个<br />

赛灵思 Virtex-6 FPGA 中升级我们的<br />

FAST 芯片组,我们不仅能够将新一代<br />

FAST 的功能、接口和性能提升到一个<br />

前所未有的水平,同时还能缩小电路板<br />

空间并降低功耗要求,从而实现单芯片<br />

深度包处理协处理器单元。<br />

鸣谢<br />

没有精良的团队配合,像我们这种复杂<br />

先进的 FPGA 设计就等于纸上谈兵。<br />

在此我要感谢我们这一精锐 FPGA 团<br />

队的几位成员:FPGA 小组负责人兼<br />

搜索引擎设计负责人 Creg Triplett;<br />

数据队列设计负责人 Scott Stovall;<br />

包处理设计负责人 Scott Follmer;<br />

验证小组负责人 Steve Barrett 以及<br />

系统 Verilog 专家和验证工程师 Isaac<br />

Mendoza。

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!