华为虚拟化平台软件:Xen、Kvm等。基于Xen自主研发FusionCompute;
虚拟化范围:服务器虚拟化、存储虚拟化、网络虚拟化等,这里指的是服务器虚拟化;
虚拟化作用:是云计算的基础,通过虚拟化构建虚拟化资源池,由云资源管理平台进行调度,形成产品(如云主机),面向租户提供服务;
虚拟化优点:资源利用率提升、降低能耗(DPM)、提高IT运维效率(DPM)、操作系统与硬件解耦(指的是guest os与硬件解耦);
虚拟化的本质:分区(资源必须分割)、隔离(互相不影响)、封装(保存为文件)
虚拟机的重要概念:VM(虚拟机)、PM(物理机,含操作系统)、BM(裸金属服务器)、在进行虚拟化时硬件特性依然保持;
虚拟化与模拟的区别:虚拟化将底层硬件资源抽象化逻辑化形成可切片的资源池,提供与底层硬件相同的特性;而模拟不需要硬件支持;
虚拟化分类:完全虚拟化(workstation、virtual PC)、半虚拟化(kvm、xen、hyper-V、esxi等)、操作系统虚拟化(docker);
资源分类:计算资源(CPU、内存、IO设备)、存储资源、网络资源;
CPU指令集分类:ring0~ring3。其中ring0属于内核态,可以直接驱动硬件。ring3属于用户态;
软件虚拟化:由VMM来进行虚拟化,VM不需要与硬件直接打交道;
完全虚拟化:虚拟机并不知晓其运行在虚拟化环境中,此时VMM运行在ring0,guest OS运行在ring1,app运行在ring3上。当guest OS可能发送一些特权指令,但由于其运行在ring1中,此时会产生错误,由VMM进行捕获后,进入陷入状态。此后又VMM进行转换后成为安全的虚拟化指令,此时成为陷入-模拟。但是在X86架构下,有19条非特权指令能够影响宿主机,这叫做虚拟化漏洞。对于完全虚拟化是这样解决的:通过BT(binary transform)来将这些非特权指令转换成安全指令执行,不由VMM进行捕获;
半虚拟化:通过修改内核来识别哪些是敏感指令,对于敏感指令通过hypercall的方式发送给VMM进行处理,对于非特权指令直接发送给硬件执行;
虚拟化性能计算:每个VM的VCPU数量不能超过宿主机逻辑核的数量,VCPU建议总数量根据VM的负载决定,当负载较轻时,复用率可以取值在1到2之间;当负载较重时,复用率可以取值1,具体计算方式如下:路数核心数超线程数量(默认是2)复用率;而负载轻或是重可以根据VCPU利用率30%为分界;
内存虚拟化:其原理为从虚拟机虚拟内存地址(GVA)映射到虚拟机物理地址(GPA)再映射到宿主机物理地址(MA),需要进行两次映射。通常有两种实现方式:第一种软件实现方式,由每个VM所对应的VMM来完成从GVA到MA的映射,另外一种是硬件实现方式,如EPT等;
内存超分配:通过内存服用技术来实现,其典型应用为物理内存为8G、虚拟机内存之和达到12G,这就是内存超分配。内存服用技术主要有三种:内存共享(用于读,如果有写需求,复制到另一块区域进行写)、内存置换(对于VM中的冷数据放置到宿主机存储上)、气球压缩(当某台VM的内存利用率较低时,腾挪出一部分内存)等。华为的虚拟化平台UVP会智能采用以上三种技术来实现内存超分配;
IO虚拟化:即外设资源的虚拟化,常用模型为前后端驱动模型。其中最重要的是Dom0,其内部整合了大量的硬件驱动,可以绕过VMM与硬件打交道。而VMM很精简。具体IO流程如下:当VM需要与IO设备交互时,通过其前端驱动与Dom0上的后端驱动交互,由Dom0上的原生驱动直接与硬件交互,然后返回结果。特例是网卡IO虚拟化,通过使用VMDQ或SR-IOV,不需要VMM来参与,对于前者为每一个VM分配一个独立的device queue,对于后者直接为每个VM分配一个独立的网卡,这两种方式有点占用主机计算资源少,缺点是失去了虚拟化平台的一些特性,如热迁移等;