1. 程式人生 > >在滴滴雲DC2伺服器上搭建DPDK應用例項

在滴滴雲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>

    處理

    :需要安裝numactl-devel

    執行: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

本文原作者:周強