[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。 - 上面還掛載了大頁內存,所以大頁內存也直接在宿主機里配置好就可以了,容器內不需要再次配置。
| 歡迎來原網站坐坐! >原文鏈接<

浙公網安備 33010602011771號