使用賽靈思 FPGA加速包處理
如果我們的 FAST 搜索引擎能夠與客戶數(shù)據(jù)流的匹配,則會執(zhí)行指定的任務(wù),如果不能,就執(zhí)行默認的規(guī)則(丟棄或發(fā)送至 NPU)。我們允許的基本任務(wù)包括:丟棄包、將包直接轉(zhuǎn)發(fā)至網(wǎng)絡(luò)端口、將包轉(zhuǎn)發(fā)給異常包處理 NPU 或復(fù)制包并依據(jù)獨立規(guī)則轉(zhuǎn)發(fā)包。我們的擴展任務(wù)包括包塌縮 (Packet collapse)(刪除包的一部分)、包擴展/寫入(在包中插入一系列字節(jié))、包覆蓋 (packet overwrite)(修改一系列字節(jié))及其組合。以包覆蓋規(guī)則為例,可以是修改MAC 源地址或目的地地址、修改 VLAN 的內(nèi)或外部標記 (tag),或更改第 4 層報頭標記。插入/刪除的例子可以是簡單到刪除現(xiàn)有的 EtherType、插入 MPLS 標簽或者 VLAN Q-in-Q 標記,也可以是復(fù)雜到需要先插入一個作為 GRE 交付報頭的 IP 報頭,接著緊隨一個 GRE 報頭(通用路由協(xié)議封裝 (GRE) 是一種隧道協(xié)議,具體參閱因特網(wǎng) RFC 1702 號文件)。
圖 1 – 流加速子系統(tǒng)中的數(shù)據(jù)流
圖 2 – 針對 Type II 以太網(wǎng) TCP/IP 包的 5 元組密鑰提取
FAST 包處理器
FAST 入口包處理器可對所有包進行解碼,以確定第 2 層、3 層以及 4 層的內(nèi)容(若存在)。在完成以太網(wǎng)第 2 層的初步解碼之后,可對包進行更進一步的 2 層處理。隨后我們繼續(xù)進行第 3 層,處理 IPv4 或 IPv6 包。假定我們發(fā)現(xiàn)這種第 3 層類型的其中之一存在,我們即繼續(xù)進行第 4 層處理。
在對包進行解碼的同時,我們的密鑰抽取單元也在定位并存儲密鑰字段,以生成可供我們 FAST 搜索引擎在日后用于數(shù)據(jù)流查找的搜索密鑰。圖 2 是 Type II 以太網(wǎng) (Ethernet Type II)的 TCP/IP 包格式和待抽取的標準 5 元組密鑰,此外還顯示了從本例中抽取的結(jié)果密鑰。
我們還可同時對入口處理器與出口處理器的各類包執(zhí)行 IP、TCP、UDP 以及 ICMP 校驗和計算。兩個 Virtex-5 FPGA DSP48E slice 可提供校驗和計算以及驗證所需的加法器。我們的第一個 DSP 可在 32 位的邊界內(nèi)對數(shù)據(jù)流進行匯總,而第二個 DSP 則負責在相關(guān)層的計算結(jié)束時將所得總數(shù)折疊成 16 位的校驗和。然后我們進行校驗和的計算;對于重計算,我們可將傳輸進入的數(shù)據(jù)流的校驗和字節(jié)位置清空,使用存儲緩沖器將校驗和結(jié)果的倒數(shù)重新插回??蓪⒌?4 層校驗和要求的偽報頭字節(jié)多路復(fù)用到傳輸進入的數(shù)據(jù)流中,以用于最終計算。
每個輸出端口的 FAST 出口包處理器都可根據(jù)規(guī)則表(規(guī)則存儲在內(nèi)部 BRAM 中)進行包修改和第 3 層至 4 層校驗和的重新計算及插入。該 FEPP 超越了傳統(tǒng)的包修改“固定功能”方案,從而能夠按照指定的修改規(guī)則編號對包進行覆蓋、插入、刪除或者截斷操作等修改。我們的數(shù)據(jù)流修改規(guī)則支持可代表操作類型的操作碼規(guī)范,以 OpLoc 代表啟始位置、OpOffset 代表偏移、Insert Size 代表插入的數(shù)據(jù)大小、Delete Size 代表刪除的數(shù)據(jù)大小,以及是否執(zhí)行第 3 層和第 4 層校驗和計算和插入以及是否進行修改規(guī)則鏈化。
我們的新一代實施方案不僅能夠顯著提升性能、進一步加強高速緩沖的能力,同時還能添加新功能。通過把我們的 FAST 芯片組升級到單個的賽靈思 Virtex-6 FPGA,我們不僅能夠?qū)⑿乱淮?FAST 的功能、接口和性能提升到一個前所未有的水平,同時還能縮小板級空間并降低功耗要求,從而實現(xiàn)單芯片深度包處理協(xié)處理器單元。
我們能夠使用包覆蓋特性來簡單地對諸如 MAC 目的地地址、MAC 源地址、VLAN 標記甚或是單個 TCP 標志等現(xiàn)有字段進行修改。
評論