系统:虚拟机Ubuntu 18.04
网卡:Intel Corporation 82545EM Gigabit
安装步骤:
1.查看设备网卡,与dpdk官网上的硬件支持做对比,看自己的硬件是否支持dpdk
lspci |grep -i Eth
2.下载dpdk安装包,并解压,在此我用18.02版本。
tar -xvf dpdk-18.02.2.tar.xz
3.进入安装包目录。
cd dpdk-stable-18.02.2/
4.进入usertools文件夹,运行dpdk-setup.sh脚本。
cd usertools/
./dpdk-setup.sh
5.显示如下
------------------------------------------------------------------------------
RTE_SDK exported as /home/zfy/桌面/dpdk-stable-18.02.2
------------------------------------------------------------------------------
----------------------------------------------------------
Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm64-armv8a-linuxapp-clang
[2] arm64-armv8a-linuxapp-gcc
[3] arm64-dpaa2-linuxapp-gcc
[4] arm64-dpaa-linuxapp-gcc
[5] arm64-thunderx-linuxapp-gcc
[6] arm64-xgene1-linuxapp-gcc
[7] arm-armv7a-linuxapp-gcc
[8] i686-native-linuxapp-gcc
[9] i686-native-linuxapp-icc
[10] ppc_64-power8-linuxapp-gcc
[11] x86_64-native-bsdapp-clang
[12] x86_64-native-bsdapp-gcc
[13] x86_64-native-linuxapp-clang
[14] x86_64-native-linuxapp-gcc
[15] x86_64-native-linuxapp-icc
[16] x86_x32-native-linuxapp-gcc
----------------------------------------------------------
Step 2: Setup linuxapp environment
----------------------------------------------------------
[17] Insert IGB UIO module
[18] Insert VFIO module
[19] Insert KNI module
[20] Setup hugepage mappings for non-NUMA systems
[21] Setup hugepage mappings for NUMA systems
[22] Display current Ethernet/Crypto device settings
[23] Bind Ethernet/Crypto device to IGB UIO module
[24] Bind Ethernet/Crypto device to VFIO module
[25] Setup VFIO permissions
----------------------------------------------------------
Step 3: Run test application for linuxapp environment
----------------------------------------------------------
[26] Run test application ($RTE_TARGET/app/test)
[27] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
----------------------------------------------------------
Step 4: Other tools
----------------------------------------------------------
[28] List hugepage info from /proc/meminfo
----------------------------------------------------------
Step 5: Uninstall and system cleanup
----------------------------------------------------------
[29] Unbind devices from IGB UIO or VFIO driver
[30] Remove IGB UIO module
[31] Remove VFIO module
[32] Remove KNI module
[33] Remove hugepage mappings
[34] Exit Script
选择14,提示fatal error
fatal error: numa.h: 没有那个文件或目录 #include
另打开一个窗口,执行下面命令
apt-get install libnuma-dev
执行完上面命令,即安装了numa.h,再次选择14运行。
接着选择17运行
接着选择20,设置hugepage,此处我设置64
继续选择22,查看当前设备,几下if=xxxx这个
从上图可以看到,网卡的状态是active的,打开另外一个窗口,运行以下命令,down了网卡
ifconfig enss22(你的网卡名) down
选择23,进行网卡绑定。
6.测试dpdk。进入目录dpdk-stable-18.02.2/examples/helloworld
首先设置环境变量RTE_SDK和设置目标值RTE_TARGET
export RTE_SDK=/home/zfy/桌面/dpdk-stable-18.02.2
export RTE_TARGET=x86_64-native-linuxapp-gcc
7. make clean & make
make clean & make
8. ./build/helloworld
./build/helloworld
9.为了不必要每次都进行环境变量的设置,可以一次性设定。执行以下命令
vim /etc/profile
在文件末尾增加下面两行内容
export RTE_SDK=/dpdk
export RTE_TARGET=x86_64-native-linuxapp-gcc
注意:RTE_SDK=后面跟你自己的dpdk安装目录。
然后执行下面的命令进行设置
source /etc/profile
10.设置大内存页,设置以后就可以不必每次运行程序的时候都执行setup.sh进行hugepage设置了。
查看cpu是否支持1G大内存页:
cat /proc/cpuinfo | grep pdpe1gb
如果有显示,则支持1G大内存页。
默认支持2M内存页,执行下面命令
cat /proc/cpuinfo |grep pse
如果有显示,则支持2M内存页
执行下面命令,进行hugepage设置
vim /etc/default/grub
找到GRUB_CMDLINE_LINUX=””,在双引号中添加以下内容
default_hugepagesz=1G hugepagesz=1G hugepages=16
再执行
update-grub
vim ~/.bashrc
在打开的文件中添加以下两条命令
mkdir –p /mnt/huge
mount –t hugetlbfs nodev /mnt/huge
重启系统
reboot
11.测试l2fwd
进入/root/dpdk/example/l2fwd下,执行make命令编译l2fwd。 l2fwd命令执行的格式如下:
./build/l2fwd [EAL options] -- -p PORTMASK [-q NQ] -T PERIOD
EAL options:
-c COREMASK: A hexadecimal bitmask of cores to run on
-n NUM : Number of memory channels
-p PORTMASK : A hexadecimal bitmask of the ports to configure
-q NQ: A number of queues (=ports) per lcore (default is 1)
-T PERIOD: statistics will be refreshed each PERIOD seconds (0 to disable, 10 default, 86400 maximum)
本次测试2个万兆口,命令如下:
./build/l2fwd –c 0x0F –n 2 -- -p 0x03 -T 1
参数讲解:
-c 0x0F 指分配4个core给dpdk程序,这个参数是主参数,必须设定; -n 2 指内存通道数
-- 由于程序有主次参数之分,主参数是在指所有实例程序都可以用的参数;次参数,是指每个实例程序自身拥有的参数, -- 之后的为次参数;
-p 0x3 设置dpdk起点的端口数,也是以16进制的源码作为标志位, 0x3是指后两位为1,也就是起点两个端口,0和1为一对;
-T 1 在执行程序的时候,会有一些统计数据打印到屏幕上,这个的 参数是设定多长时间统计一次,显示到屏幕,1秒钟一次;