首先是基础知识:

首先是基础知识:

您是否知道是否可以通过 IronHide 运行 Windows VM 以实现显卡加速?我想利用我的显卡玩游戏/看蓝光等。

答案1

也许虚拟客户端中的图形和实际主机操作系统之间的解释会有所帮助。

首先是基础知识:

虚拟客户机中的一切都是抽象的 - 这意味着虚拟客户机操作系统中的每个设备和驱动程序都不依赖于实际的主机设备和驱动程序。

举一个简单的例子。鼠标被视为一个特定的设备 - Linux 内核看到这个设备并允许客户操作系统使用该设备。这个“虚拟设备”通过虚拟化工具(VirtualBox、VMWare、Xen 等)映射到真实的物理设备。因此,客户操作系统永远不需要了解物理鼠标是什么,它只看到虚拟化工具映射到它的内容。这种方法的价值在于您可以将虚拟客户机移动到不同的主机 - 它将以相同的方式运行,因为对主机本身没有直接依赖。

为了在实践中证明这一点,您可以lsusb在主机和客户机上运行 - 在我的主机 O/SI 上有以下 USB 设备:

Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0402:9665 ALi Corp. 
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

在我的客户机 oneiric O/SI 上可以看到以下 USB 设备 - 这些设备与主机不同:

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet

任何客户操作系统(无论是 Windows 还是 Linux)都只能看到这个虚拟客户设备。

主机图形与客户机图形

对于图形来说也是一样。

我的主机图形是:

 sudo lshw -class display
  *-display               
       description: VGA compatible controller
       product: Core Processor Integrated Graphics Controller
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 18
       width: 64 bits
       clock: 33MHz
       capabilities: msi pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:41 memory:90000000-903fffff memory:80000000-8fffffff ioport:3050(size=8)

在我的客户 oneiric O/S 上,它可以看到以下显卡 - 您可以看到它与主机不同:

sudo lshw -class display
  *-display UNCLAIMED     
       description: VGA compatible controller
       product: VirtualBox Graphics Adapter
       vendor: InnoTek Systemberatung GmbH
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: vga_controller bus_master
       configuration: latency=64
       resources: memory:e0000000-e7ffffff

同样 - Windows Guest O/S 将只会看到类似的虚拟客户设备。

在 VirtualBox 的浑浊世界中,新增嘉宾您可以手动安装(或者在 11.10 中 -骑师看到并建议您安装它)会安装额外的内核模块(或 Windows 客户机的设备驱动程序),以允许客户机操作系统增强对主机操作系统图形的访问。同样,它不是直接映射 - 但允许看到 3D 加速图形。

如果虚拟机内的应用程序通过 OpenGL 编程接口(或对于 Windows 客户操作系统 - 其 DirectX 调用)使用 3D 功能,而不是在软件中模拟它们(这会很慢),VirtualBox 将尝试使用主机的 3D 硬件。

我再次强调,客户操作系统看不到您的实际显卡,它只是将来自客户机的 OpenGL(或 DirectX)调用直接传递到主机硬件进行处理。

在此处输入图片描述

在 VirtualBox 设置中,您应该更改视频卡内存和 3D 显卡设置。然后,您的客户操作系统将看到具有 128Mb RAM 的“3D 加速卡”。无论您的主机显卡是否比这更好,您的客户操作系统都只会看到这个“简单”的抽象虚拟显卡。

由于您提到您正在使用 Windows 客户机操作系统 - 2D 复选框适用于您,因为类似传递执行编程接口调用。

Bumblebee/IronHide 是一种非此即彼的图形切换机制 - 您要么使用集成显卡,要么使用容量更大的 NVidia/ATI 显卡,但不能同时使用两者。

由于更高可切换显卡的 OpenGL(或 DirectX)功能比集成芯片组更强,因此您将看到客户操作系统图形密集型应用程序的图形性能相对增强。然而,这种改进并不像在主机上本地运行相同的应用程序那样显著,因为它仍然在 128MB 虚拟客户图形设备的限制内工作。

来源

答案2

上面的答案https://askubuntu.com/a/85138/38052解释了客户操作系统所看到的一切都是某种抽象。虽然这曾经是完全正确的,但我相信事情正在发生变化,可能不再完全正确。

一些较新的处理器还支持 I/O MMU 虚拟化。英特尔版本的技术称为 Intel VT-d,AMD 版本的技术称为 AMD-Vi。引用维基百科关于 x86 虚拟化的文章:

英特尔的 I/O MMU 虚拟化(AMD-Vi 和 VT-d)主要文章:IOMMU

输入/输出内存管理单元 (IOMMU) 使客户虚拟机能够通过 DMA 和中断重映射直接使用外围设备,例如以太网、加速显卡和硬盘控制器。这有时称为 PCI 直通。AMD 和 Intel 都发布了以下规范:

AMD's I/O Virtualization Technology, "AMD-Vi", originally called "IOMMU".
Intel's "Virtualization Technology for Directed I/O" (VT-d).

这听起来很有趣,但我已经预见到了一些问题。首先,在 Optimus 笔记本电脑中,英特尔 IGP 始终在渲染最终的屏幕输出。我不清楚客户操作系统和主机操作系统将如何驱动 IGP。一个想法是,如果可以在客户机运行时运行没有任何图形的主机,那么这可以实现,但我不清楚如何实际做到这一点。

答案3

好的,我很好奇,所以我尝试了这个。

QEMU(现在还有 VirtualBox)支持将 PCI 设备传递到客户机。这意味着如果您有第二张显卡,您可以将其传递到 Linux 主机上的 Windows 客户机,并在虚拟化 Windows 环境中获得完整的 3D 性能(游戏)。对于配备两张显卡的台式机来说就是这样。设备管理器将显示“NVIDIA GTX... 等等”,而不是显示“Virualbox 图形适配器”。

Optimus 总是更复杂。我正在 ASUS UX501 上测试它。我能够将 NVidia 芯片传递给 Windows 客户机,它在设备管理器中显示为“3D 视频控制器”。但我无法安装任何 Windows 驱动程序来支持它。似乎英特尔显卡的存在是先决条件。

sarang 的怀疑是正确的。看起来 nvidia 芯片并不是驱动显示器的“显示适配器”,而只是集成英特尔芯片的加速器。它们似乎不能独立作为两个独立的设备运行。

答案4

https://gist.github.com/Misairu-G/616f7b2756c488148b7309addc940b28

在某些情况下可以通过 DGPU(参见上面的链接)。我已经在我的 Dell 7710 上实现了这一点,使用 Quadro m5000m DGPU 从 Ubuntu 主机传递到 Windows10 客户机。

但是据我所知,无法通过硬件在笔记本电脑的主屏幕上显示此卡的输出。我认为窥镜可能是目前最好的选择,其次是家庭流媒体/ RDP 中的 steam 等。

我想知道为什么不能仅控制多路复用笔记本电脑中的 Mux 来随意在 IGPU 和 DGPU 之间切换。我尝试通过 VGA Switcheroo 进行此操作,但甚至在通过 DPU 传递到客户操作系统之前就无法控制多路复用器。

我猜没有 Mux 的笔记本电脑会更具挑战性,至少需要客户机和主机之间进行一些通信来控制哪个 GPU 正在写入帧缓冲区的哪个位。这超出了我的理解范围。

相关内容