Infiniband 使用者空間能力¶
使用者CAPabilities (UCAPs) 提供了對 Infiniband (IB) 裝置中特定韌體功能的細粒度控制。 這種方法提供的能力比現有的 Linux 能力更精細,因為 Linux 能力對於某些 FW 功能來說可能過於通用。
每個使用者能力都表示為一個具有 root 讀寫許可權的字元裝置。 Root 程序可以透過允許訪問這些字元裝置(例如,使用 chown)來授予使用者特殊許可權。
用法¶
UCAPs 允許使用 UCAP 字元裝置的檔案描述符來控制 IB 裝置的特定功能。 以下是使用者如何啟用 IB 裝置的特定功能
Root 程序授予使用者訪問代表這些能力的 UCAP 檔案的許可權(例如,使用 chown)。
使用者開啟 UCAP 檔案,獲取檔案描述符。
開啟 IB 裝置時,包含一個 UCAP 檔案描述符陣列作為屬性。
ib_uverbs 驅動程式識別 UCAP 檔案描述符,併為 IB 裝置啟用相應的能力。
建立 UCAP¶
要建立新的 UCAP,驅動程式必須首先在 rdma/ib_ucaps.h 中的 rdma_user_cap 列舉中定義一個型別。 UCAP 字元裝置的名稱應新增到 drivers/infiniband/core/ucaps.c 中的 ucap_names 陣列中。 然後,驅動程式可以透過使用 UCAP 型別呼叫 ib_create_ucap API 來建立 UCAP 字元裝置。
為每個 UCAP 儲存一個引用計數,以跟蹤 UCAP 裝置的建立和刪除。 如果使用相同型別進行多次建立呼叫(例如,對於兩個 IB 裝置),則會在第一次呼叫期間建立 UCAP 字元裝置,後續呼叫會遞增引用計數。
UCAP 字元裝置在 /dev/infiniband 下建立,其許可權設定為僅允許 root 使用者讀寫訪問。
移除 UCAP¶
每次刪除都會遞減 UCAP 的引用計數。 僅當引用計數減少到 0 時,才會從檔案系統中刪除 UCAP 字元裝置。
/dev 和 /sys/class 檔案¶
類
/sys/class/infiniband_ucaps在建立第一個 UCAP 字元裝置時建立。
UCAP 字元裝置在 /dev/infiniband 下建立。
例如,如果 mlx5_ib 新增具有名稱 “mlx5_perm_ctrl_local” 的 rdma_user_cap RDMA_UCAP_MLX5_CTRL_LOCAL,這將建立裝置節點
/dev/infiniband/mlx5_perm_ctrl_local