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