13.3.3 iWARP
iWARP(Internet Wide Area RDMA Protocol)是 IETF 定義的基于 TCP 的 RDMA,它和RoCE v2 都可以路由。因為 TCP 是面向連接的可靠協議,這使得 iWARP 在面對有損網絡場景時,相比 RoCEv2 和 InfiniBand 具有更好的可靠性,在大規模組網時也有明顯的優勢。但在大規模數據中心和大規模應用程序(比如大型企業網、云計算、Web 2.0 應用程序等)中使用 iWARP 時,大量連接的內存需求以及 TCP 的流量和可靠性控制將會導致可擴展性和性能相關的問題,并且會耗費很多的內存資源。總體來看,RoCE 在時延、吞吐量和 CPU 開銷方面明顯優于 iWARP。此外,RoCE 規范中定義了多播,而當前的 iWARP 規范沒有定義如何執行多播 RDMA。
需要注意的是,雖然存在軟件實現的 RoCE 和 iWARP,但是真正商用時上述幾種協議都需要專門的硬件(網卡)支持。本書中測試和分析代碼時所使用的 RDMA 網卡都為支持RoCEv2 協議的網卡。
13.4 RDMA 網絡構成
InfiniBand 體系結構定義了組網通信所需的多種設備:通道適配器(channel adapter)、交換機(switch)、路由器(router)和子網管理器(subnet manager)。其中子網管理器屬于虛擬設備,它可以在其他任何一臺設備上實現。圖 13-8 展示了一個包含所有這些實體設備的網絡。每個終端(endnode)設備必須至少有一個通道適配器(HCA 或 TCA)。一個子網中至少有一個子網管理器用于配置和維護鏈路。所有的通道適配器和交換機必須包含子網管理代理(subnet management agent,SMA),用于處理與子網管理器的通信。
除了子網管理器,RoCE 類型的網絡中也需要上述這些組件。
主機通道適配器(host channel adapter,HCA)
HCA 即本書中經常提及的安裝在主機上的 RDMA 網卡,用于將一個主機設備連接到一個 RDMA 網絡上。
一個 HCA 可以有多個物理端口(port),每個端口有自己的本地標識符(local identifier,LID)或 LID 范圍。另外,每個端口還有自己的發送和接收緩存(buffer),因此所有端口可以并行發送和接收。
子網管理器為 HCA 的每一個物理端口配置子網內的本地地址,即 LID。HCA 中的子網管理代理和子網管理器通信,共同實現子網管理功能。
廠商會給每一個 HCA 分配獨一無二的標識符,稱為 GUID(globally unique identifier)。子網管理器分配給 HCA 的 LID 并不是永久的(斷電重啟后可能會變),所以 GUID 就成了永久識別某一個 HCA 的主要標識符。另外,廠商還給每一個端口分配了一個端口 GUID。
HCA 支持 InfiniBand 定義的所有軟件 Verbs。Verbs 是一種抽象表示,它定義了客戶端軟件和 HCA 功能之間所需的接口。Verbs 不直接指定操作系統的應用程序編程接口(API),而是定義了一系列操作,提供給操作系統供應商開發相應的 API。
目標通道適配器(target channel adapter,TCA)
TCA 為 I/O 設備(比如硬盤控制器)提供其到 RDMA 網絡的連接,支持每個設備的特定操作所需的 HCA 功能子集。
子網管理器(subnet manager)
InfiniBand 子網管理器為連接到 InfiniBand 網絡的每個端口分配 LID,并基于分配的 LID建立路由表。子網管理器屬于軟件定義網絡(SDN)的概念,它消除了互連的復雜性,支持創建非常大規模的計算和存儲基礎設施。子網管理器配置本地子網并確保其持續運行。每個子網中必須至少有一個子網管理器,用于管理所有交換機和路由器的配置,并在鏈路斷開或出現新鏈路時重新配置子網。
子網管理器可以位于子網中的任何設備內,它通過與每臺設備上的子網管理代理通訊來進行工作。一個子網中可以有多個子網管理器,但只能有一個子網管理器處于活動狀態。不在活動狀態的子網管理器(即備用子網管理器),會同步保存處于活動狀態的子網管理器轉發的信息副本,并驗證活動狀態的子網管理器是否仍在運行。如果處于活動狀態的子網管理器停機了,備用子網管理器將接管它的工作,以確保整個子網不會停擺。
在 RoCE 類型的網絡中,不存在子網管理器。
交換機(switch)
InfiniBand 交換機在概念上類似于標準以太網交換機,但其設計旨在滿足 InfiniBand 的性能要求。它們實現 InfiniBand 鏈路層的流量控制以防止丟包,有避免阻塞和自適應路由的功能,并支持高級服務質量(QoS)。許多交換機包含了子網管理器的功能。交換機包含多個端口,并根據協議第二層本地路由報頭中包含的 LID,將數據包從一個端口轉發到另一個端口。交換機只會管理和轉發數據包,不會消耗或產生數據包。與通道適配器(HCA 和 TCA)一樣,交換機必須包含子網管理代理功能,以處理子網管理報文。交換機可以被配置為轉發單播數據包(到單個設備)或多播數據包(到多個設備)。
RoCE 類型的網絡中使用的是以太網交換機。
路由器(router)
InfiniBand 路由器將數據包從一個子網轉發到另一個子網,而不消耗或產生數據包。與交換機不同,路由器根據全局路由報頭(global route header,GRH)中包含的 IPv6 網絡層地址來轉發數據包。在將數據包發送到下一個子網中時,路由器會按照目標子網中合適的 LID 來修改數據包中的本地路由報頭(local route header,LRH),重新組裝每個數據包。
路由對終端來說并不是透明的,因為終端發包時必須指定路由器的 LID 和最終目標的GID。
每一個子網都有獨一無二的子網 ID,稱為子網前綴。子網管理員會把這個子網前綴賦值給這個子網中所有的端口(包含在端口的 PortInfo 屬性中)。這個子網前綴和端口的 GUID結合,就成了端口的 GID。端口也可以有其他的 GID。
從路由器的角度看,GID 中的子網前綴部分就代表了穿過路由器的路徑。路由器依據數據包的目的 GID 和轉發表來決定把數據包轉發到哪個或哪些端口。
RoCE 類型的網絡中使用的是以太網路由器。
13.5 LID 和 GID
從功能上看,LID(local identifier)和 GID(globally identifier)的概念類似于“以太網和IP 網”中的 MAC 和 IP,分別用于子網內的目標尋址和子網間的目標尋址。
根據 InfiniBand 協議,兩臺設備間建立連接時,需要知道對方的 QP 號和端口,其中對端口的識別根據 LID 和 GID(后者可選)進行。
13.5.1 LID
InfiniBand 定義的 LID 是一個 16 位的標識符。LID 有以下特征。? 由子網管理員分配,子網內唯一,不可用于子網間路由。
? LID 作為一種網絡地址,分為預留、單播和多播地址段。
? 數據包中的本地路由報頭(local route header,LRH)中包含了 LID。
? 源 LID 指的是第一個將數據包插入子網的終端端口的 LID。
? 一個單播型的目的 LID 適用于某一個目的終端端口。一個多播型的目的 LID 適用于一個子網中某個多播組里的一系列目的終端端口。
? 如果最終的目的端口不在這個子網內,數據包中的目的 LID 指向的是,負責轉發這個數據包到下一跳的路由器的某個端口。
? 一個終端端口在連接到子網后,收到的數據包可能經過了子網內的多條物理路徑。例如,圖 13-9 中交換機之間相同類型的連紅表示一條可能的路徑,這樣的路徑共有 4條。每條路徑可以被一個或多個物理 LID 標識。為了降低 HCA 的多路徑操作的復雜度,每個物理端口應分配一個基本 LID 和一個 LMC。LMC 是一個 3 位的域,代表2LMC條路徑。圖 13-9 中,HCA A 和 HCA C 之間存在多條路徑。如果 HCA A 被分配了基本 LID 4,LMC =2,則其 LID 的范圍是 4、5、6、7。如果 HCA C 被分配了基本LID 8,LMC=2,則其 LID 的范圍就是 8、9、10、11。
? LID 的分配規則:LID 0x0000 無效;LID 0xFFFF 分配給接收數據包的終端端口的 QP0;0x0001 和 0xBFFF 之間為單播 LID;0xC000 和 0xFFFE 之間為多播 LID。
對于 RoCE 類型的網絡,LID 無效,所有端口的 LID 都為 0x0000。
13.5.2 GID
GID 是一種 128 位的單播或多播標識符,用于標識端口或多播組。
GUID(globally unique identifier)是全局唯一的 EUI-64 標識符,共 64 位。其中的 24 位表示廠商 ID,另外 40 位是擴展標識符,由生產設備的廠商來分配。
GID 有以下特征。
? 每個終端端口必須被分配至少一個單播 GID。第一個單播 GID 在創建時必須使用廠商分配的 EUI-64 標識符。此 GID 稱為 0 號 GID,格式見圖 13-10(a)或圖 13-10(b)。
? 默認的 GID 前綴為 0xFE80::0,共 64 位。使用默認 GID 前綴和廠商/子網管理器分配的 EUI-64 可以組成 128 位的 GID,使用這種 GID 封裝的數據包必須被終端接納。一個數據包的全局路由報頭(GRH)中如果有這種前綴的目的 GID,則路由器不能將其轉發,也就是必須限制在本地子網內處理。
? 一個子網 GID 必須使用下列一個或多個規則來創建。
規則 1。把默認 GID 前綴和廠商給終端端口分配的 EUI-64 標識符連接起來。這個 GID 就是默認的 GID。
規則 2。把子網管理器分配的 64 位的 GID 前綴和廠商給終端端口分配的 EUI-64標識符連接起來。
規則 3。子網管理器分配的 GID。子網管理器把默認或者分配的 GID 前綴和一組本地分配的 EUI-64 值連接起來。這種 GID 稱為 1 號或更大號碼的 GID。每個終端端口必須用規則 1 分配至少一個單播 GID。其他 GID 可用規則 2 或規則 3分配。注意,一個子網在某個時間點只能有一個分配的(非默認的)GID 前綴。
? 通道適配器、交換機或路由器上的任何 QP,都可以用默認 GID 前綴加上為這個 QP分配的 GID 來尋址。這使得一個子網可以在不中斷已有通信會話的情況下,從默認GID 前綴狀態轉換為托管狀態。
? 每個終端端口可以支持的單播 GID 的最大數量(N)取決于具體實現。子網管理器可以分配 N?1 個額外的單播 GID,這 N?1 個 GID 中的每一個都是通過將一個子網管理器分配的 EUI-64 標識符與 GID 前綴連接起來創建的。
? 單播 GID 地址 0000:0 是保留的,稱為保留 GID。不得將其分配給任何終端端口,也不得將其用作目的地址或用在 GRH 中。
? 單播 GID 地址 0000:1 稱為環回 GID,僅由原始(raw)IPv6 服務使用,不由InfiniBand 傳輸服務使用。不得將其分配到終端端口或出現在任何 InfiniBand 數據包中。
? 單播 GID 子網前綴應限于 GID 地址空間的高 64 位。子網前綴的位的數量可能會進一步受到填充(filler)和作用域(scope)位的限制,見下文分析。
? 單播 GID 的低 64 位不能進一步劃分子網。
? 單播 GID 的低 64 位在子網中是唯一的。
? GRH 中應包含有效的源 GID 和目的 GID。
? 單播 GID 的范圍包括以下類型。
本地連接型(link-local)。這種單播 GID 使用默認的 GID 前綴(0xFE80::0),只在子網內使用。如果數據包中有此類 GID,無論是作為源 GID 還是目的 GID,路由器都不能把數據包轉發到子網外。本地連接型 GID 的格式如圖 13-10(a)所示。
本地區域型(site-local)。這種單播 GID 在一組子網(比如一個數據中心的多個子網)組成的區域內是唯一的,但不一定是全局唯一。路由器不能把帶有這種源 GID或目的 GID 的數據包轉發到區域外。本地區域型 GID 的格式如圖 13-10(b)所示。
全局唯一型(global)。這種單播 GID 是帶有全局前綴的,即路由器可以使用此 GID在整個企業網或互聯網上路由數據包。全局唯一型 GID 的格式如圖 13-10(c)所示。
多播 GID(MGID)用于識別多播組。多播組中的所有成員,除了具有相同的 MGID,還必須共享相同的 P_key 和 Q_key。
? 多播 GID 的格式如圖 13-11 所示。
起始的 11111111 表示這是多播 GID。
標記(Flag)字段有 4 個 1 位的標記,格式為 000T,目前保留前 3 個標記,并定為 0。如果 T 為 0,表示這是一個永久分配的(即眾所周知的)多播 GID;如果 T 為 1,表示這是一個非永久分配(即暫時)的多播 GID。
Scope(作用域)字段也有 4 位,用于限制多播組的作用域。如果 Scope 字段的值為 2,表示此多播 GID 僅限在子網內使用;如果 Scope 字段的值為 5,表示此多播 GID 僅限在由幾個子網組成的一個區域中使用;如果 Scope 字段的值為 8,表示此多播 GID 可以在一個本地組織中使用;如果 Scope 字段的值為 0xE,表示此多播 GID 可以全局使用。
? 一個終端端口可以加入 0、1 或多個多播組,也就是說,一個終端端口可以被分配 0、1 或多個多播 GID。
? 多播 GID 不能作為源 GID 出現在全局路由報頭中。
? 多播 GID FF02000:1 是一個本地連接型的多播 GID,路由器不能把以這種 GID為目的 GID 的數據包轉發到子網外。此 GID 在作為 GRH 內的目的地址時,被用來與參與所有通道適配器多播組的一組 QP 通信。所有通道適配器多播組包括希望參與該多播組的所有通道適配器,和增強型交換機的 0 號端口。所有通道適配器多播組用于向能夠參與多播操作的所有通道適配器(必須共享相同的 MGID、P_key 和 Q_key)實現廣播服務。
審核編輯:湯梓紅
-
cpu
+關注
關注
68文章
10863瀏覽量
211781 -
網絡
+關注
關注
14文章
7565瀏覽量
88794 -
路由器
+關注
關注
22文章
3732瀏覽量
113788 -
TCP
+關注
關注
8文章
1353瀏覽量
79077 -
RDMA
+關注
關注
0文章
77瀏覽量
8949
原文標題:好書連載|RDMA技術簡介(4)
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論