在滴滴雲DC2伺服器上搭建DPDK應用例項
隨著人們對高效能網路的要求,DPDK的應用也越來越廣,很多同學希望通過執行簡單的DPDK例項來進行學習實踐。但購買一臺物理機價格不菲,同時也不能在不用時釋放,而滴滴雲DC2伺服器例項可以根據實際使用需求來滿足要求。本文介紹瞭如何基於滴滴雲的DC2例項,來搭建DPDK的應用例項。
建立DC2
相關購買和建立流程可以檢視滴滴雲官網幫助文件,這裡不再做過多介紹,直接進入主題。
下載DPDK
本文以dpdk17.11.4版本為例
下載dpdk:wget https://fast.dpdk.org/rel/dpdk-17.11.4.tar.xz
解壓:tar xvJf dpdk-17.11.4.tar.xz
編譯DPDK
-
進入DPDK目錄
執行:cd dpdk-stable-17.11.4
-
匯入環境變數
執行:export RTE_SDK=`pwd`執行:
export RTE_TARGET=x86_64-native-linuxapp-gcc
-
編譯安裝DPDK
執行:make install T=x86_64-native-linuxapp-gcc
- 編譯錯誤1
報錯:
make: *** /lib/modules/3.10.0-693.21.1.el7.x86_64/build: No such file or directory. Stop.
處理:需要修改核心編譯目錄
執行:
cd /lib/modules/3.10.0-693.21.1.el7.x86_64/
執行:
rm build
執行:
ln -s /usr/src/kernels/3.10.0-693.21.1.el7.x86_64.debug build
- 編譯錯誤2
報錯:
/home/dc2-user/dpdk-stable-17.11.4/lib/librte_eal/linuxapp/eal/eal_memory.c:56:18: fatal error: numa.h: No such file or directory #include <numa.h>
處理
執行:
yum install numactl-devel
安裝DPDK
- 配置大頁記憶體
執行:
echo 64 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
分配64頁2M的大頁
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
檢視配置結果: cat /proc/meminfo
會顯示對應的大頁分配了64頁
- 安裝igb_uio驅動
執行:
modprobe uio
insmod x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
錯誤
insmod: ERROR: could not insert module x86_64-native-linuxapp-gcc/kmod/igb_uio.ko: Invalid module format
處理
執行:yum install kernel-devel
更新對應核心版本
執行:cd /lib/modules/3.10.0-693.21.1.el7.x86_64/
進入到目錄
執行:rm build
刪除原有軟連線
執行:ln -s /usr/src/kernels/3.10.0-693.21.1.el7.x86_64 build
建立新的軟連線
再次重新編譯安裝DPDK即可
-
繫結網絡卡
因為只有一塊網絡卡,需要先Down掉網絡卡,導致SSH連線失敗,所以需要先從控制平臺遠端連線過去(該步驟詳情可檢視滴滴雲幫助文件)。然後執行如下步驟 :執行:
ifconfig eth0 down
Down掉介面執行:
./usertools/dpdk-devbind.py --status
檢視對應的PCI資訊執行:
./usertools/dpdk-devbind.py -b igb_uio 0000:00:03.0
繫結網絡卡
執行hello world例項
-
編譯hello world例項
執行:export RTE_SDK=`pwd`
執行:
export RTE_TARGET=x86_64-native-linuxapp-gcc
執行:
cd example/helloworld
執行:
make
-
執行hello world例項
執行:
./build/helloword
顯示:(執行成功)
hello from core 0
本文原作者:周強