使用docker容器共享主机上可用的PCIe虚拟功能

使用docker容器共享主机上可用的PCIe虚拟功能,docker,containers,atomic,Docker,Containers,Atomic,我的主机正在SRIOV模式下运行,并且有多个物理设备出现在PCIe总线上。每个物理函数都有32个虚拟函数的集合。我想与docker容器共享一个虚拟函数。这些是加密/压缩加速器,我为此编写了一个驱动程序;因此,当我处理启动虚拟机的裸机或SRIOV虚拟机监控程序时,我熟悉SRIOV。但是现在我试图访问docker容器中的虚拟函数 在主机上,我可以使用lspci并查看我的物理和虚拟设备。但是当我启动一个容器时,我从容器中看到的只是物理功能 我已经看到了“docker run”的“-device”参数,

我的主机正在SRIOV模式下运行,并且有多个物理设备出现在PCIe总线上。每个物理函数都有32个虚拟函数的集合。我想与docker容器共享一个虚拟函数。这些是加密/压缩加速器,我为此编写了一个驱动程序;因此,当我处理启动虚拟机的裸机或SRIOV虚拟机监控程序时,我熟悉SRIOV。但是现在我试图访问docker容器中的虚拟函数

在主机上,我可以使用lspci并查看我的物理和虚拟设备。但是当我启动一个容器时,我从容器中看到的只是物理功能

我已经看到了“docker run”的“-device”参数,但我认为它不适用于将虚拟函数传递给容器

从逻辑上讲,我在主机上看到:

[localhost] config # lspci | grep "^85" | head -4
85:00.0 Co-processor: Intel Corporation DH895XCC Series QAT
85:01.0 Co-processor: Intel Corporation DH895XCC Series QAT Virtual Function
85:01.1 Co-processor: Intel Corporation DH895XCC Series QAT Virtual Function
85:01.2 Co-processor: Intel Corporation DH895XCC Series QAT Virtual Function
[localhost] config # lspci | grep "^85" | wc
     33     295    2524
因此,我们在85:00.0时有1个物理函数和32个虚拟函数

但是,当我启动容器并从容器内部进行相同的检查时,我看到的是以下内容:

[localhost] config # lspci | grep QAT
04:00.0 Co-processor: Intel Corporation DH895XCC Series QAT
05:00.0 Co-processor: Intel Corporation DH895XCC Series QAT
85:00.0 Co-processor: Intel Corporation DH895XCC Series QAT
有人告诉我,这是可以实现的:我可以向容器中发送虚拟内容,我的驱动程序可以完成其余的工作


我的问题:如何将虚拟函数从主机传递到容器中?

如注释中所述(但带有标志名):


然后再次从容器内部尝试lspci。

Docker允许您更改给定容器的可用功能。这是一些简单的cgroup安全措施的一部分,以防止将太多主机系统暴露给容器。您可能需要的是
--cap add
,其中包含来自的某些属性。当然,如果您不太关心安全方面的考虑(小心,这里是龙),那么您可以始终使用
--privileged
运行。
docker run -it --rm --cap-add=SYS_RAWIO ...