DPDK内存篇(二)——深入学习IOVA

本文深入探讨了DPDK中的IO虚拟地址(IOVA)模式,包括作为物理地址(PA)和虚拟地址(VA)的IOVA模式。文章强调了选择正确IOVA模式对DPDK性能的影响,并介绍了DPDK环境抽象层(EAL)参数、用户空间IO(UIO)驱动程序和VFIO内核驱动程序。作为VA的IOVA模式提供更连续的内存分配和非root权限运行,而作为PA的IOVA模式适用于所有硬件但需要root权限。DPDK推荐使用VFIO驱动程序,支持IOVA作为PA和VA模式,以利用IOMMU的优势。
摘要由CSDN通过智能技术生成

引言

上一篇文章中,我们介绍了数据平面开发工具包(DPDK)内存管理背后的主要概念和原理,也探讨了它们对DPDK拥有绝佳性能所做出的贡献。但是,DPDK远比这些概念与原理复杂,需要正确配置才能充分的利用系统的潜力。而其中,选择正确的内核驱动和IOVA模式可能是最为关键的,但这也取决于要运行的应用及其运行前的环境。本篇文章将介绍可选的几种不同配置选项。

环境抽象层(EAL)参数

环境抽象层(EAL)是DPDK的核心。它是DPDK的一个库。顾名思义,它负责抽象出环境(硬件、操作系统等)并为软件提供统一的接口。EAL要处理很多东西,所以也不难理解为何它会是DPDK中最复杂的一个部分。由EAL负责处理的包括:

  • 管理CPU核心和非统一内存访问(NUMA)节点
  • 将硬件设备的寄存器映射到内存中,使它们可受DPDK轮询模式驱动程序(PMDs)驱动
  • 管理硬件和软件中断
  • 抽象出平台差异,如字节序、缓存行大小等
  • 管理内存和多进程同步
  • 提供与原子、内存屏障和其他同步原语共通的独立于平台和操作系统的方法
  • 加载和枚举硬件总线,设备和PMD

以上只罗列了EAL的部分功能,但这足以体现它对于DPDK的重要性。因此,DPDK中大量配置与EAL有关也不足为奇。目前,可以通过(直接或间接地)为DPDK初始化例程指定命令行参数对EAL进行配置。DPDK应用命令行通常如下所示:

./app <EAL command-line   parameters> -- <application-specific command-line parameters>

某些使用DPDK的应用(如OvS-DPDK)可能会对用户隐藏此步骤,因此可能不需要明确指定EAL命令行参数,但尽管如此此步骤还是会在后台进行。

IO虚拟地址(IOVA)模式

DPDK是一个用户态应用框架,使用DPDK的软件可以像其他软件一样使用常规虚拟地址。但除此之外,DPDK还提供了用户态PMD和一组API,以实现完全以用户态执行IO操作。前一篇文章也已经提到过,硬件不能读取用户空间虚拟地址;它使用的是IO地址——物理地址(PA)或IO虚拟地址(IOVA)。

DPDK API对物理和IO虚拟地址不作区分,即使不是由IO内存管理单元(IOMMU)提供VA部分,也都以IOVA来代表两种地址。但DPDK却会区分物理地址用作IOVA的情况,和IOVA与用户空间虚拟地址匹配的情况。它们在DPDK API中被称为IOVA模式,可分为两种:作为PA的IOVA模式,和作为VA的IOVA模式。

作为物理地址(PA)的IOVA模式

作为PA的IOVA模式下,分配到整个DPDK存储区的IOVA地址都是实际的物理地址,而虚拟内存的分配与物理内存的分配相匹配。该模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值