Unbuntu18.04 配置DPDK

1. VMware 添加网卡

网络适配器配置成桥接模式,为DPDK准备的,网络适配器3配置成NAT模式为ssh准备的。

后台服务器:https://course.0voice.com/v1/course/intro?courseId=5&agentId=0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mpn9E1kM-1655041859371)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611225358402.png)]

修改网卡的配置信息:

在虚拟机关机状态下,修改虚拟机的.vmx文件, 修改ethernet0.virtualDev 从e1000到vmxnet3, 因为 vmware 的 vmxnet3 支持多队
列网卡

ethernet0.virtualDev = “vmxnet3”

重启虚拟机, 查看网卡, 成功被被配置为vmxnet3,

zhw@zhw:~/zhw/dpdk-stable-19.08.2$ ethtool -i eth0
driver: vmxnet3
version: 1.5.0.0-k-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

再看下eth1的网卡

zhw@zhw:~/zhw/dpdk-stable-19.08.2$ ethtool -i eth1
driver: e1000
version: 5.13.0-48-generic
firmware-version:
expansion-rom-version:
bus-info: 0000:02:06.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

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

执行: cat /proc/interrupts

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwjtTiee-1655041859372)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611230847732.png)]

因为我这里配置4个CPU, 所以会有4个队列。对应的中断号分别是56、57、58、59。这里虚拟机有多少个CPU就会有多少个队列,如果你有8个CPU则设置亲缘性时要设置8个。

设置中断号的亲缘性:(选择性操作,不操作也可以)

root下:

echo 1 > /proc/irq/56/smp_affinity
echo 2 > /proc/irq/57/smp_affinity
echo 4 > /proc/irq/58/smp_affinity
echo 8 > /proc/irq/59/smp_affinity

上面操作的目的是将4个网卡队列各自绑定到一个CPU。

2. 修改 ubuntu 系统的启动参数(设置巨页)

sudo vim /etc/default/grub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sieVrl6H-1655041859372)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611231400501.png)]

如果是虚拟机:

GRUB_CMDLINE_LINUX改成

GRUB_CMDLINE_LINUX=“find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=2M hugepagesz=2M hugepages=1024 isolcpus=0-2”

如果是物理机:

default_hugepages=1G hugepagesz=1G hugepages=20 isolcpus=0-7

sudo update-grub

重启虚拟机

3. 编译 DPDK

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mFMR2Srj-1655041859372)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611231627953.png)]

安装依赖包:

apt-get install numactl

apt-get install libnuma-dev

apt-get install net-tools

可以通过 usertools/dpdk-setup.sh , 64 位系统选择 39 编译。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0fRgHw1-1655041859372)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611231711560.png)]

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

但是编译的过程种会有一些错误:

  1. /root/dpdk/dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni/kni_net.c:737:20: error: initialization of ‘void (*)(struct net_device , unsigned int)’ from incompatible pointer type ‘void ()(struct net_device *)’ [-Werror=incompatible-pointer-types]
    .ndo_tx_timeout = kni_net_tx_timeout,

    解决方法:
    cd /root/dpdk/dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni
    vi kni_net.c
    按esc,;set number 737行 然后按i进入插入模式,将报错部分注释掉
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKcfGtI6-1655041859373)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611235502594.png)]

  2. /root/dpdk/dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni/kni_net.c:594:1: error: ‘kni_net_tx_timeout’ defined but not used [-Werror=unused-function]
    kni_net_tx_timeout(struct net_device *dev)
    img

    解决方法:
    cd /root/dpdk/dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni
    Vi Makefile
    找到Makefile,去掉其中-Werror (按esc进入编辑模式, 按“/”再输入关键词Werror找到这行),重新编译。
    在这里插入图片描述

​ 编译完成,结果如下(第一次比较慢,大概10分钟):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8hM9LwD-1655041859373)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611235715848.png)]

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

设置 DPDK 的环境变量

export RTE_SDK=/home/dpdk (自己的dpdk目录)
export RTE_TARGET=x86_64-native-linux-gcc

执行 testpmd

执行

usertools/dpdk-setup.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSv6FiJX-1655041859373)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220611235945710.png)]

  1. 选择 43 插入 IGB_UIO 模块, 选择网卡为 vmxnet3 会加载此模块
  2. 选择 44 插入 VFIO 模块,选择网卡为 e1000 会加载此模块
  3. 选择 49 绑定 igb_uio 模块(我设置失败了), 也可以退出,通过命令来执行(强烈推荐)。
    # ifconfig eth0 down
    # usertools/dpdk-devbind.py --bind=igb_uio eth0

​ 可能会报错: /usr/bin/env: ‘python’: No such file or directory

​ sudo ln -s /usr/bin/python3 /usr/bin/python

  1. 选择 53 运行 testpmd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bv4M7gWw-1655041859373)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220612000146410.png)]

​ 有的会产生错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSUWETJj-1655041859374)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220612000312703.png)]

​ 第三步没有执行成功。

  1. testpmd> show port info 0

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bYDu5z5D-1655041859374)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220612000437676.png)]

​ 表示成功了。

编译helloword

进入 example/helloworld ,
可以直接 make,
也可以通过 gcc 命令编译

gcc -o helloword main.c -I /usr/local/include/dpdk/ -ldpdk -lpthread -lnuma -ldl

执行helloworld, 注意一定要用sudo 执行,否则会错误。

sudo ./helloworld -l 0-3 -n 4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IqdNd1wm-1655041859374)(C:\Users\zhen\AppData\Roaming\Typora\typora-user-images\image-20220612000718861.png)]

可以看到在4个核上跑了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值