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