近日,谷歌正式向 OCP 提交了 Falcon 協(xié)議草案。此前在《再談谷歌Falcon以太網(wǎng)硬件傳輸協(xié)議》一文中,我們已經(jīng)對谷歌Falcon協(xié)議有了一些認(rèn)識。 ? Falcon涉及的技術(shù): ?
Carousel:一種流量限制機制(流量整形),允許在各個主機的上下文中調(diào)節(jié)數(shù)據(jù)包流的性能和強度。
Snaps:基于微內(nèi)核的網(wǎng)絡(luò)子系統(tǒng),可以通過模塊進行擴展,通過模塊可以添加高級功能,例如網(wǎng)絡(luò)虛擬化、流量限制和消息傳遞功能。
Swift:數(shù)據(jù)中心級網(wǎng)絡(luò)的擁塞控制機制,短 RPC 消息可實現(xiàn)低于 50 微秒的延遲,同時在接近 100% 負(fù)載的情況下保持每臺服務(wù)器 100 Gbps 的吞吐量。
RACK-TLP:一種確定 TCP 數(shù)據(jù)包丟失的算法。
PLB:一種使用擁塞信號的負(fù)載平衡機制。
CSIG:一種遙測交換協(xié)議,用于發(fā)送擁塞和流量控制信號。
? 此次谷歌提交的 Falcon 草案包括: ? OCP Specification_ Falcon Transport Protocol_Rev0.9 ? 該規(guī)范描述了為 RDMA 操作和 NVMe 命令提供可靠傳輸?shù)?Falcon 協(xié)議。Falcon 是一種面向連接的請求響應(yīng)傳輸協(xié)議,可為 RDMA 和 NVMe 等上層協(xié)議 (ULP) 提供端到端可靠傳輸和基于連接的安全性。Falcon 連接可以是有序的,也可以是無序的。Falcon 包括一個可編程擁塞控制引擎,可用于實現(xiàn)最先進的擁塞控制算法。Falcon 使用 Paddywhack 安全協(xié)議 (PSP) 或 IPSEC ESP 協(xié)議對每個連接的所有 ULP 數(shù)據(jù)進行身份驗證和加密。 ? OCP Specification_ RDMA over Falcon Transport_Rev0.9: ? 該規(guī)范描述了 RDMA ULP 到 Falcon 傳輸協(xié)議的映射,包括數(shù)據(jù)包格式、支持的操作和錯誤處理模式。RDMA ULP 由 Infiniband Verbs 規(guī)范定義,并且 Falcon 傳輸上的 RDMA 映射支持 Verbs 規(guī)范的可靠連接 (RC) 和不可靠數(shù)據(jù)報文 (UD) 模式。 ?
? 下面小編將帶大家簡單看一下草案的內(nèi)容,文末提供完整 PDF 下載。 ? ? 協(xié)議體系結(jié)構(gòu)
? 上圖是Falcon的協(xié)議層。Falcon本身由兩個子層組成:事務(wù)層和數(shù)據(jù)包傳輸層。事務(wù)層主要處理ULP事務(wù),并負(fù)責(zé)資源管理和事務(wù)排序。數(shù)據(jù)包傳輸層主要負(fù)責(zé)網(wǎng)絡(luò)數(shù)據(jù)包,并負(fù)責(zé)可靠傳遞和擁塞控制。Falcon不公開自己的硬件/軟件接口。ULP負(fù)責(zé)實施硬件/軟件接口、操作處理、完工通知和端到端流量控制。 ? ULP操作(Op)可以映射到一個或多個Falcon事務(wù)。Falcon事務(wù)由請求和響應(yīng)定義。Falcon通過在網(wǎng)絡(luò)上發(fā)送和接收一個或多個數(shù)據(jù)包來可靠地完成事務(wù)。在完成事務(wù)時,F(xiàn)alcon通過響應(yīng)或完成來通知ULP。Falcon的push和pull請求提供了基本的primitives,可以將不同的ULP操作靈活地映射到Falcon事務(wù)。下圖顯示了ULP操作、Falcon事務(wù)和數(shù)據(jù)包之間的關(guān)系。 ?
? 事務(wù)子層 ? 事務(wù)子層為ULP提供事務(wù)接口。Falcon事務(wù)由ULP向Falcon發(fā)出的請求和Falcon返回ULP的響應(yīng)組成,表示事務(wù)結(jié)束。ULP可以生成兩種類型的事務(wù):pull 和 push。所有ULP操作都必須映射到pull 和 push事務(wù)。例如,RDMA讀取和原子操作碼映射到pull事務(wù),RDMA發(fā)送和寫入操作碼映射為push事務(wù)。Falcon的每個事務(wù)都有一個請求序列號(RSN),用于跟蹤事務(wù)狀態(tài)和排序。 ?
?
? 數(shù)據(jù)包傳輸子層
?
? 數(shù)據(jù)包傳輸子層的兩個主要功能是可靠的數(shù)據(jù)包傳輸和從Falcon發(fā)送器到Falcon接收器的擁塞控制。數(shù)據(jù)包傳輸子層使用兩個滑動窗口來分離請求和數(shù)據(jù)。請求滑動窗口負(fù)責(zé)pull 請求的可靠傳遞,數(shù)據(jù)滑動窗口負(fù)責(zé)pull 和push 數(shù)據(jù)的可靠傳遞。需要兩個滑動窗口來避免協(xié)議死鎖。 ? ? 擁塞控制 ? Falcon使用每連接的擁塞控制。Falcon數(shù)據(jù)路徑硬件負(fù)責(zé)測量擁塞信號,并基于每個連接強制執(zhí)行計算的擁塞窗口和速率。擁塞控制算法本身在與主Falcon數(shù)據(jù)路徑分離的速率更新引擎(RUE)中實現(xiàn)。 ? Falcon在ACK/NACK接收、數(shù)據(jù)包重傳等特定事件上觸發(fā)RUE操作。RUE響應(yīng)這些事件計算擁塞控制輸出,并將其返回給Falcon。 ? Swift是一種基于延遲的擁塞控制,適用于數(shù)據(jù)中心,可在高帶寬下提供低尾部延遲和近乎零丟包: ?
利用每個數(shù)據(jù)包NIC硬件的時間戳,并有效地將其用于擁塞窗口和速率計算。
快速反應(yīng)算法處理網(wǎng)絡(luò)中的大規(guī)模入侵和流量沖突。
通過對fabric和終端主機組件的cwnd(或速率)計算進行解耦,消除歧義,并對fabric和終端主機/NIC擁塞做出適當(dāng)響應(yīng)。
負(fù)載平衡對于最大限度減少fabric中的擁塞熱點也至關(guān)重要。保護性負(fù)載平衡是一種利用Swift擁塞信號的有效負(fù)載平衡算法。 ? ? 錯誤處理 ? Falcon支持ULP的錯誤處理語義。特別是Falcon支持“接收器未就緒(RNR)”指示的ULP概念。RNR指示允許目標(biāo)ULP指定必須重試事務(wù)的時間。Falcon實現(xiàn)了對ULP透明的RNR重試。從發(fā)起端重試push事務(wù)。從目標(biāo)端重試pull事務(wù)。 ? 此外,F(xiàn)alcon還支持快速恢復(fù)。CIE語義可以更好地處理各種錯誤(例如RDMA ULP中的內(nèi)存保護錯誤),而不要求在ULP中將此類錯誤視為致命錯誤。目標(biāo)ULP可以使用CIE指示來回復(fù)pull或push事務(wù)。對于pull事務(wù),ULP必須返回具有CIE錯誤代碼的零長度拉取響應(yīng)。對于push事務(wù),ULP必須返回帶錯誤代碼的顯式CIE指示。Falcon 會將帶有 ULP 錯誤代碼的 CIE NACK 數(shù)據(jù)包從目標(biāo)發(fā)送到發(fā)起端。發(fā)起端將錯誤地完成交易,并將CIE錯誤代碼返回給發(fā)起端ULP。 ? 盡管RNR NACK和CIE NACK是不可靠的數(shù)據(jù)包,但Falcon具有從丟失的 NACK 中恢復(fù)的機制。 ? 在Falcon塊本身中,錯誤處理完全在硬件中實現(xiàn)。錯誤處理的目標(biāo)是僅將影響范圍限制在發(fā)生錯誤的連接上,并且不影響其他連接的性能。使用數(shù)據(jù)包超時和重傳來處理包丟失等協(xié)議錯誤。超過可配置閾值的重復(fù)重傳失敗會向軟件發(fā)出信號,以便可以采取糾正措施,例如重新建立連接。 ? 分配給 Falcon 內(nèi)事務(wù)的所有資源都可以在可配置的超時后回收。Falcon 中的所有資源都可以被視為“軟狀態(tài)”,因為資源清理是在發(fā)起方和目標(biāo)方超時后發(fā)生的。 ? ? 數(shù)據(jù)包格式 ? Falcon數(shù)據(jù)包
? Falcon數(shù)據(jù)包的有線格式如上圖所示。Falcon數(shù)據(jù)包被封裝為加密協(xié)議(如PSP或IPSEC ESP)的有效負(fù)載,該協(xié)議提供Falcon數(shù)據(jù)包的身份驗證和加密。Falcon報頭位于PSP/ESP報頭之后(由PSP報頭中的Next header值252指示)。Falcon數(shù)據(jù)包的有效負(fù)載包含上層協(xié)議(ULP)數(shù)據(jù)包有效負(fù)載,F(xiàn)alcon報頭中的協(xié)議類型字段指示ULP協(xié)議。緊跟在Falcon報頭之后的是ULP協(xié)議特定報頭。在PSP的情況下,PSP加密偏移字段配置為指向Falcon報頭的前4個字節(jié)之外(將連接ID字段留空)。 ? Transport Mode(傳輸模式)
? Falcon在傳輸模式下最常見的數(shù)據(jù)包格式如上圖所示。傳輸模式格式具有單個IP報頭,其中源IP地址和目標(biāo)IP地址表示網(wǎng)絡(luò)中計算機的物理IP地址。傳輸模式格式用于RDMA RC和RD模式的非虛擬化部署。 ? Tunnel Mode(隧道模式)
? Falcon也可以在隧道模式下使用,這在虛擬化環(huán)境中很有用。在隧道模式下,PSP/ESP有效負(fù)載攜帶內(nèi)部IPv4/IPv6數(shù)據(jù)包。 ? Falcon Base Header?
? 除ACK和NACK數(shù)據(jù)包外,所有Falcon數(shù)據(jù)包都攜帶Falcon Base報頭。Falcon報頭的格式如上圖所示,下表提供了報頭各個字段的規(guī)格。 ?
? Pull請求數(shù)據(jù)包
? 作為對ULP發(fā)起的pull事務(wù)的響應(yīng),發(fā)起者向目標(biāo)發(fā)送pull請求包。在目標(biāo)端,pull請求包被傳送到目標(biāo)ULP, ULP必須通過發(fā)送pull響應(yīng)來完成pull事務(wù)。Pull請求包的格式如上圖所示,由下表定義。 ?
? Pull數(shù)據(jù)包
? 作為對目標(biāo)接收到的pull請求的響應(yīng),目標(biāo)端的ULP向發(fā)起者發(fā)送pull數(shù)據(jù)包。Pull數(shù)據(jù)包的格式如上圖所示,定義如下表所示。 ?
? Push數(shù)據(jù)包
? 作為對ULP發(fā)起的推送事務(wù)的響應(yīng),一個推送數(shù)據(jù)包由發(fā)起者發(fā)送到目標(biāo)端。推送數(shù)據(jù)包的格式如上圖所示,定義如下表所示。 ?
? 重新同步數(shù)據(jù)包
? 重新同步數(shù)據(jù)包從Falcon發(fā)送器發(fā)送到Falcon接收器,以同步滑動窗口狀態(tài)(即PSN)。重新同步數(shù)據(jù)包的格式如上圖所示,并由下表定義。 ?
? 確認(rèn)(ACK)數(shù)據(jù)包 ? 有兩種類型的ACK數(shù)據(jù)包:基本ACK(BACK)和擴展ACK(EACK)。 ? 基本ACK(BACK)數(shù)據(jù)包 ?
? BACK數(shù)據(jù)包由Falcon接收器發(fā)送給Falcon發(fā)送器,以確認(rèn)收到數(shù)據(jù)包。接收方可以合并確認(rèn)。因此,一個BACK包可以確認(rèn)以前收到的多個包。BACK數(shù)據(jù)包的格式如上所示,并由下表定義。 ?
? 擴展ACK(EACK)數(shù)據(jù)包 ?
? EACK數(shù)據(jù)包用3個位圖擴展BACK:接收器數(shù)據(jù)序列號ACK位圖(Data - ACK - Bitmap)、接收器數(shù)據(jù)序列編號Rx位圖(Data - Rx - Bitmap)、接收器請求序列號位圖(req-bitma)。 ?
? 否定確認(rèn)(NACK)數(shù)據(jù)包
? NACK 數(shù)據(jù)包由 Falcon 接收器發(fā)送到 Falcon 發(fā)送器,以響應(yīng) ULP 發(fā)出的錯誤信號或超出接收器滑動窗口的無序接收的數(shù)據(jù)包。NACK數(shù)據(jù)包的格式如上所示,并由下表定義。 ?
? 審核編輯:黃飛
?
評論