DOCA 文档 v2.10.0

DOCA DevEmu Virtio

注意

此库在 alpha 级别提供支持;不保证向后兼容性。

DOCA DevEmu Virtio 是 DOCA 设备仿真子系统的一部分,它引入了底层软件 API,为使用 NVIDIA® BlueField® 的设备仿真功能开发和操作 virtio 设备提供了构建块。此子系统包含一个核心库,用于处理各种 virtio 设备类型(如 virtio-FS)的通用逻辑。其主要职责之一是管理 virtio 规范中概述的标准“设备重置”过程。此核心库是实现不同 virtio 设备类型之间共享功能的基础,确保设备操作和行为的一致性和效率。

DOCA 提供对通过 PCIe 总线仿真 virtio 设备的支持。PCIe 传输通常用于 virtio 设备。与 PCIe 相关的配置、发现和功能(如 MSI-X 和 PCIe 设备热插拔/拔出)通过 DOCA DevEmu PCI API 进行管理。这种模块化设计使 DOCA 设备仿真子系统中的每一层都能管理其自身的业务逻辑,并促进与其他层的无缝集成,确保整个系统中独立的功能和操作。

此子系统还包括各种 virtio 设备类型(例如,virtio-FS 设备库)的设备特定库。

从主机的角度来看,准虚拟化设备、DOCA 仿真设备和实际硬件设备之间没有区别。主机在任何情况下都使用相同的 virtio 设备驱动程序来操作设备。

Virtio 设备仿真是 DOCA 设备仿真子系统的一部分。因此,建议事先阅读以下指南

DOCA DevEmu Virtio 仅在 BlueField 目标上受支持。

BlueField 必须满足以下要求

  • DOCA 版本 2.7.0 或更高版本

  • BlueField-3 固件 32.41.1000 或更高版本

信息

库必须以 root 权限运行。

DOCA DevEmu Virtio 核心库提供以下软件抽象

  • Virtio 类型 – 扩展了 PCIe 类型,表示仿真 virtio 设备的通用/默认 virtio 配置

  • Virtio 设备 – 扩展了 PCIe 设备,表示仿真 virtio 设备的实例

  • Virtio IO 上下文 – 表示一个进度上下文,负责处理 virtio 描述符及其关联的 virtio 队列

DOCA DevEmu Virtio 库不提供配置 virtio 设备整个 BAR 布局的 API,因为此配置在内部完成。但是,该库提供 API 来配置通用配置结构中的某些寄存器(请参阅 Virtio 设备)。

Virtio 通用配置

根据 virtio 规范,通用 PCIe 配置结构布局如下

virtio_pci_common_cfg

复制
已复制!
            

struct virtio_pci_common_cfg { /* About the whole device. */ le32 device_feature_select; /* read-write */ le32 device_feature; /* read-only for driver */ le32 driver_feature_select; /* read-write */ le32 driver_feature; /* read-write */ le16 config_msix_vector; /* read-write */ le16 num_queues; /* read-only for driver */ u8 device_status; /* read-write */ u8 config_generation; /* read-only for driver */   /* About a specific virtqueue. */ le16 queue_select; /* read-write */ le16 queue_size; /* read-write */ le16 queue_msix_vector; /* read-write */ le16 queue_enable; /* read-write */ le16 queue_notify_off; /* read-only for driver */ le64 queue_desc; /* read-write */ le64 queue_driver; /* read-write */ le64 queue_device; /* read-write */ le16 queue_notify_data; /* read-only for driver */ le16 queue_reset; /* read-write */ };

DOCA DevEmu Virtio 核心库提供了使用适当的 setter 配置某些列出的寄存器的能力。

Virtio 类型

virtio 类型扩展了 PCIe 类型,并描述了仿真 virtio 设备的通用/默认配置,包括通用 virtio 配置空间寄存器(如 num_queuesqueue_size 和其他)。

Virtio 类型当前为只读(即,只有 getter API 可用于检索信息)。以下方法可用于此目的

  • doca_devemu_virtio_type_get_num_queues – 用于获取关联 virtio 设备的 num_queues 寄存器的默认初始值

  • doca_devemu_virtio_type_get_queue_size – 用于获取关联 virtio 设备的 queue_size 寄存器的默认初始值

  • doca_devemu_virtio_type_get_device_features_63_0 – 用于获取关联 virtio 设备的 device_feature 位(0-63)的默认初始值

  • doca_devemu_virtio_type_get_config_generation – 用于获取关联 virtio 设备的 config_generation 寄存器的默认初始值

默认 virtio 类型由 virtio 设备特定类型(例如,virtio-FS 类型)扩展,不能按需创建。

Virtio 设备

virtio 设备扩展了 PCIe 设备。在使用 DOCA DevEmu Virtio 设备之前,建议阅读 DOCA DevEmu PCI 设备DOCA Core 上下文配置阶段 的指南。

virtio 设备由 virtio 特定设备(例如,virtio FS 设备)扩展,不能按需创建。

Virtio 设备配置

可以配置 virtio 设备上下文以匹配应用程序用例并优化系统资源利用率。

强制配置

强制配置如下

  • doca_devemu_virtio_dev_set_num_required_running_virtio_io_ctxs – 设置要绑定到 virtio 设备上下文的所需运行 virtio IO 上下文的数量。在将此数量的运行 virtio IO 上下文绑定到 virtio 设备上下文之前,virtio 设备上下文不会移动到 running 状态(根据 DOCA Core 上下文状态机)。

  • doca_devemu_virtio_dev_event_reset_register – 注册 virtio 设备重置事件。此配置是强制性的

可选配置

可选配置如下

  • doca_devemu_virtio_dev_set_device_features_63_0 – 设置 device_feature 位(0-63)的值。如果未设置,则默认值取自 virtio 类型配置。

  • doca_devemu_virtio_dev_set_num_queues – 设置 num_queues 寄存器的值。如果未设置,则默认值取自 virtio 类型配置。

  • doca_devemu_virtio_dev_set_queue_size – 为所有 virtio 队列设置 queue_size 寄存器的值。如果未设置,则默认值取自 virtio 类型配置。

事件

根据 DOCA Core 架构,DOCA DevEmu Virtio 设备公开异步事件以通知突发更改。

信息

通用事件在 DOCA DevEmu PCI 设备事件DOCA Core 事件 中描述。

重置事件

重置事件允许用户在设备驱动程序初始化设备重置流程时接收通知。收到此事件后,保证在重置流程完成之前,不会通过任何关联的 virtio IO 上下文将进一步的请求路由给用户。

要完成重置流程,用户必须

  1. 将所有未完成的请求刷新回与请求关联的 virtio IO 上下文。

  2. 执行以下操作之一

    • 调用 doca_devemu_virtio_dev_reset_complete

    • 遵循 FLR 流程

      1. doca_ctx_stop – 停止 virtio 设备及其关联的 virtio IO 上下文,并等待设备及其关联的 virtio IO 上下文转换到 idle 状态

      2. doca_ctx_start – 启动 virtio 设备及其关联的 virtio IO 上下文,并等待设备及其关联的 virtio IO 上下文转换到 running 状态

现在,设备及其关联的 virtio IO 上下文应再次完全运行,设备可以经由任何关联的 virtio IO 上下文路由新请求。

Virtio IO

virtio IO 上下文扩展了 DOCA Core 上下文。在使用 DOCA DevEmu Virtio IO 之前,建议阅读 DOCA Core 上下文配置阶段 的指南。

此上下文与单个 DOCA virtio 设备关联,并在启动时绑定到 virtio 设备上下文。virtio IO 上下文是一个线程不安全的对象,由单个 DOCA Core 进度引擎 处理。通常,用户为应用程序服务使用的每个 BlueField 核心配置单个 virtio IO 上下文。

virtio IO 上下文负责将新的传入 virtio 请求路由到应用程序,并将处理后的请求完成回设备驱动程序。它只能在 running 状态且其关联的 virtio 设备也处于 running 状态时路由请求。

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