基于 openEuler 22.03 LTS SP1 構建 DPDK 22.11.8 開發環境指南
本文詳細介紹了在 openEuler 22.03 LTS SP1 操作系統上構建 DPDK 22.11.8 開發環境的完整流程。DPDK 20 版本之后采用 meson+ninja 的編譯方式,與早期版本有所不同。本文內容也可作為其他 Linux 發行版構建 DPDK 環境的參考。
環境準備
安裝編譯依賴包
VERSION=$(uname -r)
sudo yum install -y gcc gcc-c++ make numactl-devel git tar kernel-devel-$VERSION
安裝 Meson 構建工具
sudo pip3 install meson
安裝 Pyelftools
sudo pip3 install pyelftools
安裝 re2c
wget https://github.com/skvadrik/re2c/releases/download/1.0.3/re2c-1.0.3.tar.gz
tar -zxvf re2c-1.0.3.tar.gz
cd re2c-1.0.3/
./configure
make && sudo make install
cd ..
安裝 Ninja 構建系統
wget https://github.com/ninja-build/ninja/archive/refs/tags/v1.11.0.tar.gz
tar -zxvf ninja-1.11.0.tar.gz
cd ninja-1.11.0/
python3 configure.py --bootstrap
sudo cp ninja /usr/bin/
cd ..
注意:如果系統沒有
python
命令,只有python3
,請使用python3 configure.py --bootstrap
。
DPDK 安裝與配置
下載并解壓 DPDK
wget http://fast.dpdk.org/rel/dpdk-22.11.8.tar.xz
tar -xvf dpdk-22.11.8.tar.xz
cd dpdk-stable-22.11.8
編譯安裝 DPDK
meson setup build
cd build
ninja
sudo ninja install # 默認安裝到 /usr/local/lib64
sudo ldconfig
可選:如需指定安裝目錄,可在 meson 步驟中添加
--prefix=/your/custom/path
參數。
環境變量配置
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
建議:將上述環境變量添加到
/etc/profile
文件中以實現永久生效。
驅動配置
加載vfio驅動
modprobe vfio enable_unsafe_noiommu_mode=1 # 在iommu不可用時,以非安全模式加載vfio
modprobe vfio-pci
lsmod|grep vfio # 檢查是否成功
有關非安全模式加載vfio,也通過如下的方式修改:
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
關于vfio模塊的加載,可以設置為開機自動加載,這樣就不用每次手動加載了,具體方式如下:
# 配置 VFIO 內核模塊的加載參數
sudo tee /etc/modprobe.d/vfio.conf <<EOF
options vfio enable_unsafe_noiommu_mode=1
options vfio-pci disable_vga=1
EOF#系統啟動時自動加載 vfio 內核模塊。
echo "vfio" | sudo tee /etc/modules-load.d/vfio.conf
echo "vfio-pci" | sudo tee -a /etc/modules-load.d/vfio.conf
編譯并加載igb_uio驅動
在dpdk22版本中,igb_uio不再被包含在dpdk源代碼包中,如果需要則要額外編譯安裝。具體如下:
#下載
git clone http://dpdk.org/git/dpdk-kmods#編譯
cd dpdk-kmods/linux/igb_uio
make#加載
modprobe uio
insmod igb_uio.ko intr_mode=legacy
depmod -a
同樣的,igb_uio 也可以實現開機加載:
# 需要將編譯出.ko 文件拷貝至如下的目錄
cp dpdk-kmods/linux/igb_uioigb_uio.ko /lib/modules/$(uname -r)/kernel/drivers/uio/echo "options igb_uio intr_mode=legacy" | sudo tee /etc/modprobe.d/igb_uio.conf
echo "igb_uio" | sudo tee /etc/modules-load.d/igb_uio.conf
系統配置
配置大頁
cd dpdk-stable-22.11.8
python3 ./usertools/dpdk-hugepages.py -p 2M --setup 1G
綁定網卡到 VFIO 驅動
python3 ./usertools/dpdk-devbind.py --bind=vfio-pci 0000:02:01.0
測試驗證
編譯并運行 helloworld 示例
有兩種編譯方式,默認是共享庫版本,還有一種靜態庫版本。
共享庫:
cd helloworld
make
./build/helloworld
靜態庫版本
cd helloworld
make static
./build/helloworld
運行結果:
出現上述的結果,說明成功了。
總結
本文提供了在 openEuler 22.03 LTS SP1 上構建 DPDK 22.11.8 開發環境的完整指南,包括依賴安裝、DPDK 編譯、驅動配置和測試驗證等步驟。按照本指南操作后,您將獲得一個完整的 DPDK 開發環境,可用于后續的 DPDK 應用開發。
如果您咋配置過程中遇到了問題,歡迎評論區交流。謝謝!