DOCA 文档 v2.10.0

Mmap 建议

DOCA Mmap Advise 用于向 NVIDIA® BlueField® DPU 提供高级内存相关指令,以提高系统或应用程序性能。

注意

要将 DOCA Mmap Advise 与 BlueField 结合使用,设备必须配置为在 DPU 模式下工作,如BlueField 工作模式中所述。

指令中的操作旨在影响应用程序的性能,而不是其语义。这些操作允许应用程序告知 NIC 它期望如何使用某些映射的内存区域,以便 BlueField 的硬件可以选择适当的优化技术。

DOCA Mmap Advise 是一个上下文,并遵循 DOCA Core Context 的架构,建议在继续之前阅读 DOCA Core 页面的以下部分

DOCA Mmap Advise 是 DOCA Core 定义的 DOCA Context。有关更多信息,请参见DOCA Core Context

DOCA Mmap Advise 目前支持以下建议的操作列表

  • 缓存失效操作

缓存失效操作

当数据被 BlueField 的内核处理时,它可能会临时存储在内核的系统级缓存(即 L3 缓存)中。当缓存行被占用并且必须将新数据写入其中时,缓存管理子系统会逐出现有数据,通常基于 LRU 策略,方法是执行写回操作以将此数据存储在主 (DDR) 内存中。当不需要将此数据存储在 BlueField 的内存中时(例如,它是主机数据,在复制到主机的内存后不再需要),缓存的写回操作会浪费内存带宽,从而降低整体系统性能,这是不可取的。避免此写回操作的最简单方法是将适当的缓存行标记为“无效”。这使其能够立即重用,而无需额外的操作。

缓存失效操作有助于使一组缓存行失效。

基于 DOCA Mmap Advise 的应用程序可以在 BlueField 目标上运行。

对象

设备和设备代表

MMAP Advise 上下文需要 DOCA 设备才能运行。该设备用于访问内存并执行复制操作。参见DOCA Core 设备发现

信息

对于同一 DPU,使用哪个设备(即 PF、VF、SF)都无关紧要,因为所有这些设备都使用相同的硬件组件。

注意

只要 MMAP Advise 实例未被销毁,设备就必须保持有效。


内存缓冲区

缓存失效任务需要一个 DOCA 缓冲区,其中包含要失效的地址空间,具体取决于缓冲区的分配模式(请参阅“库存类型”部分中的表格)。要查找支持哪种类型的内存,请参阅“缓冲区支持”部分中的表格。

在缓存失效操作期间,不得修改或读取缓冲区。

要开始使用上下文,用户必须按照DOCA Core Context 配置阶段中所述完成配置阶段。

本节介绍如何配置和启动上下文,以允许执行任务和检索事件。

配置

可以配置上下文以匹配应用程序的用例。

要查找是否支持某个配置,或其最小/最大值是多少,请参阅“设备支持”部分。

强制配置

这些配置是强制性的,必须由应用程序在尝试启动上下文之前设置

  • 必须配置至少一种任务/事件类型。有关任务和/或事件的配置,请分别参见“任务”和“事件”部分。

  • 必须在创建时提供具有适当支持的设备

设备支持

DOCA Mmap Advise 需要设备才能运行。要选择设备,请参阅DOCA Core 设备发现

由于设备功能可能会发生变化(请参阅DOCA Core 设备支持),建议使用以下方法选择您的设备

  • doca_mmap_advise_cap_task_cache_invalidate_is_supported

某些设备公开不同的功能,如下所示

  • 最大缓存失效缓冲区大小可能不同。

缓冲区支持

任务支持具有以下功能的缓冲区

缓冲区类型

缓冲区

本地 mmap 缓冲区

来自 PCIe 导出缓冲区的 MMAP

来自 RDMA 导出缓冲区的 MMAP

链表缓冲区


本节介绍如何使用DOCA Core 进度引擎在 CPU 上执行。

任务

DOCA Mmap Advise 公开异步任务,这些任务根据 DOCA Core 架构利用 DPU 硬件。有关信息,请参见DOCA Core 任务

缓存失效任务

缓存失效任务有助于使一组缓存行失效,防止它们被写回 RAM(从而提高性能)。

任务配置

描述

用于设置配置的 API

用于查询支持的 API

启用任务

doca_mmap_advise_task_invalidate_cache_set_conf

doca_mmap_advise_cap_task_cache_invalidate_is_supported

任务数

doca_mmap_advise_task_invalidate_cache_set_conf

最大缓冲区大小

doca_mmap_advise_task_cache_invalidate_get_max_buf_size

最大缓冲区列表大小


任务输入

DOCA Core 任务中所述的通用输入。

名称

描述

缓冲区

指向要失效的内存的缓冲区


任务输出

DOCA Core 任务中所述的通用输出。

任务完成成功

任务成功完成后

  • 缓存已失效

任务完成失败

如果任务中途失败

  • 如果发生致命错误,上下文可能会进入停止状态

  • 缓存未失效

任务限制

  • 操作不是原子性的

  • 提交任务后,不应读取/写入缓冲区

  • 其他限制在DOCA Core 任务中描述

事件

DOCA Mmap Advise 公开异步事件,以根据DOCA Core 架构通知意外发生的更改。

DOCA Mmap Advise 公开的唯一事件是DOCA Core Event中描述的通用事件。

DOCA Mmap Advise 上下文遵循DOCA Core Context 状态机中描述的上下文状态机。

以下部分描述如何移动状态以及每个状态允许的操作。

空闲

在此状态下,应用程序应执行以下操作

  • 销毁上下文

  • 启动上下文

允许的操作

  • 根据“配置”部分配置上下文

  • 启动上下文

可以通过以下方式达到此状态

上一个状态

转换操作

创建上下文

运行中

在确保所有任务都已释放后调用 stop

停止中

调用 progress 直到所有任务都已完成并释放


启动中

无法达到此状态。

运行中

在此状态下,应用程序应执行以下操作

  • 分配和提交任务

  • 调用 progress 以完成任务和/或接收事件

允许的操作

  • 分配先前配置的任务

  • 提交任务

  • 调用 stop

可以通过以下方式达到此状态

上一个状态

转换操作

空闲

配置后调用 start


停止中

在此状态下,应用程序应执行以下操作

  • 调用 progress 以完成所有正在进行的任务(任务完成失败)

  • 释放任何已完成的任务

允许的操作

  • 调用 progress

可以通过以下方式达到此状态

上一个状态

转换操作

运行中

调用 progress 并且发生致命错误

运行中

在未释放所有任务的情况下调用 stop


DOCA Mmap Advise 仅支持 CPU 上的数据路径。参见“执行阶段”部分。

缓存失效示例

该示例说明了在使用 DOCA DMA 复制内存范围后如何使该范围的缓存失效。

示例逻辑包括

  1. 定位 DOCA 设备。

  2. 初始化所需的 DOCA core 结构。

  3. 使用两个相关缓冲区填充 DOCA 内存映射。

  4. 为每个缓冲区在 DOCA 缓冲区清单中分配元素。

  5. 初始化 DOCA DMA 内存复制任务对象。

  6. 初始化 DOCA Mmap Advise 缓存失效任务对象

  7. 提交 DMA 任务。

  8. 轮询完成情况

    1. 处理 DMA 任务完成 – 在 DMA 任务完成回调主体中提交缓存失效任务。

    2. 处理缓存失效任务完成。

  9. 轮询完成情况。

  10. 销毁 DMA、DOCA MMAP Advise 和 DOCA Core 对象。

参考

  • /opt/mellanox/doca/samples/doca_common/cache_invalidate/cache_invalidate_sample.c

  • /opt/mellanox/doca/samples/doca_common/cache_invalidate/cache_invalidate_main.c

  • /opt/mellanox/doca/samples/doca_common/cache_invalidate/meson.build

© 版权所有 2025,NVIDIA。 上次更新于 2025 年 2 月 12 日。