dpdk编译,详细的环境搭建过程

本文详细介绍了在Linux环境下DPDK的环境搭建步骤,包括安装依赖库、配置大页、绑定解绑网卡等,并展示了如何编译DPDK程序。在成功搭建环境中,演示了运行DPDK示例程序的流程,强调了运行前的准备工作如Hugepages设置、驱动加载和端口绑定。最后,文章通过实例展示了如何解决运行中遇到的问题。

1. dpdk环境的搭建过程:

Linux平台上DPDK入门指南:中文,比较详细
https://dpdk-docs.readthedocs.io/en/latest/linux_gsg/index.html

dpdk编译:
dpdk依赖库:
https://www.cnblogs.com/vancasola/p/8881197.html
按上述网址安装完所有的依赖库后,按以下命令安装(脚本):
export RTE_SDK=/home/wlw/dpdk/dpdk-stable-18.02.2
export RTE_TARGET=x86_64-native-linuxapp-gcc
make config T=x86_64-native-linuxapp-gcc
wlw@greenvm-wlwv:~/dpdk/dpdk-stable-18.02.2$ sudo ./usertools/
cpu_layout.py    dpdk-pmdinfo.py  meson.build      
dpdk-devbind.py  dpdk-setup.sh    
wlw@greenvm-wlwv:~/dpdk/dpdk-stable-18.02.2$ sudo ./usertools/dpdk-setup.sh
选14编译

绑定网卡:
./dpdk-devbind.py --status
wlw@greenvm-wlwv:~/dpdk/dpdk-stable-18.02.2/usertools$ sudo ifconfig eth0 down
wlw@greenvm-wlwv:~/dpdk/dpdk-stable-18.02.2/usertools$ sudo ./dpdk-devbind.py --bind=igb_uio eth0
解绑网卡:
./dpdk-setup.sh 29


TLB与hugepage:深入浅出dpdk 47页
在之前的章节我们提到了TLB(Translation Look-aside Buffer)Cache ,TLB和Cache本质上是一样的,都是一种高速的SRAM,存放了内存中内容的一份快照或者备份,以便处理器能够快速地访问,减少等待的时间。有所不同的是,Cache存放的是内存中的数据或者代码,或者说是任何内容,而TLB存放的是页表项。
提到页表项,有必要简短介绍一下处理器的发展历史。最初的程序员直接对物理地址编程,自己去管理内存,这样不仅对程序员要求高,编程效率低,而且一旦程序出现问题也不方便进行调试。特别还出现了恶意程序,这对计算机系统危害实在太大,因而后来不同的体系架构推出了虚拟地址和分页的概念。
分页是指把物理内存分成固定大小的块,按照页来进行分配和释放。一般常规页大小为4K(2 12 )个字节,之后又因为一
些需要,出现了大页,比如2M(2 20 )个字节和1G(2 30 )个字节的大小,我们后面会讲到为什么使用大页。
虚拟地址是指程序员使用虚拟地址进行编程,不用关心物理内存的大小,即使自己的程序出现了问题也不会影响其他程序的运行和系统的稳定。而处理器在寄存器收到虚拟地址之后,根据页表负责把虚拟地址转换成真正的物理地址。
首先,Linux操作系统采用了基于hugetlbfs的特殊文件系统来加入对2MB或者1GB的大页面支持。这种采用特殊文件系统形式支持大页面的方式,使得应用程序可以根据需要灵活地选择虚存页面大小,而不会被强制使用2MB大页面。

NUMA系统:深入浅出dpdk 51页
内存是统一结构、统一寻址的(UMA,Uniform Memory Architecture)。
查看系统是否是numa系统:
uname -a
lscpu
如果不能确认是单节点系统还是NUMA系统,则两个都配置一下:
法一:
对于单节点系统,使用以下命令(假设需要1024个页):
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
对于NUMA设备,则分配应该明确指定在哪个节点上:
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
法二:
wlw@ubuntu:~/workspace/source/dpdk/dpdk-stable-18.02.2$ ./usertools/dpdk-setup.sh
选择20或者21,然后输入64

DPDK也是使用HUGETLBFS来使用大页:  深入浅出dpdk 48页(里面有永久保存配置)
在大页预留之后,接下来则涉及使用的问题。我们以DPDK为例来说明如何使用大页。
DPDK也是使用HUGETLBFS来使用大页。首先,它需要把大页mount到某个路径,比如/mnt/huge,以下是命令:
mkdir /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge

加载模块启动DPDK环境需要的UIO功能:https://dpdk-docs.readthedocs.io/en/latest/linux_gsg/index.html中3.4节
要运行任何的DPDK应用程序,需要将合适的uio模块加载当前内核中。在大多数情况下,Linux内核包含了标准的uio_pci_generic模块就可以提供uio能力。该模块可以使用以下命令加载:
sudo modprobe uio_pci_generic
区别于uio_pci_generic,DPDK提供了一个igb_uio模块(可以在kmod目录下找到)。加载方式如下:
sudo modprobe uio
sudo insmod kmod/igb_uio.ko
注:对于一个不支持传统中断的设备,例如虚拟功能(VF)设备,必须使用igb_uio来代替uio_pci_generic。

绑定及解绑网卡:
虽然任何用户都可以运行dpdk-devbind.py脚本来查看网络端口的状态,但绑定或解除绑定网络端口需要root权限。
    要查看系统中所有网络端口的状态,请执行以下操作:
./usertools/dpdk-devbind.py --status

Network devices using DPDK-compatible driver
============================================
0000:82:00.0 '82599EB 10-GbE NIC' drv=uio_pci_generic unused=ixgbe
0000:82:00.1 '82599EB 10-GbE NIC' drv=uio_pci_generic unused=ixgbe

Network devices using kernel driver
===================================
0000:04:00.0 'I350 1-GbE NIC' if=em0  drv=igb unused=uio_pci_generic *Active*
0000:04:00.1 'I350 1-GbE NIC' if=eth1 drv=igb unused=uio_pci_gene

安装和配置DPDK开发环境涉及多个步骤,包括系统准备、源码编译、安装以及环境测试等。以下是详细的安装和配置流程: ### 系统准备 在开始安装DPDK之前,确保操作系统满足以下条件: - **操作系统支持**:推荐使用Linux系统,如Ubuntu或CentOS。 - **内核版本**:确保内核版本兼容DPDK,通常较新的内核支持更好。 - **依赖库安装**:安装必要的依赖库和工具,如`gcc`、`make`、`meson`、`ninja`等[^4]。 ```bash sudo apt-get update sudo apt-get install -y build-essential meson ninja-build ``` ### 源码获取与解压 从DPDK官网下载所需版本的源码包,并解压到本地目录: ```bash wget https://fast.dpdk.org/rel/dpdk-stable-21.11.9.tar.xz tar xJf dpdk-stable-21.11.9.tar.xz cd dpdk-stable-21.11.9 ``` ### 编译配置 使用`meson`工具配置编译选项,并进入构建目录进行编译: ```bash meson setup build cd build ninja ``` ### 安装DPDK 编译完成后,使用`meson install`命令将DPDK安装到系统目录中,并更新动态链接库缓存: ```bash sudo meson install sudo ldconfig ``` ### 配置DPDK环境 安装完成后,需要配置DPDK环境以支持应用程序的运行: 1. **大页内存配置**:DPDK需要使用大页内存来提高性能。可以通过以下命令配置大页内存: ```bash echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages ``` 2. **加载内核模块**:加载必要的内核模块,如`igb_uio`或`vfio-pci`: ```bash sudo modprobe uio sudo modprobe igb_uio ``` 3. **绑定网卡驱动**:使用`dpdk-setup.sh`脚本绑定网卡驱动到DPDK支持的驱动: ```bash sudo ./usertools/dpdk-setup.sh ``` 在脚本中选择相应的选项(如选项39)来编译代码,并等待编译完成[^3]。 ### 测试DPDK环境 为了验证DPDK环境是否配置成功,可以运行DPDK提供的示例程序,如`helloworld`: ```bash sudo ninja cd examples/ sudo ./dpdk-helloworld ``` 如果一切正常,输出应显示来自不同核心的“hello”消息,表明DPDK环境已成功配置[^2]。 ### 相关问题 1. 如何检查DPDK是否成功加载了网卡驱动? 2. 在配置DPDK时,如何确定使用的大页内存大小? 3. 运行DPDK应用程序时遇到“EAL: VFIO support initialized”提示是什么意思? 4. 如何在多NUMA架构下优化DPDK性能? 5. 如果DPDK编译过程中出现错误,应该如何排查?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值