虚拟设备可以仿真一个物理设备,也可以是半虚拟化(para-virtualized)设备(没有确切对应的物理设备存在的虚拟设备)。

虚拟设备(或vdev)只存在于虚拟化环境中。它们是在虚拟机管理器层上运行的软件代码,要么仿真一个物理设备,要么提供物理设备所提供的功能,而不仿真任何特定的物理设备。

要使用vdev,客户机需要一个驱动程序,就像在非虚拟化环境中,它需要一个驱动程序来使用物理设备一样。

一个vdev可能永远不会访问物理设备,或者它可以充当一个中介,既直接响应客户机,又在客户机和物理设备之间传递请求和响应。

在虚拟机管理器系统中,虚拟机管理器在qvm进程中为托管客户机的VM提供vdev。托管在VM中的客户机接收来自虚拟设备的中断并向它发送信号,就好像它在处理物理硬件设备一样。客户机与系统上的任何物理设备没有直接通信;甚至可以不存在这种物理设备。

客户机需要为它将要使用的每个vdev提供一个设备驱动程序,就像它在非虚拟化环境中运行并访问物理设备时需要一个设备驱动程序一样。

虚拟机管理器支持以下类型的虚拟设备:

  • 仿真vdev(Emulation vdevs)
  • 半虚拟化设备(Para-virtualized devices)

注意:

如果没有QNX支持,当前的虚拟机管理器版本不支持用户创建的vdev。如果您实现的虚拟机管理器系统,需要不包含在此版本中的vdev,请联系您的QNX代表,通过QNX工程服务(QNX Engineering Services)为您编写vdev。

仿真vdev(Emulation vdevs)

仿真vdev(或简称vdev)是一种虚拟设备,它为客户机仿真实际的物理设备。以下是QNX虚拟化环境中的仿真vdev的关键特性:

  • 要使用vdev,客户机不需要知道它是在虚拟化环境中运行的。它与这些设备的交互和物理设备完全相同,并且没有迹象表明它正在工作在虚拟设备上,或者可能没有任何硬件设备被调用。
  • vdev仿真一个实际的物理设备(例如x86 pckeyboard)。事实上,有些vdev(比如pckeyboard)的存在,仅仅是因为运行在x86平台上的客户机希望它在那里。
  • 仿真的物理设备可能存在于系统上,也可能不存在于系统上。
  • 根据物理设备的类型,仿真vdev可以自己处理所有事情(例如,仿真计时器芯片vdev-timer8254),也可以充当客户机和实际物理设备(例如,vdev-ser8250)之间的中介。
  • 客户机为vdev使用的设备驱动程序,可以是与被仿真的物理设备在非虚拟化环境中运行时相同的设备驱动程序。

半虚拟化设备(Para-virtualized devices)

半虚拟化设备是一种虚拟设备。它们是运行在虚拟化管理器层中的软件代码,但是这些代码不仿真任何特定的硬件设备。

相反,半虚拟化设备提供的功能可能由非虚拟化环境中的物理设备(或多个物理设备)提供,但没有仿真一些硬件的限制。

典型的半虚拟化设备有在客户机内部(前端front-end)运行的代码和在客户机外部(后端back-end)运行的代码;例如,在客户机中运行的文件系统设备驱动程序连接到在虚拟机管理器宿主机中运行的块设备驱动程序。

半虚拟化设备的主要特征包括:

  • 要使用半虚拟化设备,客户机必须知道它是在虚拟化环境中运行的。例如,要使用virtio-net,客户机必须知道它是在一个虚拟化环境中运行的,这是因为virtio-net没有相应的物理设备(它仅作为一个半虚拟化设备存在)。
  • 不存在与半虚拟化设备完全对应的物理设备。
  • 客户机必须有适当的驱动程序和接口来使用半虚拟化设备。

半虚拟化设备需要一些初始投资(例如,编写驱动程序),但是这些设备通常比必须仿真硬件组件的vdev更有效。例如,仿真控制台终端的串口接口可能导致客户机中多次退出和返回。而virtio-console驱动程序(一个半虚拟化的串口接口)提供了相同的功能,但是在客户机中开销更少。

提示:

半虚拟化设备不是必须是VirtIO设备;VirtIO只是一个方便且当前流行的标准。