kvm随笔(一)

1、kvm是全虚拟化、xen是准虚拟化

kvm属于内核的一部分,xen类似于替换内核(2005年intel开发出了xen3.0,开始支持intel的VT和IA64,至此xen可以跑没有修改的操作系统,2010年内核社区接纳xen,linux3.0内核主干对xen支持越来越好)

全虚拟化有无可比拟的优势,因为准虚拟化需要修改客户操作系统,因此不支持windows

2、软件虚拟化与硬件虚拟化

软件虚拟化如qemu,对物理平台的访问与截获,说白了就是在硬件与软件中多了一层软件,效率可想而知。

硬件虚拟化是硬件处理器支持虚拟化,效率大大提高。

3、kvm本身不执行任何模拟

需要用户空间的qemu进行模拟

4、kvm可以使用linux支持的任何存储来存储虚拟机镜像

包括具有IDE、SCSI和SATA的本地磁盘,网络附加存储(NAS),或者支持iSCSI和光前通道SAN

5、kvm的原生磁盘格式为QCOW2

支持快照,徐云多级快照、压缩和加密

6、x86下的两种虚拟化模型

物理硬件-虚拟机监控器-操作系统:此种模型的代表有微软的Hyper-V、xen以及VMware的ESX/ESXi,该模型会有一特殊的虚拟机提供用户的管理操作。

物理硬件-操作系统-虚拟机监控器:kvm属于这类。

7、kvm模块

kvm模块是kvm虚拟机的核心部分,其主要功能是初始化CPU硬件,打开虚拟化模式,然后将xuni客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。

8、关于CPU过载的使用

最不推荐的做法让某一个客户机的vCPU数量超过物理系统上存在的CPU数量。比如,拥有4个逻辑CPU的宿主机中,同时运行一个或多个客户机,其中每个客户机的vCPU数量多于4个(如16个)。这样的使用方法会带来比较明显的性能下降,其性能反而不如为客户机分配2个(或4个)vCPU的情况,而且客户机中负载过重,可能会让整个系统运行不稳定。不过,在并非100%负载的情况下,一个或(多个)有4个vCPU的客户机运行在拥有4个逻辑CPU的宿主机中并不会带来明显的性能损失。

9、CPU独占

第一步:启动宿主机时隔离指定数量CPU(修改grub)

第二步:启动客户机(指定了CPU数量),使用taskset命令将QEMU进程和vCPU线程绑定到指定物理CPU

10、内存过载

一般来说客户机操作系统上的应用程序并非一直100%的利用其分配到的内存,并且宿主机上的多个客户机一般也不会同时达到100%的内存使用率,所以内存过载分配是可行的,一般来说有如下三种方式实现内存过载使用:

1)内存交换(swapping):用交换空间来弥补内存不足

2)气球(ballooning):通过virio_balloon驱动来实现宿主机Hypervisor和客户机之间的协作

3)页共享(page sharing):通过KSM(Kernel Samepage Merging)合并多个客户机进程使用的相同内存页

如何计算应该分配的交换空间大小以满足内存的过载使用:

某个服务器有32GB的物理内存,想在其上运行64个内存配置1GB的客户机。在宿主机中,大约需要4GB大小的内存来满足系统进程、驱动、磁盘缓存及其他应用程序所需内存(不包括客户机进程所需内存)。计算过程如下:

客户机所需交换分区为:64 x 1GB+4GB-32GB=36GB。

根据Redhat的建议[注释],对于32GB物理内存的RHEL系统,推荐使用8GB的交换分区。

所以,在宿主机中总共需要建立44GB(36GB+8GB)的交换分区来满足安全实现客户机内存的过载使用。

kvm随笔(一)


上一篇:windows下PHP批量生成打包android程序APK-渠道txt植入apk文件


下一篇:2017版:KVM 性能优化之内存优化