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