Linux网络编程之dpdk的环境配置详解

news2024/9/28 11:18:56

文章目录

  • 一、dpdk是什么?
  • 二、dpdk的环境配置
    • 多队列网卡是什么?
    • 怎么判断是否为多队列网卡?
    • 怎么修改成多队列网卡?
    • 修改内存配置,使其支持hugepage(巨页)
    • 下载dpdk
    • 编译dpdk

一、dpdk是什么?

DPDK(Data Plane Development Kit)是一个高性能的数据平面开发工具包,它为快速数据包处理提供库和驱动程序。DPDK主要用于网络应用中,如网络虚拟化、网络安全、负载均衡、防火墙和其他网络功能,它旨在提供快速、可扩展的网络数据包处理能力。
DPDK的主要特点包括:

  1. 用户空间数据处理:DPDK将网络数据包处理从内核空间转移到用户空间,避免了传统内核空间处理中的上下文切换和系统调用开销,从而提高了处理速度。
  2. 高性能:DPDK通过使用优化的数据包处理算法和零拷贝技术,减少了数据在内存中的复制次数,提高了数据处理的效率。
  3. 可扩展性:DPDK支持多核处理,可以在多个CPU核心上并行处理数据包,提高了系统的可扩展性。
  4. 丰富的网络协议支持:DPDK支持多种网络协议,包括TCP、UDP、IP、VLAN、MPLS等。
  5. 兼容性:DPDK可以在多种Linux发行版上运行,并且可以与现有的网络应用和框架集成,如Open vSwitch、OpenStack等。
    DPDK通常用于以下场景:
  • 网络虚拟化:在虚拟化环境中,DPDK可以提高虚拟交换机和虚拟路由器的性能。
  • 高性能网络应用:如高速缓存、负载均衡器、防火墙等,DPDK可以提供所需的高性能网络处理能力。
  • SDN(软件定义网络):在SDN架构中,DPDK可以用于实现快速的数据平面处理,支持网络流量的快速转发和控制。
    DPDK是一个开源项目,由Intel发起,并得到了社区的支持和贡献。由于其高性能和灵活性,DPDK在需要高速网络处理的场景中得到了广泛的应用。

二、dpdk的环境配置

多队列网卡是什么?

多队列网卡(Multi-Queue NIC)是一种网络接口卡(NIC),它支持将网络流量分发到多个处理队列中,以提高系统的网络处理性能和吞吐量。传统上,单队列网卡只有一个硬件队列用于处理所有的输入和输出流量,这可能会成为瓶颈。通过使用多队列网卡,可以将输入和输出流量分发到不同的硬件队列中,并在多核系统上进行并行处理。这样可以减轻单个队列的负载压力,并充分利用系统资源来提高网络处理效率。
多队列网卡通常需要操作系统和驱动程序的支持才能实现,因为操作系统需要将流量合理地分发到各个队列,并确保数据包按照顺序正确地发送和接收。同时,应用程序也需要针对多队列进行优化,以充分发挥多队列网卡的性能优势。
多队列网卡的关键特性包括:

  1. 并行处理:通过多个队列,可以在多个CPU核心上并行处理网络流量,提高网络吞吐量和降低延迟。
  2. 负载均衡:操作系统可以根据当前的网络负载和CPU使用情况,动态地调整流量分配,实现负载均衡。
  3. 提高可靠性:如果一个队列出现故障或过载,其他队列可以接管其工作,从而提高系统的整体可靠性。
  4. 硬件加速:多队列网卡通常配备有硬件加速功能,如TCP卸载(TOE)和虚拟化支持,进一步优化网络性能。
  5. 支持高级网络功能:多队列网卡支持高级网络功能,如虚拟局域网(VLAN)、网络虚拟化(NVGRE、VXLAN)和流量监控等。
    多队列网卡在数据中心、云计算和高性能计算环境中尤为重要,它们可以显著提高网络性能,满足这些环境对高网络吞吐量和低延迟的需求。

怎么判断是否为多队列网卡?

cat /proc/interrupts | grep <网卡名>
如果结果只有一行,则不是多队列网卡
在这里插入图片描述

怎么修改成多队列网卡?

处理:关闭虚拟机,找到你虚拟机的文件夹路径,然后找到虚拟机名.vmx文件,该文件记录了虚拟机的一切配置信息,包括网卡信息。其中,我的网卡信息如下:
在这里插入图片描述
修改成如下:
在这里插入图片描述
重新打开虚拟机结果如下:
在这里插入图片描述
注意:该配置后,网卡从ens35变成了ens160,这里的原因不明,但是不影响使用。

修改内存配置,使其支持hugepage(巨页)

一般内存的每一页是4k的,修改成成巨页后,可以选择2M或者1G,这里虚拟机建议选择2M。
修改:
打开这个文件:vim /etc/default/grub
修改如下:

GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US default_hugepagesz=1G hugepagesz=2M hugepages=1024"

注:在GRUB_CMDLINE_LINUX后面加 “default_hugepagesz=1G hugepagesz=2M hugepages=1024”这个三个键值对即可。

然后输入:sudo update-grub
再重启虚拟机即可。

下载dpdk

下载链接:https://core.dpdk.org/download/
我选择的是19.08.2的版本
注:每个版本的差别挺大的,深入挖掘一个版本即可。

编译dpdk

首先设置环境变量:
export RTE_SDK=/home/user/dpdk/dpdk-stable-19.08.2/ (注意,该路径取决于你的dpdk路径)
export RTE_TARGET=x86_64-native-linux-gcc
这个只是一次性的,为了永久生效,可以vim ~/.bashrc 后面加上前面的两句,这样每次开启终端都会设置export
解压好dpdk源码后,进入到usertools文件夹,执行dpdk设置的交互脚本文件:./dpdk-set

------------------------------------------------------------------------------
 RTE_SDK exported as /home/user/dpdk/dpdk-stable-19.08.2
------------------------------------------------------------------------------
----------------------------------------------------------
 Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] arm64-armada-linuxapp-gcc
[2] arm64-armada-linux-gcc
[3] arm64-armv8a-linuxapp-clang
[4] arm64-armv8a-linuxapp-gcc
[5] arm64-armv8a-linux-clang
[6] arm64-armv8a-linux-gcc
[7] arm64-bluefield-linuxapp-gcc
[8] arm64-bluefield-linux-gcc
[9] arm64-dpaa2-linuxapp-gcc
[10] arm64-dpaa2-linux-gcc
[11] arm64-dpaa-linuxapp-gcc
[12] arm64-dpaa-linux-gcc
[13] arm64-octeontx2-linuxapp-gcc
[14] arm64-octeontx2-linux-gcc
[15] arm64-stingray-linuxapp-gcc
[16] arm64-stingray-linux-gcc
[17] arm64-thunderx2-linuxapp-gcc
[18] arm64-thunderx2-linux-gcc
[19] arm64-thunderx-linuxapp-gcc
[20] arm64-thunderx-linux-gcc
[21] arm64-xgene1-linuxapp-gcc
[22] arm64-xgene1-linux-gcc
[23] arm-armv7a-linuxapp-gcc
[24] arm-armv7a-linux-gcc
[25] i686-native-linuxapp-gcc
[26] i686-native-linuxapp-icc
[27] i686-native-linux-gcc
[28] i686-native-linux-icc
[29] ppc_64-power8-linuxapp-gcc
[30] ppc_64-power8-linux-gcc
[31] x86_64-native-bsdapp-clang
[32] x86_64-native-bsdapp-gcc
[33] x86_64-native-freebsd-clang
[34] x86_64-native-freebsd-gcc
[35] x86_64-native-linuxapp-clang
[36] x86_64-native-linuxapp-gcc
[37] x86_64-native-linuxapp-icc
[38] x86_64-native-linux-clang
[39] x86_64-native-linux-gcc
[40] x86_64-native-linux-icc
[41] x86_x32-native-linuxapp-gcc
[42] x86_x32-native-linux-gcc

----------------------------------------------------------
 Step 2: Setup linux environment
----------------------------------------------------------
[43] Insert IGB UIO module
[44] Insert VFIO module
[45] Insert KNI module
[46] Setup hugepage mappings for non-NUMA systems
[47] Setup hugepage mappings for NUMA systems
[48] Display current Ethernet/Baseband/Crypto device settings
[49] Bind Ethernet/Baseband/Crypto device to IGB UIO module
[50] Bind Ethernet/Baseband/Crypto device to VFIO module
[51] Setup VFIO permissions

----------------------------------------------------------
 Step 3: Run test application for linux environment
----------------------------------------------------------
[52] Run test application ($RTE_TARGET/app/test)
[53] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)

----------------------------------------------------------
 Step 4: Other tools
----------------------------------------------------------
[54] List hugepage info from /proc/meminfo

----------------------------------------------------------
 Step 5: Uninstall and system cleanup
----------------------------------------------------------
[55] Unbind devices from IGB UIO or VFIO driver
[56] Remove IGB UIO module
[57] Remove VFIO module
[58] Remove KNI module
[59] Remove hugepage mappings

[60] Exit Script


里面给了很多用户可以选择的选项,在这里,步骤一我选择的是[39] x86_64-native-linux-gcc

在Option中输入39即可。

遇到以下错误:

mkdir: cannot create directory ‘/home/user/dpdk/dpdk-stable-19.08.2/x86_64-native-linux-gcc’: 
Permission denied make[3]: *** [/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkconfig.mk:68: 
/home/user/dpdk/dpdk-stable-19.08.2/x86_64-native-linux-gcc] Error 1 make[2]: *** 
[/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkroot.mk:65: config] Error 2 make[1]: *** 
[/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkinstall.mk:60: pre_install] Error 2 make: *** 
[/home/user/dpdk/dpdk-stable-19.08.2/mk/rte.sdkroot.mk:77: install] Error 2

这说明是该操作该文件夹的权限不够,直接使用sudo chmod 777 /home/user/dpdk/dpdk-stable-19.08.2/ 即可

后面在执行一次39,然后进去代码编译,第一次很比较久,需要耐心等待。

如果编译中,出现下面的问题:
在这里插入图片描述
说明你的内核版本不匹配。我使用的时ubuntu23,这个dpdk是19的,所以内核版本过高,导致编译失败。
所以我不得不去下载一个低版本的ubuntu系统。
后来我换成了ubuntu16版本的,内核是4.4.420,这才编译成功。

言归正传,编译成功后,再执行43,插入igb_uio模块,详细请看:https://zhuanlan.zhihu.com/p/483868843
输入45,插入KNI模块
46和47是内存的配置。有关解析请看:http://t.csdnimg.cn/ZAvko
这里46和47我都设置成了512
然后输入49,查看网卡信息:
在这里插入图片描述
接着让你选择PIC地址,我选择eth1,理由是eth0是用来通过ssh协议连接到xshell的,而且已经处于active状态,我们选择的网卡必须是没有工作的,否则要实现down下来:ifconfig eth0 down
在这里插入图片描述
然后60退出。
以上就是dpdk19版本的全部环境配置。

都看到这了,还不给个免费的赞支持一下?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用苹果Vision Pro隔空操控机器人,英伟达:「人机合一」也不难嘛

昨日,英伟达创始人黄仁勋在 SIGGRAPH 2024 Keynote 演讲中讲到了其人形机器人通用基础模型「Project GR00T」。该模型在功能上迎来了一系列更新。 德克萨斯大学奥斯汀分校助理教授、英伟达高级研究科学家朱玉可发推,在视频中演示了英伟达如何将通用家务机器人大规模仿真训练…

(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 十一、通过EXTI外部中断实现 按键控制LED 十一、通过EXTI外部中断实现 按键控制LED1、按键模块按键原理图按键程序思路 2、中…

【数据结构】mapset详解

&#x1f341;1. Set系列集合 Set接口是一种不包含重复元素的集合。它继承自Collection接口&#xff0c;所以可以使用Collection所拥有的方法&#xff0c;Set接口的实现类主要有HashSet、LinkedHashSet、TreeSet等&#xff0c;它们各自以不同的方式存储元素&#xff0c;但都遵…

Linux常用得操作命令

1.查看ip地址------ifconfig 2.在终端中输入该命令&#xff0c;可以查看当前所在位置------pwd 3.man和–help man命令 1.man命令可以查看某个命令得具体用法 2.man命令怎么翻页 空格 3.man命令按q退出 help命令------help&#xff0c;也可以查看一个命令的帮助&#xff0c…

JavaWeb基础2:XML/Tomcat/Servlet

JavaWeb基础2&#xff1a;XML/Tomcat/Servlet (qq.com)

vim编辑器的使用【vim常用指令介绍】

1.1 vim 简介 vim 编辑器最初是 vi 编辑器&#xff0c;vi 编辑器是 Unix 系统最初的编辑器。允许查看文件内容和在文件中移动、插入、编辑和替换文本。后来开发人员对它做了一些改进。并重命名为 vim。 1.2 学习 vim 的理由 因为几乎任何一个发行版都有 vi/vim 编辑器&#xf…

从手动到自动:WMS系统带来的仓储革命

仓库管理系统&#xff08;WMS&#xff0c;Warehouse Management System&#xff09;在仓储业的发展中扮演了至关重要的角色。它的演变从手动管理到自动化管理&#xff0c;不仅大提升了仓储效率&#xff0c;还改变了企业的运营模式。 一、手动管理阶段 在WMS系统普及之前&#…

nginx负载均衡及软件平滑升级!!!

一、负载均衡 早期的网站流量和业务功能都比较简单&#xff0c;单台服务器足以满足基本的需求&#xff0c;但是随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也跟着越来越复杂&#xff0c;单台服务器的性能及单点故障问题就凸显出来了&#xff0c;因此需要多台服…

【Visual Studio Code】源代码管理 传入/传出 更改配置开关

July 2024 (version 1.92)版本更新的Visual Studio Code 增加了 【源代码管理 - 传入/传出】的可视化视图。 但是目前发现也会导致加载变慢 占用页面的影响&#xff0c;如果希望关闭该视图&#xff0c; 可以在设置里搜索 scm.showHistoryGraph 关闭即可

计网:从输入URL到网页显示期间发生了什么

1、URL包含的信息 我们输入的url中包含着一些信息&#xff1a; http&#xff1a;表示的此次我们使用的什么协议/www.baidu.com&#xff1a;表示的是我们想要访问的服务器名称&#xff0c;也就是域名dir3/home.html&#xff1a;表示我们所要访问的资源 2、通过DNS解析URL获得I…

JAVA中的JMM(Java 内存模型)详解

1.JMM概念 Java 内存模型&#xff08;Java Memory Model 简称JMM&#xff09;是一种抽象的概念&#xff0c;并不真实存在&#xff0c;指一组规则或规范&#xff0c;通过这组规范定义了程序中各个变量的访问方式。 因为在不同的硬件生产商和不同的操作系统下&#xff0c;内存的访…

嵌入式安全:Provencore Secure os

嵌入式安全有何独特之处? 嵌入式安全领域的领导者 ProvenRun 宣布,其旗舰产品 ProvenCore for ARM™ Cortex-A 最近获得了 通用标准 (CC) EAL7 认证。这是全球首创,因为没有其他操作系统或可信执行环境 (TEE) 达到该安全级别。相比之下,移动安全市场上第二安全的 TEE(对于…

版本控制案例:全球虚拟制片领导者Dimension借助Perforce Helix Core管理大型二进制文件,实现跨地域团队协作,简化制作流程(上)

创建虚拟世界和人类角色需要一系列的软件工具。但最终愿景很少是由单一工作室独立完成的。对于大型项目&#xff0c;工作室需要通力合作&#xff0c;将全球的团队成员和数字资产联合起来。 Dimension Studio——体积内容捕捉和虚拟制片领域的领导者——不断将新技术和新方法融…

传统产品经理 vs AI产品经理

随着科技的日新月异和技术的不断革新&#xff0c;AI技术如今已深度融入各行各业&#xff0c;使得身处此领域的产品经理们迎来了前所未有的新挑战与广阔机遇。以下是我精心整理的内容&#xff0c;旨在分享传统产品经理如何顺应时代洪流&#xff0c;成功转型为AI产品经理的策略与…

Java面试之操作系统

1、冯诺依曼模型 运算器、控制器、存储器、输入设备、输出设备 32位和64位CPU最主要区别是一次性能计算多少字节数据&#xff0c;如果计算的数额不超过 32 位数字的情况下&#xff0c;32 位和 64 位 CPU 之间没什么区别的&#xff0c;只有当计算超过 32 位数字的情况下&#…

中国篆刻孙溟㠭凿木《应无所住而生其心》

应无所住而生其心 弘一法师言&#xff1a;学佛不是让你出家&#xff0c;也不是让你变得与众不同。学佛就是一个正常生活的人&#xff0c;一个善良的人懂得用佛法降服自心&#xff0c;消除烦恼所有有皆是虚妄&#xff0c;若见诸相非相&#xff0c;即见真我。 孙溟㠭凿木《应无…

Vue3发送验证码,开启倒计时,并且倒计时结束前无法点击

目录 1.最终效果 2.HTML 3.JS 1.最终效果 先看效果&#xff0c;点击发送验证码&#xff0c;然后开启倒计时&#xff0c;倒计时结束前无法再次发送&#xff0c;并且该按钮处于无法选中状态 废话少说&#xff0c;上干货&#xff0c;直接看代码 2.HTML 按钮部分内容&#xf…

揭秘eBay店铺排名提升秘诀:测评自养号的好处

在竞争激烈的电商市场&#xff0c;eBay作为全球知名的在线拍卖及购物网站&#xff0c;为卖家提供了广阔的舞台。如何在众多商品中脱颖而出&#xff0c;提升产品排名&#xff0c;成为每位eBay卖家关注的焦点。 eBay卖家如何提升排名&#xff1f; 1、关键词优化&#xff1a;关键…

适合制造业的项目管理软件都有哪些?

项目管理软件涉及进度、预算成本、资源、开发、流程、质量、风险、工时、知识文档、商务等各个方面&#xff0c;是企业项目管理领域的重要辅助工具&#xff0c;能够帮助组织提高项目管理水平与质量&#xff0c;确保项目顺利进行。 一、 奥博思 PowerProject 项目管理系统 Pow…

汇川Autoshop编程软件连接PLC并下载程序的具体步骤示例

汇川Autoshop编程软件连接PLC并下载程序的具体步骤示例 如下图所示,打开AutoShop编程软件后,新建项目,点击工具—通讯设置, 如下图所示,在弹出的窗口中选择通讯类型(这里选择以太网),设置好IP地址,然后点击搜索,正常情况下可以搜到PLC, 如下图所示,如果搜索不到PLC…