DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)

一、前言

在当前云计算的发展趋势中,容器以其特殊的优势,成文云计算平台中非常重要的一个分支,所以DPDK开发社区也在对容器的支持方面有大量的投入。比如DPDK summit上面的这个演讲《Dataplane Networking journey in Containers》就对不同容器应用环境中DPDK解决方案进行了探讨。

本文将就如何在容器中编译和运行DPDK进行展示。

转载自https://blog.csdn.net/cloudvtech

二、DPDK容器编译环境配置

2.1 操作系统和docker engine版本

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第1张图片

2.2 基础镜像

docker pull centos:7.2.1511

2.3 运行docker容器

docker run -it --privileged -v /sys/bus/pci/drivers:/sys/bus/pci/drivers -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev  -v /root/container-dpdk/yum.repos.d:/etc/yum.repos.d/ centos:7.2.1511  bash

将DPDK所需要的宿主机资源挂载进去

2.4 在容器内安装软件包

yum makecache
yum install -y make gcc gcc-c++  kernel-devel kernel-headers kernel.x86_64 net-tools
yum install -y numactl-devel.x86_64 numactl-libs.x86_64
yum install -y libpcap.x86_64 libpcap-devel.x86_64
yum install -y pciutils wget xz htop

2.5 查看系统状态

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第2张图片

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第3张图片

2.6 配置大页内存

echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
chmod 777 /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
mount
cat /proc/meminfo | grep Huge
ls /sys/kernel/mm/hugepages -l

查看配置结果

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第4张图片


转载自https://blog.csdn.net/cloudvtech

三、在容器内编译DPDK

3.1 下载和patch

patch的内容可以参见https://www.cnblogs.com/zzqcn/p/4024205.html

wget http://fast.dpdk.org/rel/dpdk-17.08.1.tar.xz
xz -d dpdk-17.08.1.tar.xz 
tar -xvf dpdk-17.08.1.tar 
mv dpdk-stable-17.08.1 /root
cd dpdk-stable-17.08.1/
patch file lib/librte_eal/linuxapp/igb_uio/igb_uio.c

3.2 编译DPDK

export RTE_SDK=/root/dpdk-stable-17.08.1
export RTE_TARGET=x86_64-native-linuxapp-gcc
make config T=x86_64-native-linuxapp-gcc
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config
make

cd $RTE_SDK
make install T=x86_64-native-linuxapp-gcc

make -C examples RTE_SDK=$(pwd) RTE_TARGET=build O=$(pwd)/build/examples

转载自https://blog.csdn.net/cloudvtech

四、宿主机设置DPDK运行环境

4.1 在宿主机上加载内核模块

lsmod  | grep uio
modprobe uio_pci_generic
modprobe uio
modprobe vfio-pci
insmod build/kmod/igb_uio.ko 
lsmod  | grep uio
DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第5张图片

4.2 在宿主机上绑定网卡

ifconfig eno33554960 down 
ifconfig eno50332184 down
./usertools/dpdk-devbind.py --bind=igb_uio  02:02.0 
./usertools/dpdk-devbind.py --bind=igb_uio  02:03.0
usertools/dpdk-devbind.py --status
DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第6张图片

转载自https://blog.csdn.net/cloudvtech

五、在容器内运行DPDK测试

5.1 运行DPDK helloworld

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第7张图片

5.2 运行PMD测试

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第8张图片

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第9张图片

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第10张图片

状态数据

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第11张图片

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第12张图片

DPDK系列之四:在docker容器(CentOS 7.2.1511)中编译和运行DPDK(17.08.1)_第13张图片

转载自https://blog.csdn.net/cloudvtech

你可能感兴趣的:(容器,docker,DPDK,DPDK系列)