kvm之虚拟化原理-IO虚拟化【理论知识】
1、基础知识
1.1、常见io设备
对服务器来说的必备IO设备:
外存设备: 硬盘、光盘、U盘
网络设备: 网卡
显示设备: VGA
键盘鼠标: ps/2, usb
1.2、io原理(以网卡为例)
主机用户空间中的一个程序,发出一个信息报文,通过系统调用,由内核调用该设备的驱动程序,由主机硬件中的网卡设备将信息报文输出
2、虚拟机操作宿主机的资源的方式
实现虚拟机操作宿主机的资源的方式很多,主要是通过以下几种方式来实现:模拟、半虚拟化、透传、硬件虚拟化
2.1、模拟
完全使用软件来模拟真实的常见的硬件使用场景。
虚拟主机用户空间中的一个程序,发出一个信息报文,通过系统调用,由内核调用该设备的驱动程序,由主机硬件中的网卡设备将信息报文输出,该信息交给宿主机的hypervisor上对应的网卡设备,然后把该网卡
接收到的信息暂存到IO栈中,然后调用宿主机的网卡设备驱动,经宿主机网卡将该信息报文发出去。
缺点:
虚拟机上的设备驱动以及虚拟网卡发送信息所做的工作和hypervisor是重复的。
物理硬件的性能发挥60%左右
2.2、半虚拟化
借助硬件虚拟化功能,将设备驱动分成两部分,前端驱动和后端驱动,前端驱动是虚拟机专用的,后端驱动是统一使用的。 虚拟主机用户空间中的一个程序,发出一个信息报文,通过系统调用,内核不做任何处理,直接由该设备的虚拟驱动程序--前端驱动,该信息交给宿主机的hypervisor上对应的网卡设备,然后把该网卡接收到的信 息暂存到IO栈中,然后调用网卡驱动--后端驱动,经宿主机网卡将该信息报文发出去。 这样就省略了虚拟机中重复调用驱动发送信息的动作。 可以使用物理硬件95%的性能 缺点: 前后端驱动的方法只适用于硬盘和网卡设备,显卡设备的虚拟,一般使用frame buffer机制来实现。目前显卡的虚拟,可以在Centos7上使用半虚拟化方式来实现。
2.3、透传
宿主机上有多块盘,每个虚拟机直接使用一块专用盘,像这种场景方法就叫IO透传。前提是我们的硬件必须支持响应的透传技术.
宿主机上的hypervisor管理所有的存储设备,然后分配给VM虚拟机一个专用的存储设备,虚拟机使用的时候,直接通过内核空间中的设备驱动,操作该分配的存储设备。
2.4、硬件虚拟化
传统的x86架构的设备有一个集中式的管理设备叫DMA(直接内存访问),它是一种加速io访问性能的方式,在它内部有一个IOMMU,它可以进行IO寄存器和IO设备端口的自动映射工作。
如果在宿主机用DMA,所有的虚拟机都连接一个DMA,所以虚拟机io设备的调用必须在IOMMU级别上实现隔离,VT-d就是基于北桥的硬件辅助的虚拟化技术,提高了IO设备的可靠性、灵活性和性能。