总结自用
- 0.什么是虚拟化技术?
- 1.为什么要用虚拟化(虚拟化技术的作用和优势)
- 2.KVM如何做CPU虚拟化
- 3.内存虚拟化
- 4.磁盘使用raw/qcow2有什么区别?
- 5.半虚拟化和全虚拟化的区别是什么?kvm和Xen有何区别?分别属于哪种?
- 6.如果对一个VM进程使用kill -9将会发生什么?
- 7.kvm各模式说明
- 8.KVM框架包含哪些
- 9.kvm的相关组件及作用
- 10.如何对KVM的I/O优化
- 11.如何对KVM内存调优
- 12.虚拟机监控器(VMM)和Hypervisor
- 13.kvm虚拟机的网络配置有哪两种模式?默认使用哪一种?
- 14.常见虚拟机软件
- 15.虚拟化层级和虚拟机与宿主机之间的关系
- 16.虚拟机的启动和运行过程
- 17.虚拟化的性能优化和挑战
0.什么是虚拟化技术?
虚拟化技术是一种将计算机资源(包括计算、存储、网络等)进行抽象化的技术,它可以将物理计算资源划分为多个虚拟环境,使得每个虚拟环境都像独立的物理计算机一样运行。虚拟化技术允许多个虚拟机(VM)共享同一台物理主机,每个虚拟机在其中运行一个完整的操作系统和应用程序。
虚拟化技术的主要目标是提高硬件资源的利用率和灵活性,同时降低部署和维护成本。通过虚拟化,可以在一台物理主机上同时运行多个虚拟机,每个虚拟机都相互隔离,互不干扰。虚拟化技术使得资源的分配和管理更加灵活,可以根据不同应用的需求动态调整资源分配。
常见的虚拟化技术包括全虚拟化和半虚拟化。全虚拟化在虚拟机内运行完整的操作系统,虚拟机不需要对物理硬件进行修改;而半虚拟化需要对虚拟机进行修改,使得虚拟机与物理硬件进行更好的交互。
虚拟化技术在数据中心的部署中广泛应用,它可以提高服务器的利用率,节省硬件成本,并简化服务器的管理和维护。此外,虚拟化技术也被广泛用于开发、测试和应用部署等场景,为软件开发和运维带来了更多便利和灵活性。
1.为什么要用虚拟化(虚拟化技术的作用和优势)
虚拟化技术在计算机和云计算领域发挥着重要作用,带来了许多优势和好处:
- 1.提高资源利用率:虚拟化技术可以将一台物理服务器划分为多个虚拟机,每个虚拟机可以独立运行不同的应用程序和操作系统,从而充分利用物理硬件资源,提高服务器的利用率。
- 2.灵活性和可伸缩性:通过虚拟化,可以根据需求快速创建、启动、停止和迁移虚拟机,从而实现资源的动态分配和管理,使得系统更加灵活和可伸缩。
- 3.硬件资源隔离:虚拟化技术使得多个虚拟机可以在同一台物理主机上运行,但彼此之间是相互隔离的,一个虚拟机的故障不会影响其他虚拟机的运行。
- 4.快速部署和复制:通过虚拟化,可以将整个虚拟机快速部署到其他服务器上,实现系统的快速复制和恢复。
- 5.简化管理和维护:虚拟化技术可以将多个虚拟机集中管理,统一进行配置、监控和维护,简化了系统管理的复杂性。
- 6.节约成本:虚拟化技术可以降低硬件成本,通过在一台物理主机上运行多个虚拟机,减少了服务器数量和数据中心空间的需求。
- 7.高可用性:虚拟化技术可以实现虚拟机的迁移和自动故障转移,从而提高系统的可用性和容错性。
总体而言,虚拟化技术在提高资源利用率、降低成本、简化管理和提高系统灵活性方面具有重要的优势,是现代计算机和云计算环境中不可或缺的重要技术。
2.KVM如何做CPU虚拟化
CPU的虚拟化本质上是时间分片。这里我们用的是KVM来虚拟的。
流程如下:QEMU调用ioctl进入内核,内核读取VMCS,(这里先解释下VMCS,VMCS是异常处理的关键结构,里面存储了客户机,宿主机,陷入退出的各种状态。)把客户机的状态装在到CPU的CS:EIP,然后执行 kvm_exit_handler。如果是I/O引起的,则进入用户模式,执行QEMU
3.内存虚拟化
一般的内存虚拟化都经过了两次的页表转换。 客户机线性地址到客户机物理地址,然后再到宿主机物理地址。 这样经过了两次转换,效率很难提高。于是就出现了影子页表。
这里就不得不说影子页表了。 这里有一张hash表,维护者物理机和客户机的内存地址映射表。 那么如何被建立的呢?
当发生页故障的时候,VMM搜索客户页表,如果不存在客户线性地址VGA到客户机物理地址GPA的转换,那么则返回给虚拟机异常,由虚拟机处理页故障。
如果存在映射关系,则先去寻找QEMU地址空间的主机线性地址 HVA,如果不存在HVA映射到HPA,那么kernel去分配物理地址。 然后VMM可以使用该HPA构建影子页表。至此,影子页表建立完成。
4.磁盘使用raw/qcow2有什么区别?
1.是否支持快照:raw不支持快照,qcow2支持快照;
2.性能:raw性能更好,qcow2性能相比raw差一些;
3.创建磁盘时的磁盘占用:raw创建时就会占用定义的磁盘空间,qcow2会随着系统数据量逐渐占用定义的磁盘空间;
4.是否支持动态扩容:raw不支持动态扩容,qcow2支持动态扩容。
5.半虚拟化和全虚拟化的区别是什么?kvm和Xen有何区别?分别属于哪种?
全虚拟化和半虚拟化都是虚拟化技术的两种主要实现方式。
全虚拟化:全虚拟化是一种在虚拟机中完全模拟物理硬件的技术。在全虚拟化中,虚拟机操作系统不需要进行任何修改,可以运行未经修改的原生操作系统。虚拟化层负责将虚拟机对硬件的访问请求转发到底层的物理硬件。
优点:
1.支持广泛的操作系统:由于虚拟机操作系统不需要修改,因此支持几乎所有的主流操作系统。
2.硬件隔离:虚拟机之间相互隔离,一个虚拟机的故障不会影响其他虚拟机的运行。
缺点:
1.性能较低:由于需要完全模拟硬件,全虚拟化的性能相对较低。
2.较高的开销:虚拟化层需要处理复杂的虚拟机和硬件之间的转发,导致虚拟化开销较高。
半虚拟化:半虚拟化是一种在虚拟机中修改了部分操作系统代码的技术。在半虚拟化中,虚拟机操作系统需要通过一组特殊的API调用来访问底层硬件,而不是直接访问物理硬件。
优点:
1.较高的性能:由于虚拟机操作系统经过修改,直接调用虚拟化层提供的API,减少了虚拟化开销,因此性能较高。
2.较低的开销:半虚拟化的虚拟化层开销相对较低。
缺点:
1.支持有限:由于需要修改操作系统代码,因此半虚拟化只能支持特定的操作系统。
至于Xen和KVM,它们都是虚拟化技术,但属于不同的类型。
- Xen:Xen是一种半虚拟化和全虚拟化技术的混合。它最初是作为半虚拟化技术开发的,意味着它需要操作系统进行一些修改才能在Xen上运行。然而,随着硬件支持的增加,Xen也可以提供全虚拟化。但Xen操作复杂,维护成本比较高。
- KVM:KVM(Kernel-based Virtual Machine)是一种全虚拟化技术。它是Linux内核的一部分,可以让Linux内核充当虚拟机监视器。KVM可以运行多种未经修改的操作系统,包括Windows和各种Linux发行版。
6.如果对一个VM进程使用kill -9将会发生什么?
从客户机的角度来看,就如你猛地把电源线从主机上拔出一样。从主机的角度来看,进程被杀掉,进程占用的所有资源被释放。
7.kvm各模式说明
有三种模式:用户模式,内核模式,客户模式。
- 客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下
- 用户模式:用户执行I/O代码,QEMU运行在这个模式下,QEMU调用一系列的ioctl就可以进入内核模式
- 内核模式:CPU调度和内存管理相关,KVM内核模块运行在该模式下,内核模式再调用kvm_create等函数就可以进入客户模式
但是如果虚拟机出现了异常或者常见的缺页中断或者I/O操作的时候呢,他是没有权限对全局资源进行操作的, 这样就会被VMM,这里也就是KVM进行捕获,然后捕获之后呢再跳转到用户模式调用QEMU进行I/O操作。所以说内核模式其实是个中间变量,专门用来进行错误发现的时候的转换的。
8.KVM框架包含哪些
KVM分为了两个模块,一个是KVM Driver,另一个是QEMU。前者负责CPU和内存的虚拟化,后者负责IO的虚拟化。用户空间的QEMU调用一系列的ioctl()函数进入内核空间,然后内核空间再调用一系列函数进入Guest OS客户空间运行虚拟机。
9.kvm的相关组件及作用
libvirt:虚拟机管理工具,提供了多种语言接口的API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持KVM,而且支持Xen等其他虚拟机。
qemu-kvm:KVM模块
qemu-kvm-tools:KVM调试工具,可不安装
qemu-img:qemu组件,创建磁盘、启动虚拟机等
virt-manager:图形界面管理虚拟机
virt-install:构建虚拟机的命令行工具
bridge-utils:桥接网络支持工具
libguestfs-tools:虚拟机管理包,包含virt-filesystems、virt-list-partitions、virt-df等命令。
10.如何对KVM的I/O优化
调优KVM的I/O调度算法,centos7默认的是deadline,使用命令将参数改为noop并查询。
cat /sys/block/vda/queue/scheduler
echo noop > /sys/block/vda/queue/scheduler
cat /sys/block/vda/queue/scheduler
11.如何对KVM内存调优
kvm大页:所谓的大页指的是内存的大页面,内存采用的是分页机制,内存默认的页面大小都是4KB,假如系统里的一个应用程序需要2MB的内容,如果操作系统还是以4KB小页为单位,那么内存里就要有512个页面 (512*4KB=2M),所以在TLB里就需要512个表项以及512个页表项,因此操作系统就要经历512次的TLB miss和512次的缺页中断才能将2MB的应用程序空间全部映射到物理内存里。必然操作数量会大大增加,从而 间接的影响性能。
使用cat命令,只查看当前系统有多少大页,然后设置大页数量为20并查看,接着使用命令使配置永久生效,最后将大页挂载到/dev/hugepages/
上。
cat /proc/meminfo | grep HugePages
echo 20 > /proc/sys/vm/nr_hugepages
cat /proc/meminfo | grep Hugepages
sysctl -w vm.nr_HugePages=20
mount -t hugetlbfs huagetlbfs /dev/huagepages/
12.虚拟机监控器(VMM)和Hypervisor
虚拟机监控器(Virtual Machine Monitor,VMM)和Hypervisor是两个相同或类似的概念,它们都是用于管理虚拟化环境的软件或固件。
1.虚拟机监控器(VMM):
虚拟机监控器是一种管理和控制虚拟机的软件层,也称为虚拟机管理程序(Virtual Machine Manager)。VMM位于宿主机(Host Machine)的操作系统之上,负责创建、运行和管理多个虚拟机。它是虚拟化技术的核心组件,提供虚拟机对硬件资源的访问,并对虚拟机的运行进行监控和调度。
2.Hypervisor:
Hypervisor是虚拟机监控器的另一种称呼,特指一种能够在宿主机上同时运行多个虚拟机的软件或固件。Hypervisor可以分为两种类型:
- 第一类Hypervisor(裸金属Hypervisor):这种Hypervisor直接运行在宿主机的硬件之上,没有操作系统作为中间层。它直接控制硬件资源,负责虚拟机的创建、管理和调度。由于没有操作系统的额外开销,第一类Hypervisor通常具有较高的性能和资源利用率。示例包括VMware ESXi和Microsoft Hyper-V Server。
- 二类Hypervisor(主机操作系统Hypervisor):这种Hypervisor运行在宿主机的操作系统之上,作为操作系统的一个进程运行。它通过操作系统来访问硬件资源,并在操作系统之上实现虚拟化功能。第二类Hypervisor相对于第一类Hypervisor来说,性能稍低,但它更易于部署和管理,可以在常见的操作系统上运行。示例包括VMware Workstation和Oracle VirtualBox。
13.kvm虚拟机的网络配置有哪两种模式?默认使用哪一种?
- NAT模式:也是用户模式,数据包由NAT方式通过主机的接口进行传送,可以访问公网,但是无法从外部访问虚拟机网络,kvm默认用的这种网络。
- Bridge:也就是桥接模式,这种模式允许虚拟机像一个独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。
14.常见虚拟机软件
常见的虚拟机软件包括:
- 1.VMware Workstation:适用于个人和开发者的虚拟化软件,支持多种操作系统,提供强大的虚拟机管理和调试功能。
- 2.VMware vSphere:适用于企业级虚拟化的平台,包括ESXi和vCenter Server,提供高度可靠的虚拟化基础设施和集中式管理功能。
- 3.Microsoft Hyper-V:Windows操作系统内置的虚拟化解决方案,适用于Windows服务器和桌面操作系统。
- 4.Oracle VirtualBox:开源的虚拟化软件,支持多种操作系统,适用于个人和开发者。
- 5.KVM(Kernel-based Virtual Machine):Linux内核自带的虚拟化模块,提供强大的虚拟化性能和功能。
- 6.Xen:开源虚拟化软件,支持全虚拟化和半虚拟化,常用于服务器虚拟化。
- 7.Docker:容器化平台,不同于传统虚拟机的全虚拟化,Docker使用容器技术实现应用程序的隔离和部署。
- 8.QEMU:开源虚拟化软件,支持多种架构和操作系统,可用于仿真和虚拟化。
15.虚拟化层级和虚拟机与宿主机之间的关系
虚拟化可以分为多个层级,每个层级都负责不同的虚拟化功能。以下是虚拟化的层级和虚拟机与宿主机之间的关系:
- 1.硬件层虚拟化:该层级直接运行在物理硬件上,也称为裸机虚拟化。在这个层级上,虚拟化软件(例如Hypervisor或VMM)直接管理硬件资源,并在宿主机上运行多个虚拟机。虚拟机与宿主机之间是完全隔离的,每个虚拟机都以独立的操作系统运行。
- 2.操作系统层虚拟化:该层级是在宿主操作系统上运行的,通过在宿主操作系统中创建多个容器或虚拟环境来实现虚拟化。这些容器共享宿主操作系统的内核,因此它们更加轻量级和高效。容器之间相互隔离,但与宿主操作系统共享资源。
虚拟机与宿主机之间的关系取决于虚拟化的层级:
- 在硬件层虚拟化中,虚拟机直接运行在虚拟化软件之上,虚拟化软件负责管理和分配硬件资源,同时隔离虚拟机之间的运行环境。虚拟机与宿主机是完全隔离的,宿主机可以同时运行多个虚拟机。
- 在操作系统层虚拟化中,虚拟机是在宿主操作系统中创建的容器或虚拟环境。宿主操作系统共享自己的内核给多个虚拟机,因此它们更加轻量级。虚拟机与宿主机之间是共享资源的关系。
虚拟化技术使得一台物理服务器可以同时运行多个虚拟机或容器,从而充分利用硬件资源,提高了服务器的利用率和灵活性。不同层级的虚拟化适用于不同的场景和需求,可以根据实际情况选择合适的虚拟化方案。
16.虚拟机的启动和运行过程
虚拟机的启动和运行过程涉及多个步骤,主要包括以下几个阶段:
- 1.虚拟机启动:当用户启动虚拟机时,虚拟化软件(例如Hypervisor或VMM)会加载到物理服务器的内存中,并控制系统的启动流程。在硬件层虚拟化中,虚拟化软件直接运行在物理硬件上;在操作系统层虚拟化中,虚拟化软件运行在宿主操作系统中。
- 2.虚拟机创建:在虚拟机启动过程中,虚拟化软件会创建一个或多个虚拟机实例。在硬件层虚拟化中,虚拟化软件会将物理硬件资源划分为多个虚拟资源,并为每个虚拟机分配CPU、内存、网络等资源。在操作系统层虚拟化中,虚拟化软件会创建多个容器或虚拟环境,每个容器相当于一个虚拟机。
- 3.虚拟机初始化:虚拟机启动后,操作系统和应用程序在虚拟机内部运行。虚拟机的初始化包括加载虚拟机的操作系统和其他软件,并初始化虚拟机的各种配置参数。
- 4.虚拟机运行:虚拟机开始运行操作系统和应用程序。在硬件层虚拟化中,虚拟化软件负责管理和分配硬件资源,保证多个虚拟机之间的隔离和资源公平性。在操作系统层虚拟化中,虚拟机共享宿主操作系统的内核,因此它们更加轻量级和高效。
- 5.虚拟机的关机:当用户关闭虚拟机时,虚拟机的操作系统和应用程序会被终止,并释放虚拟机所占用的资源。在硬件层虚拟化中,虚拟化软件负责释放虚拟机使用的硬件资源;在操作系统层虚拟化中,容器会被销毁,并释放其使用的资源。
整个虚拟机的启动和运行过程是由虚拟化软件控制和管理的,它能够实现多个虚拟机在同一台物理服务器上同时运行,并有效地隔离彼此,提高服务器的利用率和资源利用效率。虚拟机技术在云计算和数据中心等领域得到广泛应用,为企业提供了更灵活、高效、可靠的计算资源管理方式。
17.虚拟化的性能优化和挑战
虚拟化的性能优化是确保虚拟化环境下的虚拟机能够尽可能地高效运行,提供接近于物理环境的性能。虚拟化技术的性能优化主要包括以下方面:
- 1.资源管理:虚拟化软件需要合理地分配和管理物理服务器的资源,包括CPU、内存、磁盘和网络带宽等。通过对资源进行动态调整和优化,可以确保虚拟机获得足够的资源以满足其工作负载要求,避免资源争用和过度分配。
- 2.内存优化:虚拟化环境中,多个虚拟机共享物理内存。因此,内存管理是一个重要的优化方向。采用内存压缩、透明页面共享、大页内存等技术可以降低内存的使用量,提高内存的利用率。
- 3.I/O虚拟化:在虚拟化环境中,虚拟机对硬件设备的访问需要经过虚拟化软件进行转发,这可能导致I/O性能下降。优化I/O虚拟化可以减少虚拟化软件的介入,提高I/O性能。
- 4.去除不必要的中间层:一些虚拟化软件可能引入不必要的中间层,导致性能损失。优化的方法是尽量减少虚拟化软件在虚拟机和物理硬件之间的干预,提高直通(passthrough)设备的支持。
- 5.CPU虚拟化:CPU虚拟化是虚拟化环境中的一个重要性能优化点。通过硬件辅助虚拟化技术(如Intel VT和AMD-V),可以加速虚拟机的CPU访问,提高虚拟机的执行效率。
虚拟化的挑战主要包括:
- 1.性能损失:虚拟化软件介入虚拟机和物理硬件之间的访问过程,可能引入性能损失。虽然虚拟化技术已经不断优化,但仍然无法完全消除性能损失。
- 2.资源争用:在多个虚拟机同时运行的情况下,可能出现资源争用的问题。虚拟化软件需要合理地调度和管理资源,以确保虚拟机能够获得足够的资源。
- 3.安全性问题:虚拟化环境中,虚拟机之间共享物理资源,存在隔离性和安全性的挑战。虚拟化软件需要提供强大的安全措施,确保虚拟机之间的隔离性和数据安全。
- 4.虚拟化管理复杂性:虚拟化环境中的管理和配置较为复杂,需要专门的管理工具和技术。虚拟化管理的复杂性增加了运维人员的工作负担。
虚拟化技术的不断演进和优化使得其在云计算和数据中心等领域得到广泛应用。虽然面临一些挑战,但通过合理的优化和管理,虚拟化可以为企业提供高效、灵活的IT资源管理方式。