Windows 图形显示驱动开发-WDDM 3.2-GPU-P 设备上的实时迁移(一)

news/2025/3/4 11:31:32/

本文介绍了通过 SR-IOV(单根 I/O 虚拟化)分区虚拟化的异构计算设备(GPU、NPU 等)实时迁移的功能设计。 通过 WDDM 和 MCDM 驱动程序模型支持分区的设备现已成为我们虚拟化产品不可或缺的一部分。 因此,必须支持实时迁移并帮助我们的虚拟化抽象实现最大程度的可靠性,以避免资源分配必须改变时对客户造成的影响。 本文还介绍了这些设备的快速迁移。

从 Windows 11 版本 24H2 (WDDM 3.2) 开始支持实时迁移。 更广泛地说,它是 GPU 半虚拟化 (GPU-P) DDI 的扩展,用于公开该功能的驱动程序。 实施 GPU-P 虚拟化接口的 MCDM 驱动程序也可选择实施这些实时迁移接口,包括其与分流事件的扩展。

在本文中,“GPU”仅指实施 GPU-P 虚拟化框架的设备,无论是 WDDM 还是 MCDM,也无论是 GPU、NPU 还是其他异构计算设备。

资源迁移的种类和目的

资源迁移是将虚拟化移动到新物理资源的功能。 移动虚拟化执行有多种方式,包括:

  • 硬关机。 虚拟主板可直接断电,从而停止执行虚拟资源。 任何不具有电源容错的应用程序都会丢失正在运行的数据,并且所有设备状态都会被清除。 然后,虚拟硬盘 (VHD) 可以在不同的主机上虚拟化,从而实现冷启动。

  • 软关机。 这种关机与硬关机不同,它只是向来宾 OS 发送关机请求。 然后,来宾 OS 将断电机制分配给应用程序,以便彻底关机。 应用程序可利用此通知安全地存储所有数据,并在启动时注册重启,但这取决于每个应用程序的编程。 软关机要求来宾 OS 支持这种完全关机机制,并支持适当的服务来存储当前状态并在重启时重新启动。

  • 休眠。 另一种来宾启动技术允许来宾过渡到快速启动的睡眠电源状态,在这种状态下,所有应用进程都会被冻结,设备状态会被清除到 CPU 内存中,然后所有内存都会被发送到存储空间,以便让硬件关闭电源。 然后,可以在另一台机器上重新启动虚拟机存储 VHD,并加载内存、还原设备状态和解冻进程。 只有支持的来宾 OS 才能使用休眠功能。 这是一个相当具有侵入性的过程,依赖于客户机的稳定性,但它提供了一种机制来还原应用程序进程的状态,这是关机机制所不能提供的。

  • 快速迁移(也称为 VM 保存和还原)。 利用这种技术,VM 会暂停(vCPU 停止调度),并在主机 OS 中收集还原新物理资源状态所需的所有状态,包括 VM 的内存和所有设备的状态。 然后,此状态会被传输到新主机,新主机会创建一个已加载所有 vCPU 上下文的 VM,将内存映射到 VM 空间并还原设备状态。 然后,PowerOnRestore 会重新启动 vCPU 的执行。 此技术独立于来宾 OS,不依赖于客户环境中的执行,因此是比休眠更可靠的保持进程和设备状态的方法。 虚拟化用户可能会注意到明显的停机时间,因为 VM 内存可能会有很多 GB,传输时间也会很明显。

  • 实时迁移。 如果我们有能力在虚拟化资源仍处于活动状态的情况下传输内容,并且可以跟踪被弄脏的内容,那么就可以在保持虚拟化处于活动状态的情况下传输大量内容。 这样,当 VM 暂停时,需要传输的内容就会大大减少,我们就能最大限度地减少不执行虚拟化的时间。 这样做能够最大限度地减少对终端用户的影响,因为迁移过程中发生的所有操作都不会受到影响,对资源消耗率的影响也会尽可能地降低。 特别是,这样可以最大限度地减少或消除中断期限(虚拟化中断的外部时间限制,如外部端点的 TCP 和其他协议超时)。

每一个进展都会减少或消除客户对虚拟化物理分配变化的一些(通常是主要的)感知,从而让虚拟化对用户越来越完整和透明。 它与其他将客户对基础设施的依赖性分离出来的技术(如主机崩溃隔离)一起,它让我们的虚拟化解决方案朝着分配独立和真正的短暂计算的理想方向发展。

大规模设计

实时迁移会将虚拟化内容从源主机传输到目标主机。 虚拟化由各种有状态设备组成,包括内存、计算和存储设备,每个设备都有必须从源设备传输到目标设备的数据。 跨群集管理虚拟化的执行代理会与主机通信,让主机知道要为现有虚拟机的源迁移(当内容离开主机时)或向新虚拟机的目标迁移(接收内容)设置编排。 这种互动的主要参与者如下图所示。

源主机的时期

下图演示了源端迁移状态。

源端启动

一般情况下,当主机启动时,KMD 会通过各种初始化调用向内核报告设备能力。

当 KMD 收到 DXGKQAITYPE_GPUPCAPS 数据的 DxgkDdiQueryAdapterInfo 调用时,它可以设置添加到 DXGK_GPUPCAPS 的 LiveMigration 能力位。 当 KMD 设置该位时,它表示驱动程序支持实时迁移。

支持实时迁移的前提条件是支持跟踪所有 GPU 本地内存段上已修改的 VRAM 页面,如脏位跟踪中所述。 该支持通过其他指定信息类型的其他 DxgkDdiQueryAdapterInfo 调用进行报告。 报告支持实时迁移的驱动程序还必须报告支持脏位跟踪。 支持实时迁移但不支持脏位跟踪的配置无效,并且 Dxgkrnl 无法启动适配器。

VM 在线

一旦主机启动并且管理堆栈上线,虚拟机活动就会开始上线。 启动和停止 VM 的请求开始到达,我们开始看到 GPU-P vGPU 被投射到这些虚拟化中。

假定具备高性能脏位平面能力,Dxgkrnl 将在为 VF(虚拟函数)预留 VRAM 资源后调用 DxgkDdiStartDirtyTracking,这样将允许系统在 VF 稍后参与迁移的情况下跟踪 VRAM 的清洁度。

此 VM 启动后会开始拦截中断表访问以虚拟化中断支持,而这将在 VM 的整个生命周期内持续进行。

实时迁移发送准备

管理堆栈会根据控制指示发送开始实时迁移的事件,迁移状态机管理会从虚拟设备中收集虚拟化期间不可更改的所有状态(vGPU 分区配置指标),以便在目标上重建 vGPU。 准备就绪后,传输缓冲区的准备和传输栈的初始化过程就会开始。

此时期生成对引入的 DxgkDdiPrepareLiveMigration DDI 的调用。 KMD 应制定 PF/VF 调度策略,以便让实时迁移能够从主机的 VRAM 中流式传输脏内容,同时为 VF 保持公平的性能。 如果脏追踪被报告为不执行,则脏追踪也会从这一点开始。


http://www.ppmy.cn/news/1576527.html

相关文章

应急响应靶场练习-知攻善防

前言:学了一些应急响应的知识后,懵懵的,不就是查看一些文件嘛然后分析嘛,但是总感觉并没有完全掌握。于是就想找一些靶场进行练习,之后就利用搜索引擎找一些应急响应的靶场,目前能找到的真不多啊&#xff0…

【Word2Vec】Skip-gram 的直观理解(深入浅出)

01 什么是skip-gram 一句话来说就是,给定中心词,然后预测其周围的词: 02 模型结构 对于skip-gram来说,输入是一个[1 x V]维的ont-hot向量,其中V为词表大小,值为1的那一项就表示我们的中心词。经过一个[V x…

清华北大DeepSeek六册

「清华北大-Deepseek使用手册」 链接:https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理) 1-6版本链接:https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …

Cherno C++ P60 为什么不用using namespace std

这篇文章我们讲一下之前写代码的时候的一个习惯&#xff0c;也就是不使用using namespace std。如果我们接触过最早的C教程&#xff0c;那么第一节课都会让我们写如下的代码&#xff1a; #include<iostream>using namespace std;int main() {cout << "Hello …

DeepSeek开源周:全面革新AI基础设施技术的盛宴

在2025年2月24日至28日&#xff0c;DeepSeek举办了备受瞩目的开源周活动&#xff0c;期间连续五天发布了一系列覆盖AI基础设施全链路的核心技术项目。这些项目横跨计算优化、通信加速、并行策略、存储系统等多个关键维度&#xff0c;为AI领域的发展注入了强大的动力&#xff0c…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…

【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元

第七届人文教育与社会科学国际学术会议&#xff08;ICHESS 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 一、Spring Boot简介 1.1 Spring Boot的诞生背景 1.2 Spring Boot的核心特性 二、搭建开发环境 2.1…

Spring Boot 整合 JMS-ActiveMQ,并安装 ActiveMQ

1. 安装 ActiveMQ 1.1 下载 ActiveMQ 访问 ActiveMQ 官方下载页面&#xff0c;根据你的操作系统选择合适的版本进行下载。这里以 Linux 系统&#xff0c;Java环境1.8版本为例&#xff0c;下载 apache-activemq-5.16.7-bin.tar.gz。 1.2 解压文件 将下载的压缩包解压到指定目…