Type-1 管理程序非易失性内存隔离

Type-1 Hypervisors non-volatile memory isolation

管理程序将同一台物理机器上的不同 OS 运行 相互隔离。在此定义中,也存在非易失性存储器(如硬盘驱动器或闪存)分离。

考虑 Type-2 管理程序时,很容易理解它们如何分离非易失性内存,因为它们只是使用底层 OS 的文件系统实现来分配不同的 "hard-drive files" 到每个虚拟机。

但是,当我开始考虑 Type-1 管理程序时,问题变得更难了。他们可以使用 IOMMU 来隔离不同的硬件接口,但在系统中只有一个非易失性内存接口的情况下,我看不出它有什么帮助。

因此实现它的一种方法是将一个设备分成 2 个 "partitions",并让管理程序解释来自 VM 的调用并决定调用是否合法。我不热衷于非易失性接口的通信协议,但 管理程序必须熟悉这些协议 才能做出结论,这听起来(也许)有点矫枉过正.

还有其他方法可以实现这种隔离吗?

是的,您是对的,管理程序必须熟悉这些协议才能实现隔离。 开销主要取决于协议。像基于 NVMe 的 SSD 基本上可以在 PCIe 上工作,一些 NVMe 设备支持 SR-IOV 这大大减少了工作量,但有些不会给 hyperviosr 留下负担。

大多数情况下,此支持是在构建时配置的,例如将向每个来宾分配多少内存、每个来宾的命令权限等,当来宾发送命令时,管理程序会验证其边界并相应地转发它们。

那么为什么在这种情况下没有像 MMU 或 IOMMU 这样的支持呢? 有数百种具有不同协议、NVMe、AHCI 等的此类设备,如果供应商开始支持这些设备以实现更好的虚拟化,他最终将得到一个无法容纳的巨大芯片。