https://zhuanlan.zhihu.com/p/336680341
IBA定義了一個系統區域網絡(System Area Network,SAN),用於連接多個獨立處理器平台(即主機處理器節點)、i/O平台和i/O設備(見圖6)。IBA SAN是一種通信和管理基礎設施,支持一個或多個計算機系統的I/O和處理器間通信(interprocessor communications, IPC)。IBA系統可以從一個擁有一個處理器和幾個I/O設備的小型服務器到安裝有數百個處理器和數千個I/O設備的大型並行超級計算機。此外,IBA的互聯網協議(IP)友好性質允許橋接到internet、intranet或與遠程計算機系統的連接。
IBA定義了一種交換通信結構(亦稱為Fabric,下同,可互換),允許許多設備在受保護的遠程管理環境中以高帶寬和低延遲並發通信。一個終端節點可以通過多個IBA端口進行通信,並且可以利用IBA Fabric的多條路徑。IBA端口和路徑的多樣性可用於容錯和增加數據傳輸帶寬。
IBA硬件從CPU卸載大部分I/O通信操作。這允許多個並發通信,而無需與通信協議相關的傳統開銷。IBA SAN提供其I/O和IPC客戶端零處理器拷貝數據傳輸,無需內核參與,並使用硬件提供高可靠性、容錯通信。

IBA系統局域網由處理器節點和I/O單元組成,它們通過由級聯交換機和路由器組成的IBA Fabric連接。
IO單元的復雜程度可以從單個ASIC IBA連接設備(如SCSI或LAN適配器)到大型內存豐富的RAID子系統(其復雜性可與處理器節點媲美)到復雜的分布式並行文件系統。
1 架構范圍
此InfiniBand架構規范定義了互連結構、路由元素、端節點、管理基礎設施以及通信格式和協議。它不指定I/O命令或群集服務。
例如,考慮一個IBA-SCSI適配器。IBA沒有定義磁盤I/O命令、SCSI適配器如何與磁盤通信、操作系統(OS)如何查看磁盤設備,也沒有定義集群中哪個節點擁有磁盤適配器。IBA是這些操作的基礎,但並不直接定義任何操作。相反,IBA定義了如何在處理器節點上的I/O驅動程序和SCSI適配器之間傳輸數據和命令。
IBA在多計算機環境中處理I/O和IPC的數據通信。它支持IO所需的高帶寬和可擴展性。它滿足了IPC所需的極低延遲和低CPU開銷。通過IBA,操作系統可以為客戶端提供繞過操作系統內核的通信機制,直接訪問IBA網絡通信硬件,實現高效的消息傳遞操作。
IBA非常適合最新的計算模型,是新形式I/O和集群通信的構建塊。IBA允許I/O單元之間以及與系統中的任何或所有處理器節點進行通信。因此,I/O單元具有與任何處理器節點相同的通信能力。
1.1 拓撲和組件
在較高的層次上,IBA充當終端節點的互連,如圖7所示。每個節點可以是處理器節點、I/O單元和/或到另一個網絡的路由器。

IBA網絡被細分為由路由器互連的子網,如圖8所示。端節點可以連接到一個子網或多個子網。

IBA子網由端節點、交換機、路由器和子網管理器組成,通過鏈路互連,如圖9所示。每個IBA設備可以連接到一個或多個交換機和/或直接彼此連接。任何兩個IBA設備之間可以存在多個鏈路。

該體系結構針對包含多個獨立進程和線程(使用者)的單元進行了優化,如圖10所示。每個通道適配器構成結構上的一個節點。該體系結構支持每個單元有多個通道適配器,每個通道適配器提供一個或多個連接到fabric的端口,在這種情況下,處理器節點呈現為(被當做)fabric的多個端節點。

在處理器節點中,消息和數據服務是一個不在本文檔范圍內的操作系統組件。本文檔指定消息和數據服務與通道適配器之間接口的語義行為。這個語義接口被稱為IBA Verbs。Verbs描述配置、管理和操作主機通道適配器所需的功能。這些Verbs標識每個特定功能需要包含的適當參數。本規范中定義的Verbs不是API,而是描述API必須提供的語義行為,以便使用者能夠直接訪問InfiniBand通道適配器提供的服務。
IBA被構建為first order網絡,因此它定義主機行為(Verbs)並定義內存操作,以便通道適配器可以盡可能靠近存儲器復合體。它在同意的消費者之間提供獨立的直接訪問,而不管這些消費者是I/O驅動程序和I/O控制器,還是基於點對點通信的軟件進程。IBA提供了通道語義(發送和接收)和直接內存訪問,並提供了防止非參與用戶訪問的保護級別。
2 通信
2.1 隊列
IBA操作的基礎是異步性質,這意味着消費者可以排隊執行一系列服務請求。硬件用於保存這些服務請求的隊列稱為工作隊列。工作隊列通常是成對創建的,稱為隊列對(Queue Pair,QP),一個用於發送操作,另一個用於接收操作。一般來說,發送工作隊列保存導致(能使)數據在使用者的內存和另一個使用者的內存之間傳輸的指令,而接收工作隊列保存關於將從另一個使用者接收到的數據放置在何處的指令。另一個使用者被稱為遠程使用者,即使它可能位於同一個節點上。IBA專門描述主機信道適配器(HCA)的排隊關系,但不描述I/O單元,因為I/O單元不一定受制於主機環境中存在的第二方和第三方互操作性(即HCA供應商、OS供應商和IHV的I/O驅動程序或ISV的應用程序之間的互操作性)IPC)。下面介紹HCA隊列模型。
使用者提交一個工作請求(WR),這將導致一個稱為工作隊列元素(WQE)的指令被放置到適當的工作隊列中。通道適配器按照wqe在工作隊列中的順序執行WQEs。當通道適配器完成WQE時,完成隊列元素(CQE)被放置在完成隊列上。每個CQE指定完成工作所需的所有信息,或者直接包含該信息,或者指向包含該信息的其他結構,例如關聯的WQE。

每個消費者可能有自己的一組工作隊列,每對工作隊列獨立於其他工作隊列。每個使用者創建一個或多個完成隊列,並將每個發送和接收隊列關聯到特定的完成隊列。工作隊列對的發送和接收隊列不一定都使用相同的完成隊列。
因為有些工作隊列需要來自遠程節點的確認,而有些wqe使用多個數據包來傳輸數據,所以通道適配器可以同時有多個wqe在進行中,甚至來自同一個工作隊列。因此,cqe被發布到完成隊列的順序是不確定的,除了相同工作隊列的cqe通常按照相應WQE被發布到工作隊列4的順序被發布(4:可靠數據報服務的接收完成是例外,因為在多個EE上下文上並發接收可能導致無序。)。
有三類發送隊列操作send、遠程內存訪問(RDMA)和內存綁定。
• 對於SEND操作,WQE在消費者的內存空間中指定一個數據塊,以便硬件發送到目的地,讓已經在目的地排隊的接收WQE指定數據的放置位置。
• 對於RDMA操作,WQE還指定遠程使用者內存中的地址。因此,RDMA操作不需要涉及目的地的接收工作隊列。RDMA操作有3種類型,RDMA-WRITE、RDMA-READ和ATOMIC。
- RDMA-WRITE操作規定硬件將數據從使用者的內存傳輸到遠程使用者的內存。
- RDMA-READ操作規定硬件將數據從遠程內存傳輸到用戶內存。
- 原子ATOMIC操作規定硬件將執行遠程64位內存位置的讀取。目標返回讀取的值,並通過將更新后的值寫回同一位置,有條件地修改/替換遠程內存內容。
• 內存綁定MEMORY BINDING指示硬件更改內存注冊關系(見10.6.6.2節)。它將內存窗口與現有內存區域內的指定范圍相關聯(綁定)。內存綁定允許使用者指定它與其他節點共享注冊內存的哪些部分(即遠程節點可以訪問的內存),並指定讀寫權限。結果產生一個內存鍵(R_KEY),使用者將其傳遞給遠程節點,供其在RDMA操作中使用。
只有一個接收隊列操作,它將指定一個接收數據緩沖區。
• RECEIVE WQE指定當另一個使用者執行SEND操作時,硬件將把從另一個使用者接收到的數據放置在何處。每次遠程使用者成功地執行發送操作時,(本地?)硬件從接收隊列獲取下一個條目,將接收到的數據放置在該接收WQE中指定的內存位置,並在完成隊列上放置CQE,向使用者指示接收操作已完成。因此,執行發送操作會導致遠程使用者處的接收隊列操作。
通常,RDMA操作不會在目的地使用receive WQE,但有一個例外。用於指定即時數據的RDMA寫入操作。即時數據(Immediate data)是可選地在SEND或RDMA WRITE指令中提供的32位信息,作為操作的一部分進行傳輸,但不是將立即數據寫入內存,而是將數據視為另一條狀態信息並作為接收CQE狀態的特殊字段返回。這意味着具有即時數據的RDMA寫入將在目的地消耗一個接收WQE。
2.2 連接
IBA同時支持面向連接和數據報服務。對於連接的服務,每個QP只與一個遠程用戶相關聯。在這種情況下,QP上下文配置為遠程使用者的隊列對的標識。遠程使用者由端口和QP號碼標識。端口由本地ID(LID)和可選的全局ID(GID)標識。在通信建立過程中,該信息和其他信息在兩個節點之間交換。
3 通信堆棧
IBA的通信堆棧如圖13所示。該體系結構提供了許多IBA事務,消費者可以使用這些事務與遠程消費者執行事務。使用者向QP發布工作隊列元素(WQE),通道適配器解釋每個WQE以執行操作。

對於發送隊列Send Queue操作,通道適配器解釋WQE,創建請求消息。如有必要,將消息分為多個數據包,添加適當的路由標頭,並將數據包發送到相應的端口。
端口邏輯通過鏈路傳輸數據包,交換機和路由器通過fabric將數據包中繼到目的地。
當目的地接收到數據包時,端口邏輯驗證數據包的完整性。信道適配器將接收到的分組與特定QP相關聯,並使用該QP的上下文來處理分組並執行操作。如果需要,通道適配器將創建一個響應(確認)消息,並將該消息發送回發起方。
接收某些請求消息會導致通道適配器使用接收隊列中的WQE。當它這樣做時,與所消費的WQE相對應的CQE被放置在適當的完成隊列上,這使得向擁有QP的消費者發出工作完成。
4 IBA組件
IBA系統中的設備分為:
- 交換機
- 路由器
- 信道適配器
- 中繼器repeaters
- 互連交換機、路由器、中繼器和信道適配器。
鏈路管理基礎架構包括:
- 子網管理器subnet managers
- 一般服務代理general service agents
4.1 鏈路和中繼器
鏈路將信道適配器、交換機、中繼器和路由設備互連以形成一個Fabric/結構。鏈路可以是銅纜、光纜或背板上的印刷電路布線。中繼器是一種透明的設備,可以擴展鏈路的范圍。InfiniBand Architecture的第2卷規定了各種媒介類型的鏈路和中繼器要求,並定義了I/O設備的各種模塊形式。第1卷中描述的體系結構獨立於鏈路類型和外形因素。
鏈路和中繼器不能直接尋址,但是鏈路狀態可以通過鏈路兩端的設備來確定。
4.2 信道適配器/通道適配器
通道適配器(或叫信道適配器)是處理器節點和I/O單元中生成和使用數據包的IBA設備。IBA定義了兩種類型的信道適配器:主機信道適配器(HCA)和目標信道適配器(TCA)。HCA提供一個使用者接口,提供IBA Verbs指定的功能。IBA沒有為TCA指定使用者接口的語義。
信道適配器是一種具有特殊保護功能的可編程DMA引擎,允許在本地和遠程啟動DMA操作。

通道適配器可以有多個端口。通道適配器的每個端口都分配了一個本地ID(LID)或一系列LID。每個端口都有自己的一組發送和接收緩沖區,這樣每個端口都能夠並發地發送和接收。緩沖通過虛擬通道(VL)傳輸,每個VL都有自己的流量控制。
通道適配器提供內存轉換和保護(MTP)機制,該機制將虛擬地址轉換為物理地址並驗證訪問權限。本文件未規定具體的內存管理機制,也未對TCA規定此類機制的要求。
通道適配器以由發送和接收工作隊列組成的隊列對(QP)的形式向其使用者提供通信接口的多個實例。
子網管理器用每個物理端口(即端口的LID)的本地地址配置信道適配器。為了配置通道適配器而與子網管理器通信的實體稱為子網管理代理(SMA)。
每個通道適配器都有一個由通道適配器供應商分配的全局唯一標識符(GUID)。由於子網管理器分配的本地ID不是持久的(即,可能會在每次關機后更改),因此通道適配器GUID(稱為節點GUID)成為用於永久標識通道適配器的主要對象。此外,每個端口都有一個由通道適配器供應商分配的端口GUID。
4.3 交換機
交換機主要根據數據包的本地路由報頭中的目標地址來傳遞數據包。交換機還消耗和獲取管理交換機本身所需的數據包。可選地,交換機端口可以包含物理TCA端口的屬性。
IBA交換機是子網內路由的基本路由組件(子網間路由由IBA路由器提供)。交換機之間的鏈路通過中繼連接。

交換機公開兩個或多個端口,在這些端口之間中繼數據包。
子網中的每個目的地都配置了一個或多個唯一的本地標識符(LID)。數據包包含一個指定目的地的地址。從交換機的角度來看,目的地表示通過交換機的路徑。交換機元素配置有轉發表。單個數據包在交換機內根據數據包的目標LID和交換機的轉發表轉發到一個或多個出站端口。
IBA交換機支持單播轉發,也可以支持多播轉發。單播是將單個數據包傳送到單個目的地,而多播是結構/fabric將單個數據包傳送到多個目的地的能力。
子網管理器配置交換機,包括加載其轉發表。
為了最大限度地提高可用性,可以在交換機結構中部署端節點之間的多條路徑。如果交換機之間有多條路徑可用,子網管理器可以將這些路徑用於冗余或基於目標LID的負載共享。在存在多條路徑的情況下,子網管理器可以通過重新加載fabric區域中受影響的交換機的轉發表,圍繞故障鏈路重新路由數據包。
4.4 路由器
和交換機一樣,路由器不生成也不消耗數據包(管理包除外)。他們只是把它們傳下去。路由器根據數據包的全局路由報頭轉發數據包,並在數據包從子網傳遞到子網時實際替換包的本地路由頭。
IBA路由器是子網間路由的基本路由組件(子網內路由由IBA交換機提供)。路由器通過在子網之間中繼數據包來互連子網。

路由器公開一個或多個端口,在這些端口之間轉發數據包。路由器可以嵌入其他設備,如通道適配器或交換機。
路由器對終端節點不是完全透明的,因為源節點必須指定路由器的LID並提供目的地的GID。
每個子網都用稱為子網前綴的子網標識唯一。子網管理器(通過PortInfo屬性)用該子網的子網前綴對所有端口進行編程。當與端口GUID組合時,此組合將成為端口的自然GID。端口可能有其他本地管理的GID。
從路由器的角度來看,GID的子網前綴部分表示通過路由器的路徑。IPv6指定路由器之間執行的協議以派生它們的轉發表。單個包在路由器內根據包的目的地GID和路由器的轉發表轉發到一個或多個出站端口。
每個路由器通過下一個子網將數據包轉發到另一個路由器,直到數據包到達目標子網。最后一個路由器使用與目的地GID相關聯的LID作為目的地LID來發送包。
子網管理器用有關子網的信息配置路由器,例如要使用哪個VL和分區信息。
為了最大限度地提高可用性,可以在結構中部署子網之間的多條路徑。如果有多條路徑可用,路由器可能會將這些路徑用於冗余或負載共享。當存在多個路徑時,路由器可以圍繞故障子網重新路由數據包。
4.5 管理組件
IBA管理提供了一個子網管理器和一個支持許多通用管理服務的基礎設施。管理基礎結構要求每個節點中都有一個子網管理代理,並定義了一個允許其他通用服務代理的通用服務接口。
該體系結構定義了一個公共管理數據報(MAD)消息結構,用於管理器和管理代理之間的通信。
4.5.1 子網管理器
子網管理器(SM)是連接到子網的實體,負責配置和管理交換機、路由器和通道適配器。SM可以與其他設備一起實現,例如信道適配器或交換機。
IBA支持每個子網多個子網管理器的概念,並指定多個子網管理器如何協商一個成為主SM。不禁止合作SMs之間的其他方法來管理主/備用關系。
主SM:
• 發現子網拓撲結構,
• 為每個信道適配器端口配置一系列LID、GIDs子網前綴和P_Key,
• 為每個交換機配置一個LID、子網前綴及其轉發數據庫,
• 維護子網的端節點和服務數據庫,從而提供一個GUID到LID/GID解析服務以及一個服務目錄。
4.5.2子網管理代理
每個節點提供一個子網管理代理(SMA),SM通過稱為子網管理接口(SMI)的已知接口訪問該代理。SMI允許LID路由包和直接路由包。直接路由提供了在配置交換機和終端節點之前進行通信的方法。只有SMI允許直接路由數據包。
4.5.3一般服務代理
每個節點可以包含稱為通用服務代理(generalserviceagents,GSA)的附加管理代理,這些管理代理可以通過稱為通用服務接口(generalserviceinterface,GSI)的眾所周知的接口進行訪問。GSI僅支持LID路由。IBA定義的一般服務類別為:
子網管理(SA)-這是由SM提供的服務,允許節點訪問有關子網的信息,以發現其他節點和服務,解析路徑,並注冊其服務。
- 性能管理-監視和報告定義良好的性能計數器。
- 基板管理-提供使用第2卷中定義的IB-ML進行機箱管理的功能。
- SNMP隧道-通過定義發送和接收SNMP消息的方法提供SNMP功能。
- 供應商定義-允許設備供應商用於遠程配置和管理其設備的專用擴展。
- 通信管理(ComMgt)-提供終端節點之間的連接建立和其他通信管理功能。
- 設備管理(DevMgt)-提供I/O資源管理。
- 特定於應用程序-此類定義了一組可供應用程序使用的通用方法。應用程序可以自由定義新的方法和屬性,但是它們必須符合本規范后面章節中描述的管理數據報格式和限制。
未完待續,請繼續關注公眾號“網絡技術風雲匯”的后續更新,謝謝!