RDMA 控制器 【ChatGPT】

发布时间 2023-12-09 22:25:50作者: 摩斯电码

RDMA 控制器

1. 概述

1-1. 什么是 RDMA 控制器?

RDMA 控制器允许用户限制给定一组进程可以使用的 RDMA/IB 特定资源。这些进程是使用 RDMA 控制器进行分组的。

RDMA 控制器定义了可以为 cgroup 的进程限制的两种资源。

1-2. 为什么需要 RDMA 控制器?

目前,用户空间应用程序可以轻松占用所有的 RDMA 动词特定资源,如 AH、CQ、QP、MR 等。这会导致其他 cgroup 中的应用程序或内核空间的 ULP 可能根本没有机会分配任何 RDMA 资源。这可能导致服务不可用。

因此,需要 RDMA 控制器来限制进程的资源消耗。通过这个控制器,可以对不同的 RDMA 资源进行核算。

1-3. RDMA 控制器是如何实现的?

RDMA cgroup 允许对资源进行限制配置。Rdma cgroup 使用资源池结构,对每个 cgroup、每个设备进行资源核算。每个这样的资源池由 rdma cgroup 限制,每个给定资源池最多可以有 64 个资源,如果需要的话可以随后进行扩展。

这个资源池对象与 cgroup css 相关联。在大多数情况下,每个 cgroup、每个设备通常有 0 到 4 个资源池实例。但并没有限制它的数量。目前,单个 cgroup 中可能存在数百个 RDMA 设备,可能无法得到最佳处理,但是也没有已知的使用情况或要求需要这样的配置。

由于 RDMA 资源可以从任何进程分配,并且可以由共享地址空间的任何子进程释放,因此 RDMA 资源始终由创建者 cgroup css 拥有。这允许进程从一个 cgroup 迁移到另一个 cgroup,而不需要进行资源所有权的复杂转移;因为由于 RDMA 资源的共享性质,实际上并不存在这样的所有权。在 css 周围链接资源还确保了在进程迁移后可以删除 cgroups。这也允许在活动资源的情况下进行进程迁移,尽管这不是主要的使用情况。

每当发生 RDMA 资源计费时,所有者 rdma cgroup 将返回给调用者。在取消资源时应传递相同的 rdma cgroup。这也允许具有活动 RDMA 资源的进程向新所有者 cgroup 计费新资源。它还允许从先前计费的 cgroup 中取消迁移到新 cgroup 的进程的资源计费,尽管这不是主要的使用情况。

在以下情况下创建资源池对象:(a) 用户设置了限制,但对于感兴趣的设备,之前没有资源池存在。(b) 没有配置资源限制,但 IB/RDMA 栈尝试计费资源。这样在应用程序在没有限制的情况下运行时,它们可以正确地取消计费,而在取消计费时强制执行限制,否则使用计数将会降到负值。

如果所有资源限制都设置为最大值,并且它是最后一个被释放的资源,资源池将被销毁。

如果要删除/取消配置特定设备的资源池,用户应将所有限制设置为最大值。

IB 栈遵守 rdma 控制器强制执行的限制。当应用程序查询 IB 设备的最大资源限制时,它返回用户为给定 cgroup 配置的限制和 IB 设备支持的限制的最小值。

RDMA 控制器可以核算以下资源。

  • hca_handle

    • HCA 句柄的最大数量
  • hca_object

    • HCA 对象的最大数量

2. 使用示例

配置资源限制:

echo mlx4_0 hca_handle=2 hca_object=2000 > /sys/fs/cgroup/rdma/1/rdma.max
echo ocrdma1 hca_handle=3 > /sys/fs/cgroup/rdma/2/rdma.max

查询资源限制:

cat /sys/fs/cgroup/rdma/2/rdma.max
# 输出:
# mlx4_0 hca_handle=2 hca_object=2000
# ocrdma1 hca_handle=3 hca_object=max

查询当前使用情况:

cat /sys/fs/cgroup/rdma/2/rdma.current
# 输出:
# mlx4_0 hca_handle=1 hca_object=20
# ocrdma1 hca_handle=1 hca_object=23

删除资源限制:

echo mlx4_0 hca_handle=max hca_object=max > /sys/fs/cgroup/rdma/1/rdma.max