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