如何判断一个硬件平台是否支持虚拟化?

对于一个给定的硬件平台,如何判断该硬件平台是否支持虚拟化呢?


为了回答这个问题,需要先了解硬件设备特别是CPU是如何实现虚拟化的。为了理解CPU是如何实现虚拟化的,需要理解两个概念:特权指令和敏感指令。

特权指令:现代CPU一般都会有N个执行权限等级,对于普通的指令,CPU都可以正常执行,但是对于一些操作系统硬件资源的指令,如I/O端口的访问,MMIO寄存器的访问等,CPU需要将当前的运行等级提高才能正确执行这些指令,这些需要提高CPU运行级别的指令才能正确运行的指令就叫做特权指令。

敏感指令:是指当CPU再运行虚拟机的时候,当CPU运行敏感指令的时候,就会触发CPU从虚拟机中退出到Hypervisor/VMM中,由Hypervisor去检测、模拟该指令。

虚拟化环境中因为虚拟机看到的所有硬件都由可能是虚拟的设备,所以当虚拟机对这些设备进行操作的时候,都可能需要由Hypervisor来模拟完成。在正常CPU的运行环境下,CPU对设备的操作都属于特权指令,为了让Hypervisor能够监视到虚拟机对虚拟设备的一举一动,就需要让Hypervisor监视虚拟机所有的特权指令,即特权指令的执行都需要让Hypervisor能够知道,即虚拟机所有的特权指令都是特权指令。这样就能够让虚拟机的所有特权指令都能够陷入到Hypervisor中,让Hypervisor监测或模拟其行为。


当然,如果所有的特权指令都触发虚拟机退出到Hypervisor,这样对性能的影响可能会很大,所以实际实现中,为了提高虚拟机的性能,经常能够在Hypervisor知情的情况下,放宽对某些特权指令的监测,即相当于Hypervisor完全信任虚拟机的某些特权指令,虚拟机可以直接执行,不会触发虚拟机退出。


所以,判断一个硬件平台是否可虚拟化的标准是:所有的特权指令都必须是敏感指令。

如果某个硬件平台的某些特权指令不是敏感指令,则就称该平台是由虚拟化漏洞的。

猜你喜欢

转载自blog.csdn.net/lindahui2008/article/details/80892795