随着人们对高性能网络的要求,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
本文原作者:周强