注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。
以ubuntu16.04为例
一、 多队列网卡配置
可以参考:配置(3):虚拟机配置多网卡,同时给网卡配置多队列-CSDN博客
查看:cat /proc/interrupts | grep ens33
发现结果为单队列

配置,打开vmx文件

修改为:
ethernet1.virtualDev = “vmxnet3”
ethernet1.wakeOnPcktRcv = “TRUE”

再次查看:cat /proc/interrupts | grep enth1 (这里修改了ens33的名字,统一为eth类,防止网卡名变换影响ip分配)

二、 hugepage的配置
page:4K
虚拟机:配置2M hugepage (物理机可以配置为1G)
打开:sudo vim /etc/default/grub
:
在最后一行添加:default_hugepagesz=1G hugepagesz=2M hugepages=1024

然后 sudo update-grub (应用更新后的配置)
验证大页配置:
cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
三、 下载dpdk资料:
DPDK 下载:19.08.2

下载好后,得到dpdk-19.08.2.tar.xz (放在 home/panda/package/)
tar -Jxvf dpdk-19.08.2.tar.xz 解压即可
得到dpdk-stable-19.08.2
四、编译环境的配置
进入dpdk文件(在root环境下)
su root
cd dpdk-stable-19.08.2
./usertools/dpdk-setup.sh (脚本编译)

选择39:x86_64-native-linux-gcc
tips:
36和39 的区别:
要改dpdk源码,选择39
不改的话:选择36就好了
如果编译出错
输入下面指令
# export RTE_SDK=/home/panda/share/package/dpdk-stable-19.08.2
# export RTE_TARGET=x86_64-native-linux-gcc
再重新尝试
五、运行时的环境配置(43、44、45、46、47、49):
关联网卡(捕获网卡pci出来的数据):【pci地址:lspci查看】
方式一:插入uio(43):默认的
方式二:插入vfio (44):特殊的
区别在于截取的具体位置不同
两种方式都选择
关联内核(ip/tcp)
插入kni (45):内核网络接口
内存卡命名:
non-NUMA:命名采用统一的编码方式(46):选择512
NUMA:命名采用非统一的编码方式(47):选择512


绑定设备(device)就是所说的网卡(49)

选择“VMXNET3“(配置的那个多队列网卡),pci地址为开头那里

网卡在工作,无法改变
停止它:sudo ifconfig eth1 down

重新尝试:

注意:被dpdk绑定的网卡,调用ifconfig -a是查看不到的
至此配置dpdk完成,选择60退出
六、 补充配置(非必须)
大概率没用,每次重启都要给dpdk重新编译一次
1. 永久设置环境变量
打开环境变量配置文件
sudo vim ~/.bashrc
在文件末尾添加以下内容
export RTE_SDK=/home/panda/share/package/dpdk-stable-19.08.2
export RTE_TARGET=x86_64-native-linux-gcc
使配置立即生效:
source ~/.bashrc
验证设置是否成功
echo $RTE_SDK
echo $RTE_TARGET
2. 挂载hugetlbfs文件系统
能让dpdk识别hugepage的系统,不过貌似不配置也不影响
临时配置
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
若需永久挂载,编辑/etc/fstab,添加一行:
hugetlbfs /mnt/huge hugetlbfs defaults 0 0
验证配置并生效
mount -a
检查挂载状态
mount | grep hugetlbfs
七、在windows上给该网卡设置静态的arp
配置了,dpdk才能正常接收数据
windows上以管理员身份打开cmd
arp -a

查看:dpdk绑定的多队列网卡eth1的ip和MAC地址
ip:192.168.248.135MAC: 00-0c-29-f6-74-4f
注意:必须要在dpdk绑定eth1前查看,eth1被绑定后,调用 ifconfig eth1 是无法查看的

在windows上给该网卡设置静态的arp
netsh -c i i add neighbors 13 192.168.248.135 00-0c-29-f6-74-4f

再次查看:arp -a

设置成功,至此dpdk可以正常收发数据
八、每次重启虚拟机大概率都要重新配置dpdk
1. 编译环境的重新配置
root模式下:
export RTE_SDK=/home/panda/share/package/dpdk-stable-19.08.2
export RTE_TARGET=x86_64-native-linux-gcc
2. 运行时的环境配置
重复 “五”的步骤 (43、44、45、46、47、49)















暂无评论内容