首页 > 系统相关 >[DPDK]Linux平台上DPDK入门指南(一)

[DPDK]Linux平台上DPDK入门指南(一)

时间:2024-03-21 11:01:48浏览次数:15  
标签:入门 使用 hugepages 编译 64 Linux DPDK

[DPDK]Linux平台上DPDK入门指南(一)

1.1 简介

本文档包含DPDK软件安装和配置的相关说明。旨在帮助用户快速启动和运行软件。文档主要描述了在Linux环境下编译和 运行DPDK应用程序,但是文档并不深入DPDK的具体实现细节。

1.1.1 文档地图

以下是一份建议顺序阅读的DPDK参考文档列表:

  • 发布说明:提供特性发行版本的信息,包括支持的功能,限制,修复的问题,已知的问题等等。此外,还以FAQ方式提供了常见问题及解答。

  • 入门指南(本文档):介绍如何安装和配置DPDK,旨在帮助用户快速上手。

  • 编程指指南:描述如下内容:
    –软件架构及如何使用(实例介绍),特别是在Linux环境中的用法
    DPDK的主要内容,系统构建(包括可以在DPDK根目录Makefile中来构建工具包和应用程序的命
    令)及应用移植细则。
    –软件中使用的,以及新开发中需要考虑的一些优化。
    还提供了文档使用的术语表。

  • API参考:提供有关DPDK功能、数据结构和其他编程结构的详细信息。

  • 示例程序用户指南:描述了一组例程。每个章节描述了一个用例,展示了具体的功能,并提供了有关如何编译、运行和使用的说明。

1.2 系统要求

本章描述了编译DPDK所需的软件包。

1.2.1 X86上预先设置BIOS

对大多数平台,使用基本DPDK功能无需对BIOS进行特殊设置。然而,对于HPET定时器和电源管理功能,以及为了获得40G网卡上小包处理的高性能,则可能需要更改BIOS设置。可以参阅章节EnablingAdditional Functionality以获取更为详细的信息。

1.2.2 编译DPDK

工具集
Note: 以下说明在Fedora18上通过了测试。其他系统所需要的安装命令和软件包可能有所不同。有关其他Linux发行版本和测试版本的详细信息,请参阅DPDK发布说明。

  • GNU make.
  • coreutils: cmp, sed, grep, arch 等.
  • gcc: 4.9以上的版本适用于所有的平台。 在某些发布版本中,启用了一些特定的编译器标志和链接标志
    (例如‘‘-fstack-protector‘‘)。请参阅文档的发布版本和 gcc -dumpspecs.
  • libc 头 文 件 , 通 常 打 包 成 gcc-multilib (glibc-devel.i686 / libc6-dev-i386;
    glibc-devel.x86_64 / libc6-dev 用于Intel 64位架构编译; glibc-devel.ppc64 用于IBM
    64位架构编译;)
  • 构建Linux内核模块所需要的头文件和源文件。(kernel - devel.x86_64; kernel - devel.ppc64)
  • 在64位系统上编译32位软件包额外需要的软件为:
    – glibc.i686, libgcc.i686, libstdc++.i686 及 glibc-devel.i686, 适用于Intel的i686/x86_64;
    – glibc.ppc64, libgcc.ppc64, libstdc++.ppc64 及 glibc-devel.ppc64 适用于 IBM ppc_64;

Note: x86_x32 ABI目前仅在Ubuntu 13.10及以上版本或者Debian最近的发行版本上支持。编译器必须
是gcc 4.9+版本。

  • Python, 2.7+ or 3.2+版本, 用于运行DPDK软件包中的各种帮助脚本。

可选工具:
• Intel® C++ Compiler (icc). 安装icc可能需要额外的库,请参阅编译器安装目录下的icc安装指南。
• IBM® Advance ToolChain for Powerlinux. 这是一组开源开发工具和运行库。允许用户在Linux上使
用IBM最新POWER硬件的优势。具体安装请参阅IBM的官方安装文档。
• libpcap 头文件和库 (libpcap-devel) ,用于编译和使用基于libcap的轮询模式驱动程序。默认情况下,该
驱动程序被禁用,可以通过在构建时修改配置文件 CONFIG_RTE_LIBRTE_PMD_PCAP=y 来开启。
• 需要使用libarchive 头文件和库来进行某些使用tar获取资源的单元测试。

1.2.3 运行DPDK应用程序

要运行DPDK应用程序,需要在目标机器上进行某些定制。

系统软件

需求:
• Kernel version >= 2.6.34
当前内核版本可以通过命令查看uname -r
glibc >= 2.7 (方便使用cpuset相关特性)
版本信息通命令 ldd --version 查看。
• Kernel configuration
对于其他内核构件,应为DPDK开启的选项包括:
– UIO 支持
– HUGETLBFS 支持
– PROC_PAGE_MONITOR 支持
– 如果需要HPET支持,还应开启 HPET and HPET_MMAP 配置选项。有关信息参考 High Precision Event Timer (HPET) Functionality 章节获取更多信息。

在 Linux 环境中使用 Hugepages

用于数据包缓冲区的大型内存池分配需要 Hugepages 支持(如上节所述,必须在运行的内核中开启HUGETLBFS 选项)。通过使用大页分配,程序需要更少的页面,性能增加, 因为较少的TLB减少了将虚拟页面地址翻译成物理页面地址所需的时间。如果没有大页,标准大小4k的页面会导致频繁的TLB miss,性能下降。

预留 Hugepages 给 DPDK 使用

大页分配应该在系统引导时或者启动后尽快完成,以避免物理内存碎片化。要在引导时预留大页,需要给Linux内核命令行传递一个参数。

对于2MB大小的页面,只需要将hugepages选项传递给内核。如,预留1024个2MB大小的page,使用:hugepages=1024
对于其他大小的hugepage,例如1G的页,大小必须同时指定。例如,要预留4个1G大小的页面给程序,需要传递以下选项给内核:default_hugepagesz=1G hugepagesz=1G hugepages=4

Note: 对于64位程序,如果平台支持,建议使用1GB的hugepages。

特例:
对于2MB页面,还可以在系统启动之后再分配,通过向 /sys/devices/ 目录下的nr_hugepages文件写入hugepage数目来实现。 对于单节点系统,使用的命令如下(假设需要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

Note: 对于1G页面,系统启动之后无法预留页面内存。

DPDK 使用 Hugepages

一旦预留了hugepage内存,为了使内存可用于DPDK,请执行以下步骤:

mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

通过将一下命令添加到 /etc/fstab 文件中,安装点可以在重启时永久保存:

nodev /mnt/huge hugetlbfs defaults 0 0

对于1GB内存,页面大小必须在安装选项中指定:

nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0

配置内存用于DPDK使用

在加载rte_dom0_mm.ko内核模块之后,用户必须配置DPDK使用的内存大小。这也是通过将内存大小写入到目录 /sys/devices/ 下的文件memsize中来实现的。 使用以下命令(假设需要2048MB):

echo 2048 > /sys/kernel/mm/dom0-mm/memsize-mB/memsize

用户还可以使用下面命令检查已经使用了多少内存:

cat /sys/kernel/mm/dom0-mm/memsize-mB/memsize_rsvd

Xen Domain0 不支持NUMA配置,因此 --socket-mem 命令选项对Xen Domain0无效。

Note: memsize的值不能大于rsv_memsize。

要在Xen Domain0上运行DPDK程序,需要一个额外的命令行选项 --xen-dom0

1.3 使用源码编译DPDK目标文件

Note: 这个过程的部分工作可以通过章节 使用脚本快速构建 描述的脚本来实现。

1.3.1 安装DPDK及源码

首先,解压文件并进入到DPDK源文件根目录下:

tar xJf dpdk-<version>.tar.xz
cd dpdk-<version>

DPDK源文件由几个目录组成:
• lib: DPDK 库文件
• drivers: DPDK 轮询驱动源文件
• app: DPDK 应用程序 (自动测试)源文件
• examples: DPDK 应用例程
• config, buildtools, mk: 框架相关的makefile、脚本及配置文件

1.3.2 DPDK目标环境安装

DPDK目标文件的格式为:ARCH-MACHINE-EXECENV-TOOLCHAIN
其中:
• ARCH 可以是: i686, x86_64, ppc_64
• MACHINE 可以是: native, power8
• EXECENV 可以是: linuxapp, bsdapp
• TOOLCHAIN 可以是: gcc, icc
目标文件取决于运行环境是32位还是64位设备。可以在DPDK的 /config 目录中找到可用的目标,不能使用defconfig_前缀。

当使用Intel® C++ 编译器 (icc)时,对64位和32位,需要使用以下命令进行调整。 注意,shell脚本会更新$PATH 值,因此不能再同一个会话中执行。 此外,还应该检查编译器的安装目录,因为可能不同。

source /opt/intel/bin/iccvars.sh intel64
source /opt/intel/bin/iccvars.sh ia32

在顶级目录中使用 make install T=<target> 来生成目标文件。
例如,为了使用icc编译生成64位目标文件,运行如下命令:

make install T=x86_64-native-linuxapp-icc

为了使用gcc编译生成32位目标文件,命令如下:

make install T=i686-native-linuxapp-gcc

如果仅仅只是生成目标文件,并不运行,比如,配置文件改变需要重新编译,使用 make config
T= 命令:

make config T=x86_64-native-linuxapp-gcc

Warning: 任何需要运行的内核模块,如 igb_uio, kni, 必须在与目标文件编译相同的内核下进行编 译。
如果DPDK未在目标设备上构建,则应使用 RTE_KERNELDIR 环境变量将编译指向要在目标机上使
用的内核版本的副本(交叉编译的内核版本)。

创建目标环境之后,用户可以移动到目标环境目录,并继续更改代码并编译。用户还可以通过编辑build目录中的.config文件对DPDK配置进行修改。 (这是顶级目录中defconfig文件的本地副本)。

cd x86_64-native-linuxapp-gcc
vi .config
make

此外,make clean命令可以用于删除任何现有的编译文件,以便后续完整、干净地重新编译代码。

1.3.3 Browsing the Installed DPDK Environment Target

一旦目标文件本创建,它就包含了构建客户应用程序所需的DPDK环境的所有库,包括轮询驱动程序和头文
件。 此外,test和testpmd应用程序构建在build/app目录下,可以用于测试。 还有一个kmod目录,存放可能
需要加载的内核模块。

标签:入门,使用,hugepages,编译,64,Linux,DPDK
From: https://blog.csdn.net/qq_44710568/article/details/136730676

相关文章

  • 排查linux 定时任务cron crontab
    简介:我在使用shell编程来实现DDNS服务的注册更新工作。但是老发现cron不正常工作。为所有的排查做个指导记录吧。一:检查cron编写*/1****echohello>>/root/out.log每分钟执行一次写入临时文件。#查看cron日志journalctl--no-pager--sincetoday-g'cron'Ma......
  • C++基础入门(命名空间,函数,引用)
    文章目录前言1,命名空间2,函数函数重载缺省参数内联函数3,引用尾声前言欢迎来到这篇关于C++的入门博客!C++是一门强大而又广泛应用的编程语言,作为一门面向对象的编程语言,C++可以让你更好地组织和管理代码,提高代码的重用性和可维护性。它广泛应用于游戏开发、嵌入式系......
  • 零基础入门Python全套教程(无偿分享,学完可就业!)
    Python在2017年世界脚本语言排行榜中排名第1,也是多领域首选语言,作为一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法。现在Python作为时下越来越流行的编程语言,成为越来越多的人的青睐,越来越多的人开始学习Python,而对于小白来......
  • 尚硅谷Vue3入门到实战,最新版vue3+TypeScript前端开发教程
    1.创建Vue3工程npmcreatevue@latest或者npminitvue@latest输入项目名和需要的工具后进入项目如果项目报错使用命令安装Node.js的项目依赖包npmi启动vue项目,查看项目是否创建完成npmrundev直接删掉src然后创建src文件夹,在该文件夹中创建main.ts和App.vue文件......
  • 鸿蒙 HarmonyOS学习日记 Day 1 安装与入门
    提示:学习本课程应该有一定的前端基础文章目录一、学前准备1、了解官网2、进行下载3、初始化4、项目创建二、ArkTS基础入门1、认识和存储数据2、数组3、函数4、箭头函数5、对象6、联合类型7、枚举类型一、学前准备1、了解官网https://www.openharmony.cn/mainP......
  • Linux系统连接手机USB网络共享后无法联网
    如题,离线安装了ubantu系统的服务器的所有网口都设置了静态ip,通过usb口外接手机usb网络共享后,通过ipaddr命令查看,发现usb0网卡没有拿到ip,通过尝试可以用以下命令解决sudodhclientusb0usb0重新向dhcp服务器请求ip,ipaddr看到获取到ip后可以pingbaidu.com试下,如果还......
  • 项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理
    拓展阅读Devops-01-devops是什么?Devops-02-Jpom简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件代码质量管理SonarQube-01-入门介绍项目管理平台-01-jira入门介绍缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业性应用软件项目管理平台-01-Phab......
  • linux下常见服务的搭建搜集 —— 筑梦之路
    安装JDK官网下载地址:https://www.oracle.com/java/technologies/downloads#创建目录mkdir/usr/local/java/#解压tar-zxvfjdk-8u333-linux-x64.tar.gz-C/usr/local/java/#配置环境变量vim/etc/profileexportexportJAVA_HOME=/usr/local/java/jdk1.8.0_2......
  • 机器学习最全详细入门指南
    Fieldofstudythatgivescomputerstheabilitytolearnwithoutbeingexplicitlyprogrammed.机器学习研究和构建的是一种特殊算法(而非某一个特定的算法),能够让计算机自己在数据中学习从而进行预测。所以,机器学习不是某种具体的算法,而是很多算法的统称。机器学习包......
  • 大数据013_Linux(上传rz,下载sz,tar,zip,unzip)
    目录一、上传、下载1、通过鼠标操作(1)下载(2)上传2、通过命令操作rz、sz(1)下载sz(2)上传rz二、压缩、解压1、tar命令(1)压缩(2)解压2、zip命令压缩文件3、unzip命令解压文件一、上传、下载1、通过鼠标操作(1)下载将LInux系统中的文件下载到Windows上eg:在FinalShell......