当前位置: 首页 > news >正文

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

接前一篇文章:零知识学习之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把数据包发送出去。

更过内容请看下回。

相关文章:

  • 阿里云物联网应用层开发:第二部分,云产品流转
  • vue2由mapbox2升级为mapbox3遇到的矢量底图样式丢失问题解决办法
  • 马工程刑法期末复习笔记重点2
  • C++: 左值引用和右值引用
  • 初入Node.js必备知识
  • 安卓请求服务器[根据服务器的内容来更新spinner]
  • 华为5288 V5服务器安装BCLinux8U4手记
  • 电传动无杆飞机牵引车交付用户
  • 如何找BMS算法、BMS软件的实习
  • CentOS8换源
  • spdlog一个非常好用的C++日志库(四): 源码分析之logger类
  • 防爆巡检终端在石化工厂安全保障中的应用
  • 图像的像素在内存中的存储方式
  • 【Unity navmeshaggent 组件】
  • Linux Vim最全面的教程
  • 【347天】每日项目总结系列085(2018.01.18)
  • 2017-08-04 前端日报
  • Fabric架构演变之路
  • gops —— Go 程序诊断分析工具
  • iOS小技巧之UIImagePickerController实现头像选择
  • js数组之filter
  • js写一个简单的选项卡
  • Making An Indicator With Pure CSS
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Nodejs和JavaWeb协助开发
  • React中的“虫洞”——Context
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Xmanager 远程桌面 CentOS 7
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 大整数乘法-表格法
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 飞驰在Mesos的涡轮引擎上
  • 王永庆:技术创新改变教育未来
  • 微信支付JSAPI,实测!终极方案
  • 我建了一个叫Hello World的项目
  • 一文看透浏览器架构
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 第二十章:异步和文件I/O.(二十三)
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 计算机视觉入门
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #职场发展#其他
  • $.ajax()
  • $nextTick的使用场景介绍
  • (C++17) optional的使用
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (转)jQuery 基础
  • (转)socket Aio demo
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .htaccess配置重写url引擎
  • .NET Core Web APi类库如何内嵌运行?