[DPDK] Docker容器内安装DPDK

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 gdb 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

在重启机器后,用如下命令重启容器。

$ docker restart dpdk-test

附:

  • 我这里的--net=host让容器使用宿主机网络,因此不需要虚拟化。
  • 对于Mellanox ConnectX-5网卡,可以直接使用默认的mlx5_core驱动,而不用dpdk-devbind.py更换为vfio或者uio。
  • 上面还挂载了大页内存,所以大页内存也直接在宿主机里配置好就可以了,容器内不需要再次配置。
posted @ 2024-08-31 10:31  CQzhangyu  阅读(170)  评论(0编辑  收藏  举报