什么是虚拟化和虚拟化的历史
https://www.redhat.com/zh/topics/virtualization/what-is-virtualization
https://zhuanlan.zhihu.com/p/69629212
虚拟化的含义很广泛,将任何一种形式的资源抽象成另一种形式的技术都是虚拟化技术
虚拟化的目的是充分利用服务器资源,降低成本。
一款名为 Hypervisor (虚拟机监控程序)的软件可有效分隔物理资源,并将这些资源分配给不同虚拟环境(也就是需要这些资源的任务)使用。虚拟机监控程序可能位于操作系统的顶层(例如在便携式计算机上),或者直接安装在硬件上(例如服务器),这是大多数企业使用虚拟化的方式。虚拟机监控程序接管物理资源,并对它们进行划分,以便虚拟环境能够对其进行使用。
用作虚拟机监控程序的物理硬件被称为主机,而使用其资源的虚拟机则被称为客户机。
借助虚拟化技术,用户能以单个物理硬件系统为基础创建多个模拟环境或专用资源。
云计算则由多种规则和方法组合而成,可以跨任何网络向用户按需提供计算、网络和存储基础架构资源、服务、平台和应用。
虚拟机的种类
https://www.redhat.com/zh/topics/virtualization/what-is-a-hypervisor
https://zhuanlan.zhihu.com/p/69629212
第 1 类Hypervisor模型
在hypervisor模型中,VMM是一个完备的操作系统,它除了具备传统操作系统的功能,还具备虚拟化功能。包括CPU、内存和I/O设备在内的所有物理资源都归VMM所有,因此VMM不仅要负责虚拟机环境的创建和管理,还承担着管理物理资源的责任。
虚拟机监控程序(也称为本机或裸机虚拟机监控程序)直接在主机的硬件上运行,以管理虚拟客户机操作系统。它可取代主机操作系统,而虚拟机监控程序会直接向硬件调度 VM 资源。
这一类虚拟机监控程序在企业数据中心或其他基于服务器的环境中最为常见。
这种方式是比较高效的,然而I/O设备种类繁多,管理所有设备就意味着大量的驱动开发工作。
第 2 类Host模型(宿主机)
虚拟机监控程序也称为托管虚拟机监控程序,它在常规操作系统上以软件层或应用的形式运行。
在host模型中,物理资源由host OS管理,host OS是传统操作系统(比如Linux),这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,实际的虚拟化功能由VMM来提供。
VMM作为host OS中一个独立的内核模块,通过调用host OS的服务来获得资源,实现CPU、内存和I/O设备的虚拟化。VMM创建出虚拟机之后,通常将虚拟机作为host OS的一个进程参与调度。
Host模型最大的优点就是可以充分利用现有操作系统的设备驱动程序,VMM不需要为各种I/O设备重新实现驱动,可以专注于物理资源的虚拟化;缺点在于,由于VMM是借助host OS的服务来操作硬件,而不是直接操作硬件,因此受限于host OS服务的支持,可能导致硬件利用的不充分。
从架构上看,由Qumranet公司开发的KVM(Kernel-based Virtual Machine)就是属于host模型的
kvm
基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
QEMU
https://cloud.tencent.com/developer/article/1521505
https://zhuanlan.zhihu.com/p/48664113
虚拟机监管器(Virtual Machine Monitor, VMM)
QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。
QEMU(quick emulator)本身并不包含或依赖KVM模块,而是一套由Fabrice Bellard编写的模拟计算机的自由软件。QEMU虚拟机是一个纯软件的实现,可以在没有KVM模块的情况下独立运行,但是性能比较低。QEMU有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化以及I/O设备的虚拟化。QEMU是一个用户空间的进程,需要通过特定的接口才能调用到KVM模块提供的功能。从QEMU角度来看,虚拟机运行期间,QEMU通过KVM模块提供的系统调用接口进行内核设置,由KVM模块负责将虚拟机置于处理器的特殊模式运行。QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化加速以提高虚拟机的性能。
KVM只模拟CPU和内存,因此一个客户机操作系统可以在宿主机上跑起来,但是你看不到它,无法和它沟通。于是,有人修改了QEMU代码,把他模拟CPU、内存的代码换成KVM,而网卡、显示器等留着,因此QEMU+KVM就成了一个完整的虚拟化平台。
KVM只是内核模块,用户并没法直接跟内核模块交互,需要借助用户空间的管理工具,而这个工具就是QEMU。KVM和QEMU相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备。对于KVM来说,其匹配的用户空间工具并不仅仅只有QEMU,还有其他的,比如RedHat开发的libvirt、virsh、virt-manager等,QEMU并不是KVM的唯一选择。
所以简单直接的理解就是:QEMU是个计算机模拟器,而KVM为计算机的模拟提供加速功能。
而现在流行的KVM虚拟化平台,就是在修改了QEMU代码,把他模拟CPU、内存的代码换成KVM,而网卡、显示器等留着,因此QEMU+KVM就成了一个完整的虚拟化平台。由于KVM运行在内核空间,只是内核模块,QEMU运行在用户空间,实际模拟创建,管理各种虚拟硬件(磁盘,网卡,显卡等)。从KVM的角度来说,用户没法直接跟内核模块交互,需要借助用户空间的管理工具,因此需要借助QEMU这个运行在用户空间的工具。KVM和QEMU相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备并实现和内核空间的KVM的交互,虽然这个交互并不仅仅只有QEMU能够办到。此外,由于QEMU模拟IO设备效率不高的原因,现在常常采用半虚拟化的virtio方式来虚拟IO设备。
QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
virtio和vhost
https://forum.huawei.com/enterprise/zh/thread-465473.html
Virtio半虚拟化:针对Linux的I/O的虚拟化框架
在虚拟化领域,virtio 随处可见。当前,virtio 可以加速 IO、network子系统。
vhost虚拟主机:对virtio-net进行了优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以再内核态得到处理。
完全虚拟化中,guest OS运行于物理机器上的hypevisor上,guest OS并不知道它已被虚拟化,并且不需要任何更改就可以在该配置下工作。半虚拟化中,guest OS不仅知道它运行在hypervisor之上,还包含让guest OS更高效地过渡到hypervisor的代码。
在完全虚拟化模式中,hypervisor必须模拟设备硬件,它是在会话的最低级别进行模拟的。尽管在该抽象中模拟很干净,但它同时也是最低效、最复杂的。在半虚拟化的模式中,guest OS和hypervisor能够共同合作,让模拟更加高效。
vhost将部分virtio驱动的操作从用户态移到内核态,减少了用户态/内核态切换时间和包的拷贝次数,从而更进一步的提升了性能
网友评论