工具准备: vmware + Ubuntu 16.04 Server 版本
要把DPDK运行起来,需要两块网卡,因此我们需要查看我们的虚拟机是否已经有了两块网卡,如果没有则添加;添加网卡的时候建议把网卡网络连接设置为“桥接模式(B)”。
桥接网卡作为 DPDK运行的网卡。 NAT网卡作为ssh连接的网卡。
.......
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
编辑Ubuntu1604.vmx:
将 ethernet0.virtualDev 由 e1000 修改 vmxnet3,因为 vmware 的 vmxnet3 支持多队
列网卡。
......
sudo vim /etc/network/interfaces
说明:如果使用 ifconfig命令查看网卡信息的时候,显示的不是eth0,而是es33(或者是其他名字),那么我们可以通过修改配置文件把es33改为eth0。
cat /proc/interrupts | grep eth0
如果有看到类似上图内的eth0列表,表示支持多队列网卡。
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
./usertools/dpdk-setup.sh
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 的文件夹
export RTE_SDK=/home/xxx/dpdk-stable-19.08.2
export RTE_TARGET=x86_64-native-linux-gcc
env
选择 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
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
sudo apt-get install pkg-config
作为PA的IOVA模式下,分配到整个DPDK存储区的IOVA地址都是实际的物理地址,而虚拟内存的分配与物理内存的分配相匹配。该模式的一大优点就是它很简单:它适用于所有硬件(也就是说,不需要IOMMU),并且它适用于内核空间(将真实物理地址转换为内核空间地址的开销是微不足道的)。实际上,这就是DPDK长期以来的运作方式,在很多方面它都被认为是默认的选项。
然而,作为PA的IOVA模式也存在一些缺点。其中一个就是它需要根用户特权——如果无法访问系统的页面映射,DPDK就无法获取内存区域的真实物理地址。因此,如果系统中没有root权限,就无法以该模式运行。