DPDK 與DPDK-Pktgen 安裝


文本將介紹DPDK與Pktgen的安裝。

安裝包下載

DPDK與DPDK-Pktgen下載

# git clone https://dpdk.org/git/dpdk
# git clone http://dpdk.org/git/apps/pktgen-dpdk

安裝DPDK

首先安裝DPDK的必備庫。

#!/bin/sh

yum update -y --allowerasing --skip-broken --nobest
yum install -y gcc-toolset-9
yum install -y zlib-devel
yum install -y libnl3-devel
yum install -y boost-devel
yum install -y systemd-devel
yum install -y yasm
yum install -y lz4-devel
yum install -y elfutils-libelf-devel
yum install -y openssl-devel
yum install -y numactl-devel
yum install -y python3
pip3 install mwcp # python3需要安裝 mwcp , 才可以繼續安裝meson build, 
pip3 install meson # Build DPDK和DPDK-pktgen的工具
pip3 install ninja # 安裝DPDK和DPDK-pktgen的工具

meson 如果安裝不上去,

設置大頁內存

設置大頁內存有兩種方式,通過掛載或者通過修改grub。

掛載的方式如下:

echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs pagesize=1GB/mnt/huge
# modprobe vfio
# modprobe vfio_pci
# modprobe uio_pci_generic
# modprobe vfio enable_unsafe_noiommu_mode=1
# echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode

修改grub的方式如下:進入/etc/default/grub,把 default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt 添加到GRUB_CMDLINE_LINUX:

# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

重新載入grub並重啟:

grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

通過grep Huge /proc/meminfo檢查是否設置成功:

AnonHugePages:    149504 kB
ShmemHugePages:        0 kB
HugePages_Total:     100
HugePages_Free:      100
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB
Hugetlb:        104857600 kB

有時候會出現這個錯誤:

[root@localhost grub2]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
/usr/bin/grub2-editenv: error: environment block too small.
[root@localhost grub2]# ls
grub.cfg  grub.cfg.new  grub.cfg.old  grubenv

這一般是grubenv文件配置導致的,該文件是environment block, 環境鎖,在該文件中將default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt添加到kernelopts中(與grub.cfg一致)。

# GRUB Environment Block
#saved_entry=4df9ab5a7ada4793a22d0d4668f7e914-4.18.0-193.el8.x86_64
#saved_entry=1
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet default_hugepagesz=1GB hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt
boot_success=0

設置大頁內存,可以參考:

Setup Hugepages

Setup HugePages 2

安裝Pktgen

Pktgen安裝必須要有的庫有:

libpcap # 數據包捕獲函數庫
meson
ninja
pkg-config # 指向頭文件和庫文件的工具,給編譯器使用,類似快捷方式

進入pktgen源文件目錄進行安裝:

cd pktgen-dpdk
meson build # meson編譯時容易報錯
ninja 
ninja install

在執行meson build時,可能會出現以下問題:

Found pkg-config: /usr/bin/pkg-config (1.4.2)
Found CMake: /usr/bin/cmake (3.18.2)
Run-time dependency libdpdk found: NO (tried pkgconfig and cmake)

meson.build:62:0: ERROR: Dependency "libdpdk" not found, tried pkgconfig and cmake

顯示沒有找到dpdk相關的庫,原因在於dpdk編譯時生成的庫並沒有放入/usr/lib與/lib中。dpdk相關的庫數量非常多,如果直接拖動到這兩個文件夾中,不方便管理。因此可以采用ld.so的方式進行類似"快捷方式"的連接,dpdk的庫不需要移動位置就可以被其他的程序調用。

解決方法如下:

先將已安裝的dpdk全部刪除干凈,目的是重新安裝DPDK且其lib有一個固定的位置。
如果是只刪除原來用meson和ninja安裝的DPDK, 直接執行:

ninja uninstall 

再刪除創建的dpdk-xxx/build文件夾。

但是有可能機器里安裝了DPDK在其他位置。

find /usr/ -type d -name "dpdk" -exec rm -rf {} #在/usr/下尋找所有帶有"dpdk"字符的目錄 並且刪除所有結果
find /lib/ -type d -name "dpdk" -exec rm -rf {} 
find /lib64/ -type f -name "librte" -exec rm -rf {} #在/lib64/下尋找帶有"librte"字符的文件,並且刪除所有結果
find /usr/ -type f -name "librte" -exec rm -rf {}
find /lib/ -type f -name "librte" -exec rm -rf {}

執行完再重新安裝DPDK,一般安裝完之后的庫在/lib64/下(如果在其他的地方也沒有問題,仍然使用ldconfig 進行配置)。安裝過程上文已寫出。關鍵在於安裝完畢之后配置libdpdk的路徑。新版的DPDK安裝完之后並沒有名叫“libdpdk”的包,而是各種分為了許許多多名字不一的包,可以在dpdk-xxx/build/lib中看到,需要將該目錄中的所有庫文件被ld.so指向。

配置ldconfig文件:

# vim /etc/ld.so.conf.d/pktgen.conf
# 在該配置文件中加入需要指向的庫文件目錄

/usr/local/lib64
/dpdk-20.11/build/lib

在命令行模式下執行export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfigldconfig,之后就可以順利編譯pktgen了:

# cd dpdk-pktgen
yum install -y libpcap-devel
meson  -Denable_kmods=true -Dexamples=all build
ninja
ninja install


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM