安裝dpdk有兩種方式:第一種命令;第二種使用dpdk-setup.sh。本文講解通過dpdk-setup.sh來安裝。
1.下載dpdk
進入dpdk官網,下載想要的版本:http://core.dpdk.org/download/
2.安裝依賴的庫
yum install -y kernel-devel kernel-headers
yum install kernel.x86_64 -y
根據編譯安裝dpdk時候的提示是否還有其他需要安裝的依賴庫,在此就不一一列舉了。
3.環境配置
1. export RTE_SDK='pwd' (pwd爲你dkdk的解壓目錄,比如/home/dpdk-19.08)
2. export RTE_TARGET=x86_64-native-linuxapp-gcc
4.開始安裝
cd /home/dpdk-19.08/usertools
./dpdk-setup.sh
第一步選擇: 36,配置編譯的環境。
第二步選擇 43,選擇硬件支持的模式
在選擇43的時候出現如下錯誤
經過查詢,是內核版本和dpdk的模塊版本不一致導致的問題。
查看ls /usr/src/kernels/發現只有 3.10.0-957.27.2.el7.x86_64;而我通過uname -r查看我的版本卻是:3.10.0-123.el7.x86_64。
通過rpm命令查看我所安裝的內核版本:
通過rpm -e kernel-3.10.0-123.el7.x86_64 卸載掉第二個kernel,然後重啓系統再用uname -r查看內核版本就變成了kernel-3.10.0-957.27.2.el7.x86_64。
再從頭開始執行安裝步驟。
1.export RTE_SDK='/home/dpdk-19.08'
2.export RTE_TARGET=x86_64-native-linuxapp-gcc
3../dpdk-setup.sh
第三步選擇 47,設置大頁內存,然後提示輸入1024
設置大頁內存太小會導致運行helloworld這個例子報錯,所以先設置1024。
第四部選擇49,綁定網卡
選擇49的時候綁定網卡,需要先停掉需要綁定的網卡 。
我在虛擬機上開了四個網卡,打算停掉後面的ens38和ens39,執行如下命令:
ifconfig ens38 down
ifconfig ens39 down
然後在運行腳本來選擇49:
我機器如圖顯示 ,直接輸入02:06.0和02:07.0對應的就是ens38和ens39的網卡(前面4個0不需要輸入)。
到此,環境已經搭建好了。
5測試dpdk
- 1.配置環境,如果上面搭建的時候配置了,就不需要再配置了:
export RTE_SDK='/home/dpdk-19.08/'
export RTE_TARGET=x86_64-native-linuxapp-gcc
- 2.編譯代碼
cd /home/dpdk-19.08/examples/helloworld
make
- 3.運行可執行文件
./build/helloworld
我的機器輸出如上,雖然正確輸出了hello from core# 但是上一句提示了錯誤:
EAL: Error reading from file descriptor 27: Input/output error
經瞭解是在虛擬機添加的網卡,dpdk不支持導致的。需要修改一行代碼,跳過dpdk pci 檢查:
找到
pci_intx_mask_supported(dev)
這行代碼,然後修改爲
pci_intx_mask_supported(dev)||true
再重新執行./dpdk-setup.sh重新編譯。
再來運行./build/helloworld
這次就不會有報錯了。