您可以以非 root 用户身份在非特权容器中运行 DPDK 吗?

2024-03-15

我正在尝试在非特权 Docker 容器中运行 DPDK。虽然我可以限制容器的权限并将容器指定为非特权容器,但我仍然需要以 root 身份运行 dpdk 应用程序(例如 testpmd)。我还可以以非 root 身份运行容器并使用 sudo 启动 testpmd。

我想知道是否有人能够在 docker 容器内以非 root 用户身份运行 dpdk(没有 --no-huge 选项)。如果是,是否需要授予某些特权或权限?

UPDATED:

我正在使用 DPDK 20.02。我想我已经将问题范围缩小到了 ulimit -l 设置。

来自 testpmd:EAL:无法设置 DMA 重新映射,错误 12(无法分配内存)

来自 Dmesgdmesg:[5697911.199003] vfio_pin_pages_remote:超出RLIMIT_MEMLOCK(65536)。

回复维平:

您需要调整容器的限制吗?如果是这样怎么办? 我正在使用 helm 来部署 pod,所以我不确定是否可以修改 docker run 命令,看起来我需要在主机上编辑 /etc/security/limits.conf 并重新部署。

另外,你用什么来授予 fs 的所有权?使用非特权容器不会妨碍您吗?为了测试,我只是 sudo 它,但最终我希望能够删除 SETUID/SETGID。


我们可以使用非root用户在主机上或docker内部运行DPDK。

以非 root 用户身份运行 DPDK

  1. 创建或选择没有root权限的用户
  2. 将对 RUNTIME 目录值的访问权限设置为export XDG_RUNTIME_DIR=/tmp(因为所有用户都可以访问 tmp 文件夹并且在某些发行版上/var/run可能无法访问
  3. 将大页面挂载到类似的文件夹mkdir -p /tmp/mnt/huge; mount -t hugetlbfs nodev /tmp/mnt/huge
  4. 将所有权分配给用户以访问大页面,如下所示chown -R [non-root user]:[non-root user] /tmp/mnt/huge
  5. 如果需要访问设备,请使用 iommu 或 no-iommu 驱动程序进行检查lsmod | grep vfio
  6. 更改设备的所有权chown -R [non-root user]:[non-root user] /dev/vfio/[device id]
  7. 用户 DPDK rte_eal_init 选项 --huge-dirØ 指向/tmp/mnt/huge
  8. 即使在步骤 7 之后,某些 PMD 也可能会失败,对于那些使用选项的人--legacy-mem这解决了问题。

为了在 Docker 中运行 DPDK 应用程序,还需要解决一些问题

  1. 使用 DPDK 19.11 LTS 或更高版本(有与 docker、命名空间、内存限制相关的补丁)
  2. 某些 SE 策略 (Linux) 不允许共享大页面,因此使用选项--in-memory禁用 MMAP 到大页面的共享(这应该可以避免大多数问题)。

注:假设

  1. docker 上只能运行一个应用程序
  2. 正如评论中提到的--privileged -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev用于在 docker 中以 sudo 权限运行 DPDk。
  3. 我根据问题假设ulimit -c unlimited也无法执行。
  4. 如果有多个 docker 运行 dpdk 应用程序,则始终使用--file-prefix区分。
  5. 我还没有在 DPDK 21.02、21.05、21.08 上尝试过这个

[EDIT-1] 之前被删除的问题是以非 root 身份运行 DPDK https://stackoverflow.com/questions/64664141/running-dpdk-without-root-permisions/64666019#64666019

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您可以以非 root 用户身份在非特权容器中运行 DPDK 吗? 的相关文章

随机推荐