DPDK helloworld 解析

1. 学习目的

        计划通过学习 DPDK 官方提供的 demo, 对 DPDK API 的使用有一些了解,helloworld 程序是其中最简单的程序,还是实际上手学习能更快一些。

2. 编译 helloworld 源码

环境变量设置:

  • export RTE_SDK=/home//dpdk/dpdk-stable-19.08.2/
  • export RTE_TARGET=x86_64-native-linux-gcc

源码路径:./dpdk 源码/examples/helloworld/

编译方法:在上面路径下执行 make

目标文件路径:./dpdk 源码/examples/helloworld/build/helloworld

./helloworld/helloword 
------------------------------------------------------------------------
EAL: Detected 8 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: VFIO support initialized
hello from core 1
hello from core 2
hello from core 3
hello from core 4
hello from core 5
hello from core 6
hello from core 7
hello from core 0

3. DPDK API 学习

通过上面结果可以看出,hello 被输出了 8 次,通过查看源码发现,每个 cpu 都注册了一个 lcore_hello 函数,

也就表明当前运行程序的设备 CPU 是 8 核心的。

源码核心 API 有两个: rte_eal_init() 、rte_eal_remote_launch()

3.1. rte_eal_init()

#include <rte_eal.h>
int rte_eal_init(int argc, char *argv[]);
//作用:用于初始化DPDK的环境。

3.2. rte_eal_remote_launch()

#include <rte_launch.h>
int rte_eal_remote_launch(int (*f)(void *), void *arg, unsigned int slave_id);
//作用:DPDK中用于在远程核心上启动指定函数的函数。
//参数:
//f   : 函数指针
//arg : 函数的参数
//slave_id: 远程核心的编号

4. 源代码

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <sys/queue.h>#include <rte_memory.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include <rte_debug.h>static int lcore_hello(__attribute__((unused)) void *arg)
{unsigned lcore_id;lcore_id = rte_lcore_id();printf("hello from core %u\n", lcore_id);return 0;
}int main(int argc, char **argv)
{int ret;unsigned lcore_id;// EAL 环境初始化ret = rte_eal_init(argc, argv);if (ret < 0)rte_panic("Cannot init EAL\n");/* 把lcore_hello函数注册给每一个cpu core *//* RTE_LCORE_FOREACH_SLAVE 这个宏会变量所以的核心*/RTE_LCORE_FOREACH_SLAVE(lcore_id) {rte_eal_remote_launch(lcore_hello, NULL, lcore_id);}/* 主线程也调用一次lcore_hello */lcore_hello(NULL);rte_eal_mp_wait_lcore();return 0;
}

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

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

相关文章

nn.DataParallel

nn.DataParallel 是 PyTorch 中的一个模块&#xff0c;用于在多个 GPU 上并行运行模型。当有多个 GPU 并且想要利用它们来加速训练或推理时&#xff0c;这个模块会非常有用。nn.DataParallel 通过对模型中的每个子模块进行复制&#xff0c;并将输入数据分割成多个部分&#xff…

C++ iovec结构体

iovec是一个结构体&#xff0c;用于描述一个数据缓冲区。它通常与readv和writev系统调用一起使用&#xff0c;用于在一次系统调用中读取或写入多个缓冲区。 struct iovec {void *iov_base; // 缓冲区起始地址size_t iov_len; // 缓冲区长度 };ssize_t readv(int fd, const str…

Linux sudo suid提权练习

题目比较简单&#xff0c;可以利用sudo和多种suid程序提权&#xff0c;做个记录 进入靶场题目环境 获得节点信息 远程连接上 执行命令id&#xff0c;发现只是admin普通账户 sudo提权 发现存在 /usr/bin/vim, /usr/bin/bash, /usr/bin/more, /usr/bin/less, /usr/bin/nano, /…

计算机java项目|springboot校园一卡通

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

数据驱动决策的13种思维

第一、信度与效度思维 信度与效度的概念最早来源于调查分析&#xff0c;但现在我觉得可以引申到数据分析工作的各方面。 所谓信度&#xff0c;是指一个数据或指标自身的可靠程度&#xff0c;包括准确性和稳定性取数逻辑是否正确&#xff1f;有没有计算错误&#xff1f;这属于准…

网络爬虫快速入门及爬取百度搜索结果(附源码)

前言 爬虫的基本结构及工作流程 1. 确定目标 首先&#xff0c;确定你想要爬取的目标&#xff0c;包括目标网站或网页、需要提取的数据类型&#xff08;如文本、图片、视频等&#xff09;以及爬取的深度&#xff08;单页、整个网站等&#xff09;。 2. 获取网页内容 使用HT…

AJAX——事件循环(EventLoop)

1.事件循环&#xff08;EventLoop&#xff09; 概念&#xff1a;JavaScript有一个基于事件循环的并发模型&#xff0c;事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。这个模型与其它语言中的模型截然不同&#xff0c;比如C和Java。 原因&#xff1a;JavaScri…

【S32DS RTD实战】-1.5-S32DS使用Post-Build调用第三方插件-自动对生成的s19,Hex,Bin文件二次编辑

<--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景&#xff1a; 在《【S32DS RTD实战】-1.3-S32K3工程生成S19&#xff0c;BIN&#xff0c;Hex文件&#xff0c;以及Post-build steps的妙用_s32ds如何生成s19或hex文件-CSDN博客https://blog.csdn.net/qfmzhu/articl…

突破编程_C++_网络编程(一种高性能处理 TCP 粘包问题的方法)

1 前言 在“突破编程_C_网络编程&#xff08;Windows 套接字&#xff08;处理 TCP 粘包问题&#xff09;&#xff09;”一文中&#xff0c;已经讲解了 TCP 粘包问题&#xff0c;并且给出了样例代码。但是该样例代码的核心是使用队列&#xff08;std::queue&#xff09;做报文的…

【LeetCode热题100】【多维动态规划】编辑距离

题目链接&#xff1a;72. 编辑距离 - 力扣&#xff08;LeetCode&#xff09; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 你可以插入、删除、替换字符 定义dp[i][j]是将word1[0:i-1]转换成word2[0:j-1]所使用的最少操作数 如…

Json三方库介绍

目录 Json是干什么的Json序列化代码Json反序列化代码 Json是干什么的 Json是一种轻量级的数据交换格式&#xff0c;也叫做数据序列化方式。Json完全独立于编程语言的文本格式来存储和表述数据。易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;并有效地提升…

AcWing 797. 差分——算法基础课题解

AcWing 797. 差分 题目描述 输入一个长度为 n 的整数序列。 接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r]之间的每个数加上 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数 n 和 m。 第二行包含 n 个…

【前后端】django与vue的结合使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前后端分离的简介二、django与vue的结合使用三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发工具&a…

笔记:Python 列表与元组编程题(练习题)

文章目录 前言一、Python 列表与元组是什么&#xff1f;二、编程题总结 前言 欢迎阅读本编程练习题集&#xff0c;旨在帮助您加深对 Python 中列表&#xff08;List&#xff09;与元组&#xff08;Tuple&#xff09;的理解和应用。列表与元组是 Python 中常用的数据结构&#…

企业级DDoS防护与内网文件安全防护:全方位策略与技术实践

在数字化转型的浪潮中&#xff0c;企业面临着日益严峻的网络安全威胁&#xff0c;其中DDoS&#xff08;分布式拒绝服务&#xff09;攻击与内网文件防护是两个至关重要的议题。本文将深入探讨企业如何通过综合运用多种技术和策略&#xff0c;构建起强大的DDoS防护体系与内网文件…

YOLOv9训练结果分析->mAP、Precision、Recall、FPS、Confienc、混淆矩阵分析

简介 这篇博客&#xff0c;主要给大家讲解我们在训练yolov9时生成的结果文件中各个图片及其中指标的含义&#xff0c;帮助大家更深入的理解&#xff0c;以及我们在评估模型时和发表论文时主要关注的参数有那些。本文通过举例训练过程中的某一时间的结果来帮助大家理解&#xf…

vue项目启动npm install和npm run serve时出现错误Failed to resolve loader:node-sass

1.常见问题 问题1&#xff1a;当执行npm run serve时&#xff0c;出现Failed to resolve loader: node-sass&#xff0c;You may need to install it 解决方法&#xff1a; npm install node-sass4.14.1问题2&#xff1a;当执行npm run serve时&#xff0c;出现以下错误 Fa…

复杂算子onnx导出(2): 将graph写入到onnx

前文通过自定义导出实现了trace, 然后将输入输出节点连接起来就形成了graph, 接下来利用得到的graph写入到onnx文件中。通过onnx.helper就可以构建出一个onnx文件,并且保存下来。 1. onnx.helper 示例 onnx结构中,包括了nodes,initializer ,inputs,outputs,graph。然后指定…

水牛社靠谱吗,水牛社可以当做副业来做吗?

水牛社这个平台是否靠谱&#xff0c;能否作为副业的选择&#xff0c;一直是网友们热议的话题。实际上&#xff0c;水牛社是一个集合了众多网上赚钱活动任务和提供资源项目教程的综合性平台&#xff0c;它并非只局限于某一特定的项目&#xff0c;而是展现出多样化的特点。随着网…

SpringCloud系列(11)--将微服务注册进Eureka集群

前言&#xff1a;在上一章节中我们介绍并成功搭建了Eureka集群&#xff0c;本章节则介绍如何把微服务注册进Eureka集群&#xff0c;使服务达到高可用的目的 Eureka架构原理图 1、分别修改consumer-order80模块和provider-payment8001模块的application.yml文件&#xff0c;使这…