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。