实战DDA硬件直通:Hyper-V虚拟机直通NVMe固态硬盘

虚拟机可以把一台电脑模拟成许多台完整的系统,并在他们当中安装运行各自的操作系统和软件应用。在使用虚拟机的时候我们既可以利用NVMe固态硬盘的性能,同时承载多个虚拟机的读写请求,也可以让其中某个需要重负载读写的虚拟机独享它的性能,这时就需要用到DDA硬件直通。

图片1.jpg

DDA离散设备分配通常被玩家称“硬件直通”,它是Windows Server 2016之后版本中Hyper-V所具备的特性,微软为它赋予了直通独立显卡和NVMe固态硬盘的能力。还有一些玩家利用该功能成功直通了第三方SATA控制器等硬件。

图片2.jpg

笔者使用了东芝RD500 1TB NVMe固态硬盘作为试验对象。RD500是铠侠(原东芝存储)在2019年末发布的新一代旗舰级NVMe固态硬盘,使用PCIe 3.0 x4接口、NVMe 1.3协议,由8通道东芝主控搭配96层堆叠的BiCS4闪存。

图片3.jpg

Hyper-V虚拟机中硬盘有三种使用方式:虚拟硬盘、直接使用物理硬盘、DDA硬件直通。

虚拟硬盘方式:默认的选项,可以自由指定容量大小,可以在多个虚拟机之间共享硬盘。虚拟机设备管理器中磁盘驱动器名称为“Microsoft虚拟磁盘”。

图片4.jpg

使用物理硬盘:在磁盘管理中让东芝RD500处于“脱机”状态后,可以将其整体用于单个虚拟机独享,虚拟机设备管理器中直接显示RD500的名称,但存储控制器中没有NVMe控制器。但这种模式下虚拟机并不是直接访问硬件设备,效率没有下面要说的DDA硬件直通高。

图片5.jpg

DDA硬件直通:由单个虚拟机直接访问并控制硬件。硬件直通常见于直通显卡,可在虚拟机内高效玩游戏。这里笔者将东芝RD500 1TB固态硬盘直通给指定的虚拟机,使其获得强悍的硬盘性能,可用于数据库等重负载读写硬盘的应用。

图片6.jpg

三种模式下CrystalDiskMark测速对照:DDA硬件直通模式在随机读写性能上更强。

图片7.jpg

DDA硬件直通模式下,在虚拟机内可以直接使用CrystalDiskInfo或SSD Utility工具箱软件识别和管理东芝RD500,而在其他两种模式下无法识别到NVMe固态硬盘。

图片8.jpg

DDA硬件直通实现步骤:

DDA硬件直通需要CPU支持并开启虚拟化功能,在英特尔平台上需开启VT-d,AMD平台需开启SVM Mode。除此之外,为了满足SR-IOV的要求,主板还需要开启IOMMU特性(并非所有主板都具备该功能)。

图片9.jpg

在将东芝RD500直通给虚拟机之前,首先需要在宿主机设备管理器中禁用RD500对应的“标准NVM Express控制器”,并在属性中找到“位置路径”,记录下它的值。然后以管理员身份打开Windows Powershell,执行Dismount-VMHostAssignableDevice –Force –LocationPath 位置路径,将RD500从宿主机中脱离。然后再执行Add-VMAssignableDevice –VMName 虚拟机名称 –LocationPath 位置路径,将RD500挂载至指定的虚拟机上。

图片10.jpg

需要将直通给虚拟机的RD500收回给宿主机管理和使用时,首先关闭虚拟机,在宿主机PowerShell中执行Remove-VMAssignableDevice –LocationPath 位置路径 –VMName 虚拟机名称,接触RD500与虚拟机的关联。然后执行Mount-VMHostAssignableDevice –LocationPath 位置路径,将RD500重新挂载至宿主机系统。

总结:

DDA是Hyper-V中为虚拟机提供硬件直接访问的高级功能,允许虚拟机单独使用显卡或高性能NVMe固态硬盘,在VMWare ESXi中也有类似的功能。

随着个人电脑CPU核心数量的增长,越来越多的DIY硬件发烧友希望打造多合一的家庭服务器。利用东芝RD500的强劲效能可以同时满足多个虚拟机应用的访问需求,也可以利用DDA特性将其直通给指定的某个虚拟机,使其获得接近于物理机的磁盘IO效能。