一、前言

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

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

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

二、DPDK容器编译环境配置

2.1 操作系统和docker engine版本


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 查看系统状态



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

查看配置结果



转载自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

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

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

五、在容器内运行DPDK测试

5.1 运行DPDK helloworld


5.2 运行PMD测试




状态数据




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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐