Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(二)

VM/容器桌面的远程控制

可以使用两种方法将虚拟机(VM)中的桌面内容远程到主机:

  1. Hyper-V 显示适配器
  2. 终端会话远程控制

使用 RDP(远程桌面)连接到 VM 时,将使用终端会话远程处理。

Hyper-V 管理器使用 VMConnect 应用程序来显示 VM 桌面。 VMConnect 在两种模式下工作:

  1. 增强模式,它使用终端会话远程处理。
  2. 使用 Hyper-V 显示适配器的基本模式。

VM 工作进程和 VM 内存

启动 VM 或容器时,作系统会在主机上创建以下进程:

  1. VM 工作进程 (vmwp.exe)
  2. VM 内存进程(vmmem.exe)

Vmwp 包含各种虚拟设备驱动程序,包括 vrdumed.dll、用于半虚拟化图形适配器的驱动程序。

vmmem 进程虚拟地址空间是来宾中 vGPU IO 空间的后备空间。 当访客访问 IO 空间时,生成的物理地址是进入二级转换的入口,该转换使用 vmmem 进程的页表。

在虚拟化环境中,当虚拟机运行时,通常在主机上用户进程的上下文中运行的各种 KMD DDI 调用将在 vmmem 进程的上下文中执行。

Dxgkrnl 为这些进程创建单个 DXGPROCESS(以及相应的 KMD 进程对象),本文中称为 VM 工作进程。 与 DXG VM 工作进程相关的 EPROCESS 为 vmmem。

VM 进程

在来宾 VM 中创建 DXGPROCESS 时,Dxgkrnl 在主机上创建相应的 DXGPROCESS 对象。 本文中此过程称为 VM 进程。 与 DXGPROCESS 关联的 EPROCESS 是 vmmem。

来自 VM 或 VM 分配创建的所有渲染操作都是在 VM 的 DXGPROCESS 上下文中完成的。

出于调试目的,Dxgkrnl 通知 KMD 哪个进程是 vm 工作进程或 DxgkDdiCreateProcess中的 VM 进程。 使用此信息,驱动程序可以将 VM 进程链接到 VM 工作进程。 此信息有助于在多个 VM 运行时进行调试。

驱动程序要求

支持 GPU 半虚拟化的 KMD 需要设置 DXGK_VIDMMCAPS::ParavirtualizationSupported 功能。

用户模式驱动程序(UMD)不应在专用驱动程序数据(指针、句柄等)中使用任何与进程上下文相关的数据。 相反,KMD 在不同的进程上下文中获取主机中的专用数据。

来宾中的 UMD 无法与主机中的 KMD 共享内存。 它必须使用 UMD 中 注册表访问中所述的函数来访问注册表。

当前的半虚拟化实现使用 VM 总线在来宾与主机之间通信。 最大消息大小为 128KB。 目前,Dxgkrnl 不会将信息分块发送。 因此,驱动程序需要限制通过创建对象传递的专用数据的大小。 例如,当 Pfnd3dddiAllocatecb 用于创建多个分配时,总消息大小包括标头、全局专用数据,以及每个分配专用数据的大小乘以分配数。 所有这些信息都需要放入单个消息中。

在全屏模拟模式下运行应用程序

应启用间接显示适配器进行远程控制(默认已启用)。 若要禁用它,请执行以下步骤。

  1. 开始编辑组策略
  2. 导航到计算机配置 ->管理模板 ->Windows 组件 ->远程桌面服务 ->远程桌面会话主机 ->远程会话环境
  3. 打开“使用 WDDM 图形显示驱动程序进行远程桌面连接”项
  4. 选择“禁用”并选择“确定”
  5. 重新启动

默认情况下启用对 VM 中全屏应用程序的 DXGI 支持。 若要禁用它,请使用 StagingTool.exe /disable 19316777。

全屏应用程序必须在模拟全屏模式下运行。

为所有 DXGI 应用程序启用 eFSE,并为交换效果转换为 WDDM 2.0 设置最低 WDDM 版本:

  1. D3DEnableFeature.exe /enable DXGI_eFSE_Enablement_Policy
  2. D3DEnableFeature.exe /setvariant DXGI_eFSE_Enablement_Policy 7

默认情况下,eFSE 为 D3D9 应用程序启用。

VM 中的 DriverStore

主机上的驱动程序二进制文件位于驱动程序存储 %windir%\system32\drivers\DriverStore\FileRepository<DriverDirectory>。

对于半虚拟化,VM 中的 UMD 二进制文件应位于 %windir%\system32\drivers\HostDriverStore\FileRepository<DriverDirectory>。

主机 KMD 会报告 UMD DLL 的名称,其中包含驱动程序存储空间的完整路径。 例如,c:\windows\system32\DriverStore\FileRepository\DriverSpecificDirectory\d3dumd.dll。

当 VM 请求 UMD 名称时,该名称将转换为 <VmSystemDrive>:\windows\system32\HostDriverStore\FileRepository\DriverSpecificDirectory\d3dumd.dll。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值