VMWare虚拟机搭建DPDK环境

15 篇文章 1 订阅
7 篇文章 1 订阅

工具准备: vmware + Ubuntu 16.04 Server 版本
 

 

1.1 vmware配置

要把DPDK运行起来,需要两块网卡,因此我们需要查看我们的虚拟机是否已经有了两块网卡,如果没有则添加;添加网卡的时候建议把网卡网络连接设置为“桥接模式(B)”。

桥接网卡作为 DPDK运行的网卡。 NAT网卡作为ssh连接的网卡。

1.2 安装虚拟机

.......

1.3 修改 ubuntu 系统的启动参数

sudo vim /etc/default/grub

在 GRUB_CMDLINE_LINUX参数,添加 net.ifnames=0 biosdevname=0,使得网卡名称从0开始命名

net.ifnames=0 biosdevname=0 default_hugepagesz=1G hugepagesz=2M hugepages=1024
 sudo update-grub

1.4 关闭虚拟机并设置修改网卡配置信息

编辑Ubuntu1604.vmx:

 将 ethernet0.virtualDev 由 e1000 修改 vmxnet3,因为 vmware 的 vmxnet3 支持多队
列网卡。

1.5 启动虚拟机

......







1.6 修改网卡配置信息

sudo vim /etc/network/interfaces

 说明:如果使用 ifconfig命令查看网卡信息的时候,显示的不是eth0,而是es33(或者是其他名字),那么我们可以通过修改配置文件把es33改为eth0。

1.7 查看系统是否支持多队列网卡

cat /proc/interrupts | grep eth0

 如果有看到类似上图内的eth0列表,表示支持多队列网卡。

2.编译 DPDK

2.1下载 dpdk

https://core.dpdk.org/download/

 随便挑选版本,不同版本直接子系统接口会有差异,建议选择 dpdk 19.08.2

cp /mnt/hgfs/sharefolder/dpdk-19.08.2.tar.xz ~/
tar -Jxf dpdk-19.08.2.tar.xz 

2.2编译 DPDK

./usertools/dpdk-setup.sh 

64 位系统选择 39.

sudo apt install gcc automake autoconf libtool make
./usertools/dpdk-setup.sh 

sudo apt install libnuma-dev

./usertools/dpdk-setup.sh 

编译完,说编译成功,但是“Installation cannot run with T defined and DESTDIR undefined”,提示你没有指定安装路径,这里我们只需要编译,本来也不需要安装,所以忽略,不影响使用。 

编译完会多出 x86_64-native-linux-gcc 的文件夹
 

3.设置 DPDK 的环境变量

export RTE_SDK=/home/xxx/dpdk-stable-19.08.2
export RTE_TARGET=x86_64-native-linux-gcc

查看环境变量

env

4.执行 testpmd

 

选择 43 插入 IGB_UIO 模块, 选择网卡为 vmxnet3 会加载此模块
选择 44 插入 VFIO 模块,选择网卡为 e1000 会加载此模块
选择 45 插入 KNI 模块

选择 49 绑定 igb_uio 模块, 也可以退出,通过命令来执行。

ifconfig eth0 down
/usertools/dpdk-devbind.py --bind=igb_uio eth0

sudo ifconfig eth0 down

选择 46 和 47 设置为512

 

选择 53 运行 testpmd
 

sudo cat /proc/meminfo | grep Huge

sudo cat /proc/meminfo 

当不预留hugepage时,默认Hugepagesize为2048KB。

   

 当配置  default_hugepagesz=1G hugepagesz=1G hugepages=1时,

配置为下面:(1G *1 + 2M * 1024)=3G

default_hugepagesz=1G hugepagesz=1G hugepages=1 hugepagesz=2M hugepages=1024

 

因此,将虚拟机内存改为6G

并且设置grub 

default_hugepagesz=1G hugepagesz=1G hugepages=1 hugepagesz=2M hugepages=1024

cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages 
cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/free_hugepages 
cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages 
cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/free_hugepages 
cat /sys/devices/system/cpu/cpu0/node0/hugepages/hugepages-2048kB/nr_hugepages 
cat /sys/devices/system/cpu/cpu1/node0/hugepages/hugepages-2048kB/nr_hugepages 

 

选择 46 和47 设置为512

1024 hugepages of size 2097152 reserved, but no mounted hugetlbfs found for that size 说明2M的hugepage未mount

testpmd: No probed ethernet devices 说明未绑定Ethernet device

选择 43-45 设置,然后down eth0,选择49进行绑定

 bitmask 请选择 3, bit:11

 

 

 5.编译 DPDK 程序

sudo apt-get install pkg-config

作为物理地址(PA)的IOVA模式

作为PA的IOVA模式下,分配到整个DPDK存储区的IOVA地址都是实际的物理地址,而虚拟内存的分配与物理内存的分配相匹配。该模式的一大优点就是它很简单:它适用于所有硬件(也就是说,不需要IOMMU),并且它适用于内核空间(将真实物理地址转换为内核空间地址的开销是微不足道的)。实际上,这就是DPDK长期以来的运作方式,在很多方面它都被认为是默认的选项。

然而,作为PA的IOVA模式也存在一些缺点。其中一个就是它需要根用户特权——如果无法访问系统的页面映射,DPDK就无法获取内存区域的真实物理地址。因此,如果系统中没有root权限,就无法以该模式运行。

 

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值