note:这里主要记录我对IO虚拟化的理解,希望这篇文章对想了解虚拟化IO的同学有点帮助。这是我在看论文[vale,a switched ethernet for virtual machines]的时候总结的有关io虚拟化技术,概括性的和思考结果比较多,细节内容比较少。
我们假设现在大部分的计算机服务都迁移到了虚拟化环境中(其实是事实),带来的主要好处是资源共享并减少开销。虚拟机也是需要访问外围设备的,比如磁盘和网络。即使在非虚拟化环境中访问网络也是很有挑战性的技术(应用程序使用系统调用),所以到了虚拟机这一层面,访问网络,要达到硬件的速度很困难。所以要怎么处理虚拟化I/O呢?主要有三种方法来虚拟化I/O,分别是全虚拟化,半虚拟化以及Direct I/O accsss。他们在处理guest和hypervisor通信以及hypervisor和host架构上分别采用了不同的处理方式。
全虚拟化
最简单的方法就是给guest操作系统一个虚拟网络接口。然后由hypervisor拦截下虚拟机的Accesses (to critical