零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)

news/2024/7/7 19:47:51 标签: DPDK

接前一篇文章:零知识学习之DPDK与RDMA(2)—— 认识DPDK(2)

本文内容参考:

《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社

https://blog.51cto.com/u_15301988/5181201

特此致谢!

上一回讲解了DPDK体系结构的第1部分内容——核心组件,本回开始讲解第2部分内容——轮询模式驱动。

一、认识DPDK

3. DPDK体系结构

(1)核心组件

(2)轮询模式驱动

DPDK的源码中已经包含了很多网卡的驱动程序,这些驱动程序都采用了轮询模式。

轮询模式驱动程序(poll mode driver,PMD)需要提供一系列API,用于配置设备、创建队列、发送数据包、接收数据包等。PMD直接访问接收队列和发送队列的描述符以及寄存器,无须处理任何中断(除了链路状态更新中断),即可在用户态的应用程序中快速接收、处理和发送数据包。

1)两种数据包处理模式

为了支持处理数据包的应用程序,DPDK提供了两种模式:运行到完成模式和流水线模式。运行到完成模式属于同步模式,流水线模式属于异步模式。

  • 运行到完成(run-to-completion)模式

接收时,通过API轮询特定网络接口的接收队列描述符/寄存器,以获取数据包。然后,在同一核上处理数据包。处理完毕后,通过其它API将数据包放置在网络接口的发送队列描述符中,进行数据发送。

运行到完成模式的示意图如下所示:

运行到完成模式下,一个核运行一个包处理循环,该循环包括以下三步:

a)通过PMD提供的接收API从硬件接收数据包;

b)处理接收到的数据包;

c)通过PMD提供的发送API把数据包发送出去。

  • 流水线(pipeline)模式

接收时,一个核上运行的程序通过API轮询一个或多个网络接口的接收队列描述符/寄存器。数据包被接收后,通过环形队列传递给另一个核。另一个核会继续处理数据包,处理完毕后,通过API将数据包放在网络接口的发送队列描述符中,进行数据发送。

流水线模式的示意图如下所示:

流水线模式下,一个或多个核负责接收数据包,并将数据包放入环形队列。其它核会从环形队列中取出数据包,并负责处理和发送。

接收数据包的核执行接收循环,该循环包括以下两步:

a)通过PMD提供的接收API从硬件接收数据包;

b)把接收到的数据包放入环形队列。

负责处理数据包的核执行包处理循环,该循环有三步:

a)从环形队列取出数据包;

b)处理接收到的数据包;

c)如果需要的话,通过PMD提供的发送API把数据包发送出去。

更过内容请看下回。


http://www.niftyadmin.cn/n/5535152.html

相关文章

华为实训案例

案例下载 案例内包含空拓扑图、配置完整的拓扑、以及步骤脚本文档,可按需下载。 拓扑图 任务清单 (一)基础配置 根据附录1拓扑图、附录2地址规划表、附录3设备编号表,配置设备接口及主机名信息。 将所有终端超时时间设置为永不…

03.C1W2.Sentiment Analysis with Naïve Bayes

目录 Probability and Bayes’ RuleIntroductionProbabilitiesProbability of the intersection Bayes’ RuleConditional ProbabilitiesBayes’ RuleQuiz: Bayes’ Rule Applied Nave Bayes IntroductionNave Bayes for Sentiment Analysis P ( w i ∣ c l a s s ) P(w_i|clas…

[Vue3 + TS + Vite] ref 在 Template 与 Script 下的使用

在Vue 3中,ref 是一个非常重要的概念,它用于在 Template 和 Script 中引用组件实例、DOM元素或者响应式状态。 一、只在Script中创建 ref 在脚本中,ref 被用来创建响应式引用类型。 可以使用 ref 来声明一个响应式的引用变量。这个引用变量…

mysql8一键安装脚本(linux) 拿走即用

创建一个shell文件,将下面的代码放里面去,然后放到linux服务器上运行就可以了 #!/bin/bash#---------------------* # * # 2021-10-08 * # install mysql-8 * # * #---------------------*route=/usr #包存放路径 mys…

基于C++实现的EventLoop与事件驱动编程

一,概念介绍 事件驱动编程(Event-Driven)是一种编码范式,常被应用在图形用户界面,应用程序,服务器开发等场景。 采用事件驱动编程的代码中,通常要有事件循环,侦听事件,…

Android 复习layer-list使用

<shape android:shape"rectangle"> <size android:width"1dp" android:height"100px" /> <solid android:color"#FFFFFF" /> </shape> 通过shape画线段,通过 <item android:gravity"left|top"…

上份工作不干了24年5月-6月回顾(面试+软考)需要资料的小伙伴可以关注下

前言&#xff1a; 博主在5月和6月基本没有对博客内容进行更新了&#xff0c;不是博主偷懒&#xff0c;5月份博主在全力准备24年系统分析师的软考&#xff0c;6月份在准备面试&#xff0c;现在对5月和6月进行回顾&#xff1b; 先说下软考系统分析师&#xff1a; 博主实在今年3月…

【FFmpeg】av_write_frame函数

目录 1.av_write_frame1.1 写入pkt&#xff08;write_packets_common&#xff09;1.1.1 检查pkt的信息&#xff08;check_packet&#xff09;1.1.2 准备输入的pkt&#xff08;prepare_input_packet&#xff09;1.1.3 检查码流&#xff08;check_bitstream&#xff09;1.1.4 写入…