英語

基於 InfiniBand 的 IP

ib_ipoib 驅動程式是 IETF ipoib 工作組釋出的 RFC 4391 和 4392 中指定的基於 InfiniBand 的 IP 協議的實現。它是一種“原生”實現,其含義是將介面型別設定為 ARPHRD_INFINIBAND,並將硬體地址長度設定為 20(早期專有實現偽裝成乙太網介面)。

分割槽和 P_Key

載入 IPoIB 驅動程式後,它會使用索引 0 處的 P_Key 為每個埠建立一個介面。要使用不同的 P_Key 建立介面,請將所需的 P_Key 寫入主介面的 /sys/class/net/<intf name>/create_child 檔案。 例如

echo 0x8001 > /sys/class/net/ib0/create_child

這將建立一個名為 ib0.8001 的介面,其 P_Key 為 0x8001。要刪除子介面,請使用“delete_child”檔案

echo 0x8001 > /sys/class/net/ib0/delete_child

任何介面的 P_Key 由 “pkey” 檔案給出,子介面的主介面位於 “parent” 中。

子介面的建立/刪除也可以使用 IPoIB 的 rtnl_link_ops 完成,使用任一方式建立的子介面的行為相同。

資料報與連線模式

IPoIB 驅動程式支援兩種操作模式:資料報和連線。 模式透過介面的 /sys/class/net/<intf name>/mode 檔案設定和讀取。

在資料報模式下,使用 IB UD(不可靠資料報)傳輸,因此介面 MTU 等於 IB L2 MTU 減去 IPoIB 封裝標頭(4 位元組)。 例如,在具有 2K MTU 的典型 IB 結構中,IPoIB MTU 將為 2048 - 4 = 2044 位元組。

在連線模式下,使用 IB RC(可靠連線)傳輸。 連線模式利用了 IB 傳輸的連線特性,並允許最大 IP 資料包大小高達 64K 的 MTU,這減少了處理大型 UDP 資料報、TCP 段等所需的 IP 資料包數量,並提高了大型訊息的效能。

在連線模式下,介面的 UD QP 仍然用於多播以及與不支援連線模式的對等方的通訊。 在這種情況下,使用 ICMP PMTU 資料包的 RX 模擬來導致網路堆疊對這些鄰居使用較小的 UD MTU。

無狀態解除安裝

如果 IB HW 支援 IPoIB 無狀態解除安裝,則 IPoIB 會將 TCP/IP 校驗和和/或大型傳送 (LSO) 解除安裝功能通告給網路堆疊。

還實現了大型接收 (LRO) 解除安裝,並且可以使用 ethtool 呼叫開啟/關閉它。 目前,LRO 僅支援具有校驗和解除安裝功能的裝置。

無狀態解除安裝僅在資料報模式下受支援。

中斷調節

如果底層 IB 裝置支援 CQ 事件調節,則可以使用 ethtool 設定中斷緩解引數,從而減少處理中斷所產生的開銷。 IPoIB 的主程式碼路徑不使用事件進行 TX 完成訊號傳遞,因此僅支援 RX 調節。

除錯資訊

透過使用設定為“y”的 CONFIG_INFINIBAND_IPOIB_DEBUG 編譯 IPoIB 驅動程式,跟蹤訊息將被編譯到驅動程式中。 透過將模組引數 debug_level 和 mcast_debug_level 設定為 1 來啟用它們。 這些引數可以在執行時透過 /sys/module/ib_ipoib/ 中的檔案進行控制。

CONFIG_INFINIBAND_IPOIB_DEBUG 還在 debugfs 虛擬檔案系統中啟用檔案。 透過掛載此檔案系統,例如

mount -t debugfs none /sys/kernel/debug

可以從檔案 /sys/kernel/debug/ipoib/ib0_mcg 等獲取有關多播組的統計資訊。

此選項的效能影響可以忽略不計,因此對於正常操作,可以安全地啟用此選項並將 debug_level 設定為 0。

當 data_debug_level 設定為 1 時,CONFIG_INFINIBAND_IPOIB_DEBUG_DATA 可以在資料路徑中啟用更多的除錯輸出。 但是,即使停用了輸出,啟用此配置選項也會影響效能,因為它會向快速路徑新增測試。

參考

基於 InfiniBand 的 IP (IPoIB) 的傳輸 (RFC 4391)

http://ietf.org/rfc/rfc4391.txt

基於 InfiniBand 的 IP (IPoIB) 架構 (RFC 4392)

http://ietf.org/rfc/rfc4392.txt

基於 InfiniBand 的 IP:連線模式 (RFC 4755)

http://ietf.org/rfc/rfc4755.txt