Linux C/C++ 学习日记(38):dpdk(一):dpdk的环境配置

注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。

以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.135

MAC: 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)

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容