dpdk03-概念补充

简介: dpdk03-概念补充

dpdk03-概念补充

DPDK(Data Plane Development Kit)是一个由Intel主导开发的开源项目,主要用于快速数据包处理。DPDK提供了一组库和驱动程序,用于加速网络数据包的转发和处理,从而帮助用户绕过内核协议栈,直接在用户空间处理数据包,实现高性能的网络数据处理。

DPDK的主要特点和优势包括:

  1. 高性能:DPDK通过用户空间的数据包处理,避免了内核与用户空间之间的上下文切换和数据拷贝,从而显著提高了数据包的处理速度。
  2. 灵活性:DPDK允许用户自定义数据包的处理逻辑,包括路由、转发、过滤、修改等,这使得用户可以灵活地构建满足自己需求的网络功能。
  3. 可编程性:DPDK支持使用C/C++等高级语言进行开发,使得开发者能够更加方便地编写和调试网络应用。
  4. 多平台支持:DPDK支持多种操作系统和硬件平台,包括Linux、BSD、x86、ARM等,这使得DPDK具有广泛的适用性。

DPDK的主要应用场景包括:

  1. 数据中心网络:在数据中心网络中,DPDK可以帮助提高网络转发性能和降低延迟,从而提升整个数据中心的性能。
  2. 虚拟化和云计算:在虚拟化和云计算环境中,DPDK可以提高虚拟机之间的网络性能,并支持各种网络功能虚拟化(NFV)应用。
  3. 网络安全:DPDK可以用于构建高性能的防火墙、入侵检测系统(IDS)等网络安全设备,提高网络安全性能。
  4. 物联网(IoT):在物联网领域,DPDK可以帮助实现高性能的边缘计算和数据处理,满足物联网设备对实时性和性能的要求。

首先我们来看一张流程图

这是网络数据的传输流程:

  • 网卡:AD转换,接受模拟信号,转化为数字信号
  • 网卡驱动:将数据传入内核
  • 内核态协议栈:处理解析数据包,等待用户态的读取
  • VFS:提供用户态和内核态的交互
  • Application:用户态读取数据

dpdk在哪里?

没错,dpdk不再那个路径里面,他就像一个外挂一样,可以读取数据包

注意,这里需要区分一下dpdk和抓包的概念:

  • 抓包:抓包更加强调一种hook的功能
  • dpdk:直接截获网卡数据。就是说数据不从上面那条路径走,直接总dpdk。

关于dpdk的路径

上面说道,dpdk直接接管了网卡,那么他和内核态协议栈的中间的箭头又是哪里来的呢?我们来看一下上一节的环境配置过程

首先先看43和44

插入uio和vfio都是在这个位置:

  • uio:UIO是对PCI地址的通用io
  • vfio:虚拟功能io

45

KNI是内核网络接受卡,可以将dpdk数据写入内核协议栈。

关于巨页

巨页(Huge Pages)是一种操作系统内存管理技术,用于提高大型应用程序的性能和效率。传统上,操作系统将内存划分为较小的页面(通常为4KB),以便进行管理和分配。但是对于某些特定的工作负载,如数据库、虚拟化和大规模计算等,使用较大的页面可以带来更好的性能。

巨页技术将内存划分为更大的页面(通常为2MB或1GB),这样就减少了内存表项(Page Table Entry)的数量,提高了TLB(Translation Lookaside Buffer)缓存命中率,并减少了内存碎片化。这使得处理大量数据时可以更高效地访问和操作内存。

巨页需要操作系统和应用程序的支持,在Linux环境下可以通过特定参数配置启用巨页功能,并在应用程序中进行相应调整。使用巨页可能会带来一些额外的复杂性和管理成本,但对于适合使用它的特定工作负载而言,可以获得显著的性能优势。

对于网卡来说,并没有什么高并发的方法,只有网络数据吞吐量的大小。在面对数据大量吞吐的情况下,内存的缺失是一个很大的瓶颈,巨页可以增大dpdk的吞吐量。

后面想到什么再添加。

相关文章
|
5月前
|
Linux 网络安全 网络虚拟化
Linux虚拟网络设备:底层原理与性能优化深度解析
在深入探讨Linux虚拟网络设备的底层原理之前,重要的是要理解这些设备如何在Linux内核中实现,以及它们如何与操作系统的其他部分交互以提供高效且灵活的网络功能。虚拟网络设备在现代网络架构中发挥着关键作用🔑,特别是在云计算☁️、容器化📦和网络功能虚拟化(NFV)环境中。
Linux虚拟网络设备:底层原理与性能优化深度解析
|
5月前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
204 2
|
5月前
|
存储 缓存 算法
作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现
作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现
52 0
|
10月前
|
网络协议 Linux Android开发
【Linux高性能服务器编程】I/O复用的高级应用
【Linux高性能服务器编程】I/O复用的高级应用
70 0
【Linux高性能服务器编程】I/O复用的高级应用
|
12月前
|
存储 网络协议 API
网络基础编程
网络基础编程
57 0
|
芯片
一文搞懂I2C协议-硬件基础
I2C总线是由飞利浦在80年代初设计的,以允许位于同一电路板上的组件之间能够轻松通信。其大大简化了电路的设计,早期的电视机中很多地方用到了I2C这种通信方式。飞利浦半导体于2006年迁移到了NXP。I2C名称翻译为“ Inter IC”。有时,该总线称为IIC或I²C总线。I2C总结的基本的特征
1086 0
|
12月前
|
程序员 人机交互 C++
操作系统的发展和分类,概念,它的运行机制和体系结构,以及和它相关的特征,功能和目标,
操作系统的发展和分类,概念,它的运行机制和体系结构,以及和它相关的特征,功能和目标,
118 0
|
网络协议 Linux 网络架构
Linux网络编程1(网络基础定义)
Linux网络编程1(网络基础定义)
217 0
嵌入式开发学习之--通讯的基本概念
嵌入式开发学习之--通讯的基本概念
嵌入式开发学习之--通讯的基本概念
|
芯片 开发者 ice
3.2基础概念:硬件调试器概念及配置方法|学习笔记
快速学习3.2基础概念:硬件调试器概念及配置方法
284 0
3.2基础概念:硬件调试器概念及配置方法|学习笔记
下一篇
无影云桌面