dpdk编译环境的搭建及相关问题

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编译器编译)

在ubuntu下解压后的正常结果

option:43(插入IGB_UIO模块)

option43

option:44(插入VFIO模块)

option44

option:45(设置KNI模块)

option45

option:46(设置巨页,可以为512)

option46

option:47(设置巨页,可以为512)

option47

option:49(绑定网卡到IGB_UIO模块)(先提前down掉需要被绑定的网卡,如ifconfig ens160 down

option49

option:60(退出)

接着进行测试,进入目录/dpdk-stable-19.08.2/examples/helloworld,执行make命令,然后进入build文件夹,执行helloworld文件,得到如下结果:

helloworld测试用例

说明dpdk环境搭建成功!!!

常见问题

要在linux下解压dpdk,不要使用在windows下解压的文件

使用在windows下解压的文件,使用option39编译时会出现以下问题:

在windows下解压后的问题

使用在linux下解压的文件就正常通过编译:

在ubuntu下解压后的正常结果

运行helloworld测试用例时报错

helloworld测试用例(权限不够)

这说明权限不够,使用sudo ./helloworld即可:

helloworld测试用例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值