dpdk编译环境搭建
前提知识
虚拟机的三种网络连接模式
桥接(briged)模式
在这种模式下,虚拟机的网络适配器(即网卡)就像是直接连接到物理网络中的一台独立主机一样。虚拟机可以获得与物理主机在同一个网段的独立 IP 地址,并且能够直接与物理网络中的其他设备(如其他物理主机、路由器等)进行通信。
仅主机(host-only)模式
在这种模式下,虚拟机只能与物理主机进行通信,无法直接访问外部物理网络中的其他设备。虚拟机和物理主机组成一个独立的私有网络,虚拟机通过物理主机作为代理来访问外部网络。
NAT模式
在这种模式下,虚拟机通过物理主机的网络连接来访问外部网络。虚拟机有自己独立的私有 IP 地址,当虚拟机向外部网络发送数据包时,数据包的源 IP 地址会被虚拟机软件通过网络地址转换(NAT)技术转换为物理主机的 IP 地址,外部网络返回的数据包也会通过物理主机进行地址转换后再发送给虚拟机。
下载dpdk
下载地址:https://core.dpdk.org/download/
不同版本的子系统接口会有差异,建议下载DPDK 19.08.2。
下载并安装ubuntu(这里以ubuntu-desktop-180406做示范)
建议不要选择太新的版本!
下载地址(建议使用镜像源):https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/18.04.6/ubuntu-18.04.6-desktop-amd64.iso
添加网络适配器,使用桥接模式的作为DPDK运行的网卡,使用NAT模式的作为ssh连接的网卡。
修改虚拟机安装目录下的xxx.vmx
文件:
将
ethernet0.virtualDev = "e1000"
改为
ethernet0.virtualDev = "vmxnet3"
ethernet0.wakeOnPcktRcv = "TRUE"
若是新安装的虚拟机环境,需要安装一些必要工具:
sudo apt-get install net-tools //保证能连公网
sudo apt-get install ssh //连接Xshell
sudo apt-get install gcc g++ make cmake //C/C++的编译
sudo apt-get install vim //文档编辑器
查看网卡是否为多队列网卡:
cat /proc/interrupts | grep <网卡名> # 比如我这里是ens160,使用命令后会出现多行结果
修改ubuntu的启动参数:
sudo vim /etc/default/grub
在GRUB_CMDLINE_LINUX
那一行添加如下内容:
GRUB_CMDLINE_LINUX="default_hugepages=1G hugepagesz=2M hugepages=1024 isolcpus=0-2"
然后重启。
搭配DPDK环境
添加环境变量,在~/.bashrc
最后面添加以下两句命令,这样每次开启终端都会设置export:
export RTE_SDK=/home/coder_in/dpdk-stable-19.08.2 //将路径修改为dpdk文件夹的路径
export RTE_TARGET=x86_64-native-linux-gcc
安装一些依赖库和工具包:
# 依赖库
sudo apt-get install numactl
sudo apt-get install libnuma-dev
# 工具包
sudo apt-get install pkg-config //一个在 Linux 系统中用于查询已安装库的编译和链接参数的实用程序,编译文件时会用到
sudo apt-get install python //python2解释器,后续会用到
先把网卡ens160(多队列网卡)down掉:ifconfig ens160 down
。
解压dpdk源码:
tar -xvf dpdk-19.08.2.tar.xz
接着进入解压后的dpdk源码文件夹,执行脚本文件:./usertools/dpdk-setup.sh
。若没有执行权限,则使用chmod u+x *.sh
为当前目录下的所有脚本文件添加执行权限。
接着依次选择以下选项:
option:39(选择x86_64-native-linux-gcc编译器编译)
option:43(插入IGB_UIO模块)
option:44(插入VFIO模块)
option:45(设置KNI模块)
option:46(设置巨页,可以为512)
option:47(设置巨页,可以为512)
option:49(绑定网卡到IGB_UIO模块)(先提前down掉需要被绑定的网卡,如ifconfig ens160 down
)
option:60(退出)
接着进行测试,进入目录/dpdk-stable-19.08.2/examples/helloworld
,执行make
命令,然后进入build
文件夹,执行helloworld文件,得到如下结果:
说明dpdk环境搭建成功!!!
常见问题
要在linux下解压dpdk,不要使用在windows下解压的文件
使用在windows下解压的文件,使用option39编译时会出现以下问题:
使用在linux下解压的文件就正常通过编译:
运行helloworld测试用例时报错
这说明权限不够,使用sudo ./helloworld
即可: