0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DPDK内存的基本概念

Linux阅码场 来源:DPDK与SPDK开源社区 作者:Anatoly Burakov 2020-10-26 10:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者简介:Anatoly Burakov,英特尔软件工程师

目前在维护DPDK中的VFIO和内存子系统

引言

内存管理是数据面开发套件(DPDK)的一个核心部分,以此为基础,DPDK的其他部分和用户应用得以发挥其最佳性能。本系列文章将详细介绍DPDK提供的各种内存管理的功能。

但在此之前,有必要先谈一谈为何DPDK中内存管理要以现有的方式运作,它背后又有怎样的原理,再进一步探讨DPDK具体能够提供哪些与内存相关的功能。本文将先介绍DPDK内存的基本原理,并解释它们是如何帮助DPDK实现高性能的。

请注意,虽然DPDK支持FreeBSD,而且也会有正在运行的Windows端口,但目前大多数与内存相关的功能仅适用于Linux*。

标准大页

现代CPU架构中,内存管理并不以单个字节进行,而是以页为单位,即虚拟和物理连续的内存块。这些内存块通常(但不是必须) 存储在RAM中。在英特尔64和IA-32架构上,标准系统的页面大小为4KB。

基于安全性和通用性的考虑,软件的应用程序访问的内存位置使用的是操作系统分配的虚拟地址。运行代码时,该虚拟地址需要被转换为硬件使用的物理地址。这种转换是操作系统通过页表转换来完成的,页表在分页粒度级别上(即4KB一个粒度)将虚拟地址映射到物理地址。为了提高性能,最近一次使用的若干页面地址被保存在一个称为转换检测缓冲区(TLB)的高速缓存中。每一分页都占有TLB的一个条目。如果用户的代码访问(或最近访问过)16 KB的内存,即4页,这些页面很有可能会在TLB缓存中。

如果其中一个页面不在TLB缓存中,尝试访问该页面中包含的地址将导致TLB查询失败;也就是说,操作系统写入TLB的页地址必须是在它的全局页表中进行查询操作获取的。因此,TLB查询失败的代价也相对较高(某些情况下代价会非常高),所以最好将当前活动的所有页面都置于TLB中以尽可能减少TLB查询失败。

然而,TLB的大小有限,而且实际上非常小,和DPDK通常处理的数据量(有时高达几十GB)比起来,在任一给定的时刻,4KB 标准页面大小的TLB所覆盖的内存量(几MB)微不足道。这意味着,如果DPDK采用常规内存,使用DPDK的应用会因为TLB频繁的查询失败在性能上大打折扣。

为解决这个问题,DPDK依赖于标准大页。从名字中很容易猜到,标准大页类似于普通的页面,只是会更大。有多大呢?在英特尔64和1A-32架构上,目前可用的两种大页大小为2MB和1GB。也就是说,单个页面可以覆盖2 MB或1 GB大小的整个物理和虚拟连续的存储区域。

图1. TLB内存覆盖量比较

这两种页面大小DPDK都可以支持。有了这样的页面大小,就可以更容易覆盖大内存区域,也同时避免(同样多的)TLB查询失败。反过来,在处理大内存区域时,更少的TLB查询失败也会使性能得到提升,DPDK的用例通常如此。

将内存固定到NUMA节点

当分配常规内存时,理论上,它可以被分配到RAM中的任何位置。这在单CPU系统上没有什么问题,但是许多DPDK用户是在支持非统一内存访问 (NUMA) 的多CPU系统上运行应用的。对于NUMA来说,所有内存都是不同的:某一个CPU对一些内存的访问(如不在该CPU所属NUMA NODE上的内存)将比其他内存访问花费更长的时间,这是由于它们相对于执行所述内存访问的CPU所在的物理位置不同。进行常规内存分配时,通常无法控制该内存分配到哪里,因此如果DPDK在这样的系统上使用常规内存,就可能会导致以下的情况:在一个CPU上执行的线程却在无意中访问属于非本地NUMA节点的内存。

图2. 理想的NUMA节点分配

虽然这种跨NUMA节点访问在所有现代操作系统上都比较少有,因为这样的访问都是都是NUMA感知的,而且即使没有DPDK还是有方法能对内存实施NUMA定位。但是DPDK带来的不仅仅是NUMA感知,事实上,整个DPDK API的构建都旨在为每个操作提供明确的NUMA感知。如果不明确请求NUMA节点访问(其中所述结构必须位于内存中),通常无法分配给定的DPDK数据结构。

DPDK API提供的这种明确的NUMA感知有助于确保用户应用在每个操作中都能考虑到NUMA感知;换句话说,DPDK API可以减少写出编写性能差的代码的可能性。

硬件、物理地址和直接内存存取(DMA

DPDK被认为是一组用户态的网络包输入/输出库,到目前为止,它基本上保持了最初的任务声明。但是,电脑上的硬件不能处理用户空间的虚拟地址,因为它不能感知任何用户态的进程和其所分配到的用户空间虚拟地址。相反,它只能访问真实的物理地址上的内存,也就是CPU、RAM和系统所有其他的部分用来相互通信的地址。

出于对效率的考量,现代硬件几乎总是使用直接内存存取(DMA)事务。通常,为了执行一个DMA事务,内核需要参与创建一个支持DMA的存储区域,将进程内虚拟地址转换成硬件能够理解的真实物理地址,并启动DMA事务。这是大多数现代操作系统中输入输出的工作方式;然而,这是一个耗时的过程,需要上下文切换、转换和查找操作,这不利于高性能输入/输出。

DPDK的内存管理以一种简单的方式解决了这个问题。每当一个内存区域可供DPDK使用时,DPDK就通过询问内核来计算它的物理地址。由于DPDK使用锁定内存,通常以大页的形式,底层内存区域的物理地址预计不会改变,因此硬件可以依赖这些物理地址始终有效,即使内存本身有一段时间没有使用。然后,DPDK会在准备由硬件完成的输入/输出事务时使用这些物理地址,并以允许硬件自己启动DMA事务的方式配置硬件。这使DPDK避免不必要的开销,并且完全从用户空间执行输入/输出。

IOMMU和IOVA

默认情况下,任何硬件都可以访问整个系统,因此它可以在任何地方执行DMA 事务。这有许多安全隐患。例如,流氓和/或不可信进程(包括在VM (虚拟机)内运行的进程)可能使用硬件设备来读写内核空间,和几乎其他任何存储位置。为了解决这个问题,现代系统配备了输入输出内存管理单元(IOMMU)。这是一种硬件设备,提供DMA地址转换和设备隔离功能,因此只允许特定设备执行进出特定内存区域(由IOMMU指定)的DMA 事务,而不能访问系统内存地址空间的其余部分。

由于IOMMU的参与,硬件使用的物理地址可能不是真实的物理地址,而是IOMMU分配给硬件的(完全任意的)输入输出虚拟地址(IOVA)。一般来说,DPDK社区可以互换使用物理地址和IOVA这两个术语,但是根据上下文,这两者之间的区别可能很重要。例如,DPDK 17.11和更新的DPDK长期支持(LTS)版本在某些情况下可能根本不使用实际的物理地址,而是使用用户空间虚拟地址(甚至完全任意的地址)来实现DMA。IOMMU负责地址转换,因此硬件永远不会注意到两者之间的差异。

图3 .IOMMU将物理地址重新映射到IOVA地址的示例

根据DPDK的初始化方式,IOVA地址可能代表也可能不代表实际的物理地址,但有一点始终是正确的:DPDK知道底层内存布局,因此可以利用这一点。例如,它可以以创建IOVA连续虚拟区域的方式映射页面,或者甚至利用IOMMU来重新排列内存映射,以使内存看起来IOVA连续,即使底层物理内存可能不连续。

因此,这种对底层物理内存区域的感知是DPDK工具包中的又一个利器。大多数数据结构不关心IOVA地址,但当它们关心时,DPDK为软件和硬件提供了利用物理内存布局的工具,并针对不同的用例进行优化。

请注意,IOMMU不会自行设置任何映射。相反,平台、硬件和操作系统必须进行配置,来使用IOMMU。这种配置说明超出了本系列文章的范围,但是在DPDK文档和其他地方有相关说明。一旦系统和硬件设置为使用IOMMU,DPDK就可以使用IOMMU为DPDK分配的任何内存区域设置DMA映射。使用IOMMU是运行DPDK的推荐方法,因为这样做更安全,并且它提供了可用性优势。

内存分配和管理

DPDK不使用常规内存分配函数,如malloc()。相反,DPDK管理自己的内存。更具体地说,DPDK分配大页并在此内存中创建一个堆(heap)并将其提供给用户应用程序并用于存取应用程序内部的数据结构。

使用自定义内存分配器有许多优点。最明显的一个是终端应用程序的性能优势:DPDK创建应用程序要使用的内存区域,并且应用程序可以原生支持大页、NUMA节点亲和性、对DMA地址的访问、IOVA连续性等等性能优势,而无需任何额外的开发。

DPDK内存分配总是在CPU高速缓存行(cache line)的边界上对齐,每个分配的起始地址将是系统高速缓存行大小的倍数。这种方法防止了许多常见的性能问题,例如未对齐的访问和错误的数据共享,其中单个高速缓存行无意中包含(可能不相关的)多个内核同时访问的数据。对于需要这种对齐的用例(例如,分配硬件环结构),也支持任何其他二次幂值 (当然> =高速缓存行大小)。

DPDK中的任何内存分配也是线程安全的。这意味着在任何CPU核心上发生的任何分配都是原子的,不会干扰任何其他分配。这可能看起来很无足轻重 (毕竟,常规glibc内存分配例程通常也是线程安全的),但是一旦在多处理环境中考虑,它的重要性就会变得更加清晰。

DPDK支持特定风格的协同多处理,其中主进程管理所有DPDK资源,多个辅助进程可以连接到主进程,并共享由主进程管理的资源的访问。

DPDK的共享内存实现不仅通过映射不同进程中的相同资源 (类似于shmget () 机制) 来实现,还通过复制另一个进程中主进程的地址空间来实现。因此,由于两个进程中的所有内容都位于相同的地址,指向DPDK内存对象的任何指针都将跨进程工作,无需任何地址转换。这对于跨进程传递数据时的性能非常重要。

表1. 操作系统和DPDK分配器的比较

内存池

DPDK也有一个内存池管理器,在整个DPDK中广泛用于管理大型对象池,对象大小固定。它的用途很多——包输入/输出、加密操作、事件调度和许多其他需要快速分配或解除分配固定大小缓冲区的用例。DPDK内存池针对性能进行了高度优化,并支持可选的线程安全(如果用户不需要线程安全,则无需为之付费)和批量操作,所有这些都会导致每个缓冲区的分配或空闲操作周期计数达到两位数以下。

也就是说,即使DPDK内存池的主题出现在几乎所有关于DPDK内存管理的讨论中,从技术上讲,内存池管理器是一个建立在常规DPDK内存分配器之上的库。它不是标准DPDK内存分配工具的一部分,它的内部工作与DPDK内存管理例程完全分离 (并且非常不同) 。因此,这超出了本系列文章的范围。但是,有关DPDK内存池管理器库的更多信息可以在DPDK文档中找到。

结论

本文介绍了构成DPDK内存管理子系统基础的许多核心原理,并证明了DPDK的高性能并不是偶然,而是其体系架构的必然结果。

本系列接下来的文章将深入探讨IOVA寻址及其在DPDK中的使用;以历史的视角,回顾DPDK长期支持(LTS)版本17.11及更早版本中提供的内存管理功能;同时也会介绍18.11及更高版本DPDK版本中做出的更改和提供的新功能。

文章转载自DPDK与SPDK开源社区

原文标题:DPDK内存篇(一): 基本概念

文章出处:【微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222939
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76115
  • DPDK
    +关注

    关注

    0

    文章

    14

    浏览量

    1946

原文标题:DPDK内存篇(一): 基本概念

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TVS二极管的基本概念和主要作用

    芝识课堂的全新内容又和大家见面啦!从本期开始,我们将用四节课为大家系统介绍一位在电路设计中默默奉献的“无名英雄”——TVS二极管。我们会从它的基本概念、工作原理,聊到如何为电路挑选合适的型号、布局
    的头像 发表于 11-28 09:27 3852次阅读
    TVS二极管的<b class='flag-5'>基本概念</b>和主要作用

    USB/HID及其基本概念

    USB帧概念 如上图所示,在USB1.1规范当中,把USB总线时间按帧划分,每一帧占用时间是1ms; 每一帧内的最开始处是SOF token,在SOF内包含有11位的帧号; 每一帧的SOF帧号相比前
    的头像 发表于 08-20 10:32 3104次阅读
    USB/HID及其<b class='flag-5'>基本概念</b>

    电压波动与闪变的基本概念

    如果您是电力系统工程师、电气设备维护人员或者相关专业的学生,应该注意到了有关电能质量的国家标准GB/T 12326-2008是有关电压波动和闪变的,那这两个参数的考核意义是什么?国家标准规定这两个参数如何计算、测量和考核?这篇文章带您全面了解电压波动和闪变的基本概念、重要性以及国家标准的规定。
    的头像 发表于 07-22 14:10 2133次阅读
    电压波动与闪变的<b class='flag-5'>基本概念</b>

    免费分享:一个低成本8电1光+5G|+WI-FI6+ SATA3.0+DPDK融合网关方案

    本帖最后由 jf_83141691 于 2025-7-21 17:59 编辑 硬件特色:1、RK3568 4核2.0G CPU主控方案,默认8G内存,16G板载存储;2、RTL8370M三层
    发表于 07-21 17:56

    SiC MOSFET的基本概念

    随着全球对能源效率和可持续发展的关注不断加深,宽禁带半导体材料的研究与应用逐渐成为电子器件行业的热点。碳化硅(SiC)作为一种重要的宽禁带半导体材料,因其优异的电气和热学特性,正在快速取代传统的硅(Si)器件,尤其是在高功率、高温和高频率应用中。SiCMOSFET(金属氧化物半导体场效应晶体管)在电力电子领域的广泛应用正在推动电源转换效率的提高,并助力实现更高效的电能管理。本文将详细探讨SiCMOSFET的应用领域、性能优势及未来发展趋势。
    的头像 发表于 07-08 16:20 730次阅读

    群延迟的基本概念和仿真实例分析

    在高速数字通信和射频系统中,信号从发送端到接收端的传输过程中会遇到各种失真和畸变。群延迟(Group Delay)作为描述系统相位线性度的重要参数,直接影响着信号保真度和系统性能。本文将深入浅出地介绍群延迟的基本概念、应用场景,并通过仿真示例展示其在实际工程中的重要性。
    的头像 发表于 07-08 15:14 1215次阅读
    群延迟的<b class='flag-5'>基本概念</b>和仿真实例分析

    替代专用硬件!一文梳理开源VPP+DPDK技术和产业界应用实例

    VPP 这一开源技术在通用 CPU 的基础上,实现了传统上需要专门的网络硬件设备(如路由器)和专业的网络操作系统才能达到的性能,以极高的性价比为广大用户带来了开放网络技术的红利。VPP 集成了DPDK项目,通过它直接访问硬件网卡资源。
    的头像 发表于 07-07 17:17 1167次阅读
    替代专用硬件!一文梳理开源VPP+<b class='flag-5'>DPDK</b>技术和产业界应用实例

    浅谈无线通信的基本概念

    从工作频段到信道的划分,再到多址方式、双工方式、调制方式、分集技术和MIMO,这些概念共同作用,使得无线通信能够高效、可靠地进行。随着技术的不断发展,这些基础技术也在不断演进,尤其是在5G系统中,新的多址方式、双工技术和更复杂的MIMO系统都为未来的通信提供了更多的可能性。
    的头像 发表于 07-04 11:34 1065次阅读

    第十三章 通讯的基本概念

    本章介绍通讯基本概念,包括串行/并行、全双工/半双工/单工、同步/异步通讯,还提及通讯速率中比特率与波特率的概念
    的头像 发表于 05-22 17:29 1747次阅读
    第十三章 通讯的<b class='flag-5'>基本概念</b>

    芯片设计之握手协议

    本文主要介绍握手的基本概念,读者可通过该篇文章对握手有个基本概念
    的头像 发表于 05-14 09:16 963次阅读
    芯片设计之握手协议

    无线通信的基本概念

    在当今这个信息爆炸的时代,无线通信已经深入到我们生活的每一个角落。从手机通话、Wi-Fi 上网,到蓝牙耳机、智能手表,无线通信技术让我们的生活变得更加便捷和高效。但你知道吗?这一切的背后,都离不开神秘的电磁波。今天,就让我们一起揭开无线通信的神秘面纱,深入了解它的原理和奥秘。 一、电磁波:无线通信的基石 1. 电磁波的产生 要理解无线通信,我们首先要从电磁波说起。电荷是电场的源头,静止的电荷产生静止的电场,而运动的电荷则产生变化的电场。当电荷定向移动形成电流时,其周围就会存在变化的电场。变化的电场又会产生磁场,均匀变化的电场产生稳定的磁场,非均匀变化的电场则产生变化的磁场。反过来,变化的磁场又会产生变化的电场,电场和磁场就这样在空间中交替变化、相互耦合,向前传播,形成了电磁波。简单来说,电场和磁场的关系就是:变化的电场产生磁场,变化的磁场产生电场。 2. 电磁波的传播特点 电磁波是一种横波,它由同相振荡且互相垂直的电场与磁场在空间中衍生发射,以波动的形式传播,具有波粒二象性。电磁波的传播不需要介质,在真空中也能以光速传播。其传播方向垂直于电场与磁场构成的平面,电场方向、磁场方向和传播方向三者互相垂直。 二、电磁波的频率特性与频谱 1. 电磁波频率特性 电磁波有几个重要的属性:频率、周期和波长。 频率(f):指单位时间(1 秒)内,电磁波传播完整波形的个数。频率越高,就像小步快跑,单位时间内传播的波形越多;频率越低,则像大步流星,单位时间内传播的波形越少。 周期(T):是传输一个完整波形的电磁波所需要的时间。 波长(λ):传播一个完整波形所传输的物理距离,即电磁波向前奔跑的 “步长”。波长与频率成反比,波长越长,频率就越低;波长越短,频率越高。 2. 电磁波频谱 为了更好地了解各种电磁波,人们将它们按照波长或频率、波数、能量的大小顺序进行排列,形成了电磁波谱。从电磁波谱中可以看出,无论是无线电波、红外线,还是光、微波,其本质都是电磁波。无线通信的本质就是利用不同频率的电磁波承载信息。频率越高,在相同时间内可以承载的信息越多,数据速率越高;频率越低,承载的信息越少,数据速率越低。 无线电频谱是电磁波谱的一个子集,涵盖了 9kHz 到 300000GHz 之间频率的电磁波。无线频谱中的波在接收器解码之前是不可见也不可听的,所有无线信号都是通过空气传输的。不同的无线服务与不同的无线频谱区域相关联,例如 AM 广播使用 535 到 1605kHz 之间的频率。 三、无线通信原理 1. 无线通信术语 频率:单位时间内完成周期性变化的次数,描述周期运动频繁程度的量。 频带:将电磁波按频率划分为若干频率连续且宽度一定的区段,即一个电磁波频率连续的频率范围。 带宽:电磁波频带的宽度,在无线通信中,使用一段频率连续的电磁波传播信息,带宽就是电磁波信号的最高频率与最低频率的差值,用 Hz 表示。带宽越大,承载的信息量越大。 2. 无线通信的原理 无线通信是利用电波信号可以在自由空间中传播的特性进行信息交换的一种通信方式。它主要包括以下几个方面: 无线信号发射:通过发射天线产生的电磁波进行传输。信号发送方将数据转换为模拟信号,经过调制、信号放大等过程后,通过天线将信号发射出去。 空间传播:发射的信号在空间中自由传播,但传输过程中会遇到各种干扰,如多径效应(信号在传播中反射、散射等造成的多重信号)。因此,无线通信技术采用频率、编码等方式来提高传输的稳定性和可靠性。 信号接收:通过具有接收功能的天线,将传输中的电磁信号接收回来,经过解调等过程后还原成原始数据,使接收方可以获取到原始数据。 信号处理:接收的信号在数字信号处理中进行解码、去噪、恢复等处理,使得信号能够被准确地识别和处理,达到最终的通信目的。 四、无线通信的常见类型 无线通信有多种类型,常见的包括: Wi-Fi 通信:无线局域网技术,可用于传输数据和连接互联网,具有移动性、无需线缆、随时连接的优势。 蓝牙通信:短距离无线通信技术,可用于连接个人设备,如手机、耳机、蓝牙音响等,具有高速率、低功耗、安全性高等优点。 NFC 通信:近场通信技术,主要用于近距离的两个设备之间直接通信,如付款、数据传输等,通信速率快、交互简单、安全性高。 4G/5G 通信:第四 / 五代移动通信技术,用于无线网络数据传输,具有高速率、宽带、低延迟、高可靠性等优点,支持视频流媒体、云存储、短信通信等。 红外通信:利用红外线在空气中进行数据传输的技术,可用于电视遥控、文件传输、通讯等方面,但通讯距离短、易受遮挡等限制。
    发表于 02-28 13:45

    WIFI的基本概念介绍

    在当今数字化高度普及的时代,WIFI 技术已然成为人们生活、工作与学习中不可或缺的一部分。无论是在家中惬意地浏览网页、观看视频,还是在办公室里高效地处理文件、进行线上会议,又或是在公共场所便捷地连接网络,WIFI 都为我们提供了无缝的网络接入体验。但究竟什么是 WIFI 技术呢? WIFI是一种基于 IEEE 802.11 标准的无线局域网(WLAN)技术。简单来说,它允许电子设备在无需物理线缆连接的情况下,通过无线信号相互通信并接入互联网。其核心
    的头像 发表于 02-05 11:44 3958次阅读

    如何理解电磁波谱的基本概念

    电磁波谱是物理学中一个重要的概念,它涵盖了从极低频率到极高频率的所有电磁波。这些波以波的形式传播,不需要介质,可以在真空中传播。电磁波由电场和磁场组成,它们相互垂直,并且都垂直于波的传播方向。电磁波
    的头像 发表于 01-20 16:32 2342次阅读

    HTTP 协议的基本概念

    HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式、超媒体信息系统的网络协议。HTTP 是互联网上应用最为广泛的协议之一,它定义了客户端(比如浏览器)和服务器之间请求和响应的格式。 1. HTTP协议概述 HTTP协议基于TCP/IP协议之上,主要规定了客户端与服务器之间的通信规则。它允许客户端通过发送请求来获取服务器上的资源,服务器则根据请求返回相应的响应。HTTP协议是无状态的,意味着每个请求都是独立的,服务器不会保
    的头像 发表于 12-29 15:12 2230次阅读

    了解虚拟电厂的基本概念

    虚拟电厂的基本概念: 虚拟电厂是一种基于现代信息技术和能源互联网的能源管理模式,它将分散的、可再生能源和储能设备通过虚拟化技术进行集成和管理,形成一个具有集中调度、统一运营和优化控制的虚拟化电力系统
    的头像 发表于 12-24 17:12 2062次阅读
    了解虚拟电厂的<b class='flag-5'>基本概念</b>