[DPDK] Docker容器內安裝DPDK

CQzhangyu發表於2024-08-31

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。
  • 上面還掛載了大頁記憶體,所以大頁記憶體也直接在宿主機裡配置好就可以了,容器內不需要再次配置。

相關文章