背景:
因工作需要, 经常用到dpdk, 所以在自己电脑上运行dpdk。
搭建环境时, 遇到了如题的问题。
问题步骤:
1. VMware 创建ubuntu 16 虚拟机。 4G内存,4个cpu。3个网卡。
2.将dpdk 源码:19.08.2 上传到虚拟机。
设置环境 变量:
export RTE_SDK=/home/zyb/share/dpdk/dpdk-stable-19.08.2
export RTE_TARGET=x86_64-native-linux-gcc ①
3.执行dpdk-setup.sh , 选择:[39]x86_64-native-linux-gcc
这一步是build dpdk 源码。 build好后, 在dpdk/dpdk-stable-19.08.2 目录下会出现新目录:x86_64-native-linux-gcc
4. 编译成功后, 依次执行dpdk-setup.sh 中的43, 44, 49, 分别是:
插入IGB_UIO,
插入VFIO
绑定需要被DPDK 管的ETH口的PCI 号。 注意我用的eth0, 在绑定前先把eth0 down掉: ifconfig eth0 down.
5. 修改/etc/default/grub中关于大页的配置如下:
GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=1G hugepagesz=2M hugepages=1024 isolcpus=0-2" ②
6. 执行dpdk-setup.sh 中的
[53] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
这个时候报了以下错误:
解决这个问题, 查看了/proc/meminfo中关于大页的配置如下:
geTables: 5436 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2488460 kB
Committed_AS: 148236 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 1
HugePages_Free: 1
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB
DirectMap4k: 75584 kB
DirectMap2M: 3069952 kB
DirectMap1G: 3145728 kB
这显然和grub 配置中期望的不一样。 解决方法, 把②处grub的配置的, 默认hugepage size改成2M。如下:
GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=2M hugepagesz=2M hugepages=1024 isolcpus=0-2"
然后sudo update-grub.
sudo reboot。 重启后查看:
/share/dpdk/dpdk-stable-19.08.2$ cat /proc/meminfo
MemTotal: 4028708 kB
MemFree: 1445036 kB
MemAvailable: 1404664 kB
Buffers: 18500 kB
Cached: 148224 kB
SwapCached: 0 kB
Active: 113728 kB
Inactive: 73796 kB
Active(anon): 37508 kB
Inactive(anon): 13712 kB
Active(file): 76220 kB
Inactive(file): 60084 kB
Unevictable: 56396 kB
Mlocked: 56396 kB
SwapTotal: 998396 kB
SwapFree: 998396 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 77196 kB
Mapped: 51312 kB
Shmem: 17276 kB
Slab: 52592 kB
SReclaimable: 22244 kB
SUnreclaim: 30348 kB
KernelStack: 5072 kB
PageTables: 136248 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1964172 kB
Committed_AS: 191504 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 28672 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 1024
HugePages_Free: 766
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 79680 kB
DirectMap2M: 4114432 kB
DirectMap1G: 2097152 kB
这下能看到dpdk 分配 了1024 个大页, 每个为2M。
---------------------------------------------------------------------------
现在再执行testpmd 程序报如下的错误:
testpmd能运行了, 不过显示eth0的信息有错, 研究了下, 因为刚重启了电脑, 需要重新绑定下eth0 到dpdk。 重启绑定后就可以了, 如下所示:
另外在调试的过程, 还发现了testpmd 说找不到的情况 , 那是因为:
export RTE_TARGET=xx这里设置错误了, 设置成:
export RTE_TARGET=x86_64-native-linux-gcc 就可以了,
我错误的写成了如下:
export RTE_TARGET=x86_64-native-linuxapp-gcc