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

本文原作者:周强

猜你喜欢

转载自blog.csdn.net/java060515/article/details/83620425
DC2