DPDK内存篇(四):18.11及早期版本

作者简介

Anatoly Burakov: 英特尔软件工程师,目前维护DPDK中的VFIO和内存子系统。

导读

这是有关DPDK内存管理功能系列文章的最后一篇,之前的文章集中于介绍DPDK内存管理背后的一般概念,从而深入概述了各种输入输出虚拟地址(IOVA)相关选项,并描述了DPDK 17.11中与内存相关的功能,本文涵盖了有关DPDK内存管理的所有最新的和最重要的知识。

DPDK 18.11版本是长期支持的发行版本,其内存管理功能是在18.05和18. 08发行周期内重做DPDK内存子系统所完成的工作成果。与DPDK 17.11相比,面向用户的API貌似没有什么变化,但实际上内部变化翻天覆地,还新加入了许多以前根本不可能实现的新功能和API。

动态内存管理

DPDK 18.11的最大变化是可以在运行时增加和减少内存使用量,从而消除了DPDK内存映射为静态的情况,这带来了许多可用性方面的改进。

在DPDK 17.11中,运行没有任何环境抽象层(EAL)参数的DPDK应用会保留所有可用的大页内存供其使用,且不会为其他应用程序或其他DPDK实例留下任何大页内存。对于DPDK18.11而言情况有所不同,DPDK仅保留应用运行所必须的内存量。在这种意义上,DPDK现在性能更好,并且使DPDK与其他应用程序完美配合所需的工作也更少。

同样,不再需要事先知道应用程序的内存需求,DPDK的内存映射可以动态增加和减少,因此DPDK内存子系统可以根据需要自动增加其内存使用量,并在不再需要时将内存返回给系统。这意味着部署DPDK应用程序所需的工作更少,因为现在DPDK可以自行管理其内存需求。

DPDK 18.11和IOVA连续性

DPDK 18.11中的一项基本后台更改是,不能保证虚拟地址(VA)连续内存是IOVA连续的;两者之间不再有任何关联。在作为VA模式的IOVA下,IOVA布局仍然像以前一样遵循VA布局,但是在作为PA模式的IOVA下,PA布局是任意的(物理页面要向后映射并不罕见)。

      图1. DPDK版本之间的IOVA布局比较

这种改变并不像看起来那样具有颠覆性,因为实际上没有多少数据结构需要IOVA连续内存。所有软件数据结构(环,内存池,哈希表等)仅需要VA连续内存,而不在意底层物理内存布局。这使得在早期DPDK版本上工作的大多数用户应用程序可以无缝过渡到新版本,而无需更改代码。

尽管如此,某些数据结构确实需要IOVA连续内存(例如,硬件队列结构),对于这些情况,引入了新的分配器标志。使用此标志,可以使memzone分配器尝试分配IOVA连续的内存。

旧版模式

早期版本的DPDK(17.11或更早版本)通过在初始化时按其物理内存地址对所有大页面进行排序来保留大量IOVA连续内存。在18.11中,情况不再如此,因为内存是在运行时以逐页的粒度保留并释放的。这意味着除非DPDK在以VA模式的IOVA中运行,否则可能不会有大

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值