Docker安装DPDK
参考:容器安装DPDK。
确认版本兼容性
我使用的是Mellanox-5网卡。为了确认支持的DPDK版本,请先确认自己的OFED和frimware版本。
查看firmware版本:
$ ibstat
CA 'mlx5_0'
CA type: MT4119
Firmware version: 16.35.3006
查看OFED版本:
$ ofed_info -s
MLNX_OFED_LINUX-5.8-3.0.7.0:
注意:在安装MLNX_OFED时,需要加入dpdk的相关选项。
然后去官网查找DPDK兼容的OFED和firmware版本。6. DPDK Release 22.11 — Data Plane Development Kit 24.07.0 documentation。比如22.11支持如下版本:
MLNX_OFED 5.8-1.0.1.1 and above
Firmware version: 16.35.1012 and above
看来没问题,于是我们选择22.11.6(LTS)下载安装。
编写Dockerfile
新建一个目录,里面包含如下文件:
.
├── cmake-3.30.1-linux-x86_64.tar.gz
├── Dockerfile
├── dpdk-22.11.6.tar.xz
└── sources.list
- 从官网下载的cmake可执行文件,这是因为apt安装的cmake版本比较低。
- 官网下载的dpdk源码。
source.list
,用于更换apt源,内容如下。
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
- Dockerfile内容如下:
FROM dockerproxy.cn/library/ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
COPY cmake-3.30.1-linux-x86_64.tar.gz /root
COPY dpdk-22.11.6.tar.xz /root
COPY sources.list /root
RUN cd /root \
&& cat sources.list > /etc/apt/sources.list \
&& apt update \
&& apt install build-essential python3 python3-pip libnuma-dev net-tools pciutils inetutils-ping iproute2 linux-headers-5.15.0-69-generic pkg-config libibverbs-dev librdmacm-dev -y \
&& pip3 install meson ninja pyelftools \
&& tar xvf cmake-3.30.1-linux-x86_64.tar.gz \
&& ln -s /root/cmake-3.30.1-linux-x86_64/bin/cmake /usr/bin/cmake \
&& tar -xvf dpdk-22.11.6.tar.xz \
&& cd dpdk-stable-22.11.6/ \
&& meson build \
&& cd build \
&& ninja \
&& meson install \
&& ldconfig
CMD ["/bin/bash"]
其中,dockerproxy.cn
是国内的镜像源。ENV DEBIAN_FRONTEND=noninteractive
是因为pkt-config
在安装的时候默认要配置时区,这行代码可以把该步骤省略掉。
编译Dockerfile。
$ docker build -t dpdk:22.11.6 .
运行容器。运行时要挂载一些目录(其中/home/zcq
是我自己的目录,根据需求替换掉即可)。
$ docker run -itd --privileged --net=host -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 -v /var/run:/var/run -v /lib/modules:/lib/modules -v /home/zcq:/home/zcq -w /home/zcq --name dpdk-test dpdk:22.11.6 bash
$ docker exec -it dpdk-test bash
进入容器后,可用如下命令确认dpdk版本。
$ pkg-config --modversion libdpdk
22.11.6
附:
- 我这里的
--net=host
让容器使用宿主机网络,因此不需要虚拟化。 - 对于Mellanox ConnectX-5网卡,可以直接使用默认的mlx5_core驱动,而不用
dpdk-devbind.py
更换为vfio或者uio。 - 上面还挂载了大页内存,所以大页内存也直接在宿主机里配置好就可以了,容器内不需要再次配置。