CentOS 编译运行 DPDK 19.11 流程

CentOS 编译运行 DPDK 19.11 流程

文章仅供参考,如遇问题详见官方网站 http://core.dpdk.org/doc/quick-start/

1、下载DPDK 19.11源码压缩包

#从github 中下载源码压缩包

wget https://github.com/DPDK/dpdk/archive/v19.11.zip
unzip v19.11.zip
cd dpdk-19.11

2、编译依赖环境

官方网站给出依赖如图,DPDK 20.xx以后的版本推荐使用meson ninja进行构建,本文还是以makefile 的方式进行编译构建。

dpdk_dependency

#我们尽量多安装一些,避免出现意外

yum install -y gcc
yum install -y glibc
yum install -y stdc
yum install –y gfortran
yum install –y m4
yum install -y numactl*
yum install -y automake
yum install -y python3
yum install -y kernel-devel
yum install -y libpcap-devel kernel*
yum update

3、编译环境及编译

#配置环境变量指定源码路径,若果编译驱动模块需要指定内核源码文件路径

export RTE_KERNELDIR="/lib/modules/3.10.0-1160.6.1.el7.x86_64/build/"
export RTE_SDK="/root/dpdk/dpdk-19.11/"
export RTE_TARGET=“x86_64-native-linuxapp-gcc”

#修改 config/common_base 编译igb_uio驱动
CONFIG_RTE_EAL_IGB_UIO=y

#使用gcc编译
make install T=x86_64-native-linuxapp-gcc
make config T=x86_64-native-linuxapp-gcc
make -j4

4、绑定网卡

UIO(Userspace I/O)是运行在用户空间的I/O技术,Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可,而UIO则是将驱动的很少一部分运行在内核空间,而在用户空间实现驱动的绝大多数功能!使用UIO可以避免设备的驱动程序需要随着内核的更新而更新的问题。

modprobe uio
insmod build/kmod/igb_uio.ko

#查询网卡物理地址

lspci | grep Ethernet
ifconfig ens38 down
./usertools/dpdk-devbind.py -b igb_uio ens38

#或者

ifconfig ens38 down
./usertools/dpdk-devbind.py -b igb_uio 0000:02:01.0

#查看网卡信息:

./usertools/dpdk-devbind.py --status

#如修改回普通网卡模式,则使用如下命令

./usertools/dpdk-devbind.py -b e1000 0000:02:05.0

ifconfig ens38 up

5、运行配置

#分配巨页1024*2M=2G

echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
#若没有这个文件,这样也会合理的
echo 2 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages

#查看大页分配数目

$ cat /proc/meminfo| grep Huge

6、环境变量

运行DPDK测试实例时,一定要设置环境变量RTE_SDK和RTE_TARGET,用于编译以及索引,无论是采用进入目录直接编译,还是采用usertools/dpdk-setup.sh脚本中的测试实例。

这里我们已经在前面编译的时候设置

# export EXTRA_CFLAGS="-O0 -g"
export RTE_TARGET=“x86_64-native-linuxapp-gcc”
export RTE_SDK="/root/dpdk/dpdk-19.11/"

​ 编译运行测试程序helloworld,详见官方文档http://doc.dpdk.org/guides-19.11/linux_gsg/build_sample_apps.html

[root@localhost dpdk-19.11]# cd examples/helloworld/
[root@localhost helloworld]# make
CC main.o
LD helloworld
INSTALL-APP helloworld
INSTALL-MAP helloworld.map

[root@localhost helloworld]# ./build/helloworld -l 0-3 -n 4
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode ‘PA’
EAL: Probing VFIO support…
EAL: PCI device 0000:02:01.0 on NUMA socket -1
EAL: Invalid NUMA socket, default to 0
EAL: probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:06.0 on NUMA socket -1
EAL: Invalid NUMA socket, default to 0
EAL: probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:07.0 on NUMA socket -1
EAL: Invalid NUMA socket, default to 0
EAL: probe driver: 8086:100f net_e1000_em
hello from core 1
hello from core 2
hello from core 3
hello from core 0

附 虚拟机环境中的错误Input/output error处理

APP: HPET is not enabled, using TSC as default timer
RTE>>EAL: Error reading from file descriptor 22: Input/output error

如果出现如上问题,是因为虚拟机添加的网卡,dpdk不支持导致的,需要在编译igb_uio驱动代码的时候,修改一行代码,跳过dpdk pci 检查。在dpdk/kernel/linux/igb_uio/igb_uio.c文件中,找到if (pci_intx_mask_supported(udev->pdev)这行代码(dpdkv20.02),
然后修改为if (pci_intx_mask_supported(udev->pdev)|| 1)
  然后重新编译驱动,并重新加载igb_uio,即可解决该问题。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值