1、P4可編程芯片概述
我們以Tofino可編程芯片為例,講述如何進行SDN交換機的優化設。Tofino芯片包含多個Pipeline,每個Pipeline可以運行不同的查表邏輯(即不同P4程序),每個Pipeline含12個MAU(Match-Action Unit),出/入Pipeline共享這些MAU。
每一個MAU對應Pipeline流水線中一個Stage階段,每個Stage支持若干次并發查找,從而可以提升并發查找性能。MAU與MAU之間順序查找,多級查表或處理可以分布到不同的MAU上,從而可以豐富業務處理邏輯。

圖1 P4抽象轉發模型
2、整體設計背景及面臨的問題
為了滿足交換機高性能處理的需要,設計時,我們采用多個Pipeline同構設計,即所有Pipeline部署相同P4程序,使用相同的處理轉發邏輯。
考慮到業務邏輯的復雜性,數據面通常需要定義多個表才可以完成整個業務邏輯,并且流表與流表之間存在依賴關系,有依賴關系的流表會被P4編譯器分配到不同的Stage。每個Stage只能訪問自己的本地內存,當一張流表沒有在運行時使用的時候,它的資源也就白白浪費了。
以下圖為例,表21~23依賴于表11的匹配處理結果,如果表11沒有處理完,表21~23也無法運行,同理,表31依賴于表21~23的匹配處理結果,

圖2 表間依賴導致Stage資源利用率低
因此,在實際編碼時,我們會發現雖然用光了所有的Stage資源,但每個Stage資源利用率卻很低,極端時,資源利用率甚至不到10%。
3.優化設計方法
Stage資源利用率低的直接體現就是交換機相應的流表空間的不足,為了實現交換機流表空間擴充,需要尋找可以提高Stage資源利用率的方法,通常的調優方法主要包括以下幾種:
優化表配置,降低表間耦合度,提升Stage資源利用率。

圖3 降低表間耦合提升Stage資源利用率
如果實在不能通過流表的設計降低耦合度,就需要深刻理解和調整業務邏輯,一般地做法是將Key或Action依賴改為后繼依賴,必要時可以通過犧牲SRAM/TCAM確保低耦合。

圖4 后繼依賴示例
業務邏輯拆分部署。例如,在實際業務場景中,對特定報文執行隧道解封裝是常見的需求,如果把整個功能單獨放在Ingress Pipeline或單獨放在Egress Pipeline,就會增加表間依賴,導致Stage資源利用率低,但是,如果將特定報文的篩選(查表)和處理(修)分別放在Ingress Pipeline和Egress Pipeline,則既能兼顧PHV(Packet Header Vector)生存周期這一約束性資源的限制,又能提高Stage資源利用率。
巨型表拆解成小表。巨型表會被P4編譯器分配到不同的Stage,如下圖中的表2和表3是一個巨型表編譯后的情況,對于Stage3而言,剩余的資源還可以部署其它拆解后小表,達到資源充分利用的效果。

圖5 巨型表拆解成小表
經過我們大量的實驗和調優設計,基于P4可編程的SDN交換機片上SRAM/TCAM資源利用率超過83%。下圖是優化后Stage資源利用圖:
圖6 優化后Stage資源利用圖
4、交換機流表擴充
SDN交換機需要根據L2-L4協議頭識別所關心的流量,并對這部分流量做過濾和處理,如下圖所示。當收到報文后,適配不同的流表,并根據預定義的匹配動作處理報文。

圖7 流表匹配圖
五元組通配匹配和五元組精確匹配是較為常見的匹配模式,精確匹配又有一元組、二元組、三元組、四元組、五元組等不同元組的組合。
五元組通配匹配可以基于TCAM通過掩碼方式實現,通過忽略部分元組實現通配規則,因此,可以將通配五元組規則放在一張流表里實現。
SDN交換機通常對五元組精確匹配規格要求較高,基于SRAM實現的精確五元組流表受其查表機制(不支持掩碼方式)影響,天然不能滿足需要不同元組組合查表的場景。
解決精確五元組流表擴充的方式有兩種:
在SRAM上定義不同元組組合的流表:這種方案優點在于編程模型及查找邏輯簡單,管理面適配簡單;缺點是固定了6種元組組合,實際場景中存在6種以外的其他組合規則,靈活性較差。同時,由于不同元組組合的規則共享IP字段,尤其當IPv6時,這導致片上SRAM資源利用率極低,且不能保證規格。
壓縮查表的Key:Tofino芯片提供了Key壓縮機制,但這個機制存在誤匹配風險。誤匹配的概率和流表Key的分布(或哈希后的離散程度)有關,隨著已配表項數目的增加尤其在臨近滿配時,誤匹配的概率將急劇提高。
我們在進行精確五元組流表擴充優化設計時,充分結合上述兩種方式的優勢,同時規避相應的不足,解決思路如下:將較長Key映射成一個低位寬的Key(防止被編譯器優化到不同的MAU),然后用低位寬Key的組合替換IP,并對這些Key做精確(掩碼)查找,這種方法雖然犧牲了一部分SRAM,增加了數據面邏輯的復雜度和管理面適配的復雜度,但優化查表邏輯后可以在保證無誤匹配的前提下支持不同五元組組合,使得整體規格在原有數萬級別的基礎上提升了250%,而不同元組組合規格(中值)提升了200%。

圖8 低位寬Key拆解應用
5、網絡加速和業務卸載
“云化”大背景下,處理以隧道為代表的新應用新特性正在變成或已經變成基本需求,這些處理包括隧道封裝、解封裝、根據隧道內層IP信息進行流識別和過濾等。傳統處理方式是將這部分流量提交到計算卡(業務卡)上處理,伴隨著“云化”流量占比越來越大,本就昂貴的計算資源更加不堪重負。
P4可編程的SDN交換機為隧道流量的處理和卸載提供了契機,經過Parser調優設計,可以廣泛支持各種隧道和封裝協議的識別,如GTP、GRE、MPLS、ERSPAN、VXLAN、IP over IP等,并且可以根據隧道內層IP信息識別和過濾流量。

圖9 基于P4可編程交換機實現網絡加速和業務卸載
鑒于P4可編程交換機在處理隧道化流量方面有先天優勢,這種優勢可以轉化為解決方案的成本優勢;另一方面,如果將釋放出計算能力運用到增值業務處理上,這一優勢也可以轉化為解決方案的增值優勢。
除了隧道卸載外,我們還在基于P4的SDN交換機上卸載了諸如關鍵字匹配過濾、ICMP/ARP代答、報文截短等功能,以實現最大化地釋放算力資源的目的。
目前,星融整條P4交換機產品線,已經覆蓋了從TOR接入層的交換機到Spine及聚合層的交換機。