kvm-1

虚拟化:KVM,vmware,openvz,xen

//国内用的最多的是KVM,vmware

//国外大厂商用的最多的是openVZ,lxc和xen,因为这个性能要比KVM好的很多

1.虚拟化技术与KVM:

内容:CPU,内存,IO

虚拟化的标准:

1.等价执行,在虚拟机上执行的结果,要和在物理机上执行的结果一样

2.性能良好,guest的大多数指令,能够直接运行在cpu上,而不用翻译或者转换

3.安全隔离,任何一个虚拟机,不能关闭其他guest,除了xen的domain0,不能让一个虚拟机通过内存入侵到其他虚拟机中去,

//虚拟和模拟是不一样的

早期的虚拟化:

Trap:捕获guest的请求后,hypervisor捕获这个请求后,将其翻译成自己可以执行的指令,所以任何的guest指令都不能直接执行,都必须拿到hypervisor上处理后,才能执行

Emulate:模拟,大多的硬件都是以纯软件的方式提供给guest的

X86平台的虚拟化:

1.特权级压缩:----完全虚拟化:仅从CPU的架构来说,使用trap和emulate实现虚拟化 //早期的x86架构实现虚拟化比较困难//早期的x86使用内核必须运行在ring 0,但是guest 的也要运行在ring 0,
解决方法:

2.特权级别名,欺骗guest,你就在ring 0

3.地址空间压缩:VMM:虚拟机监视器,所有的guest-os所得到的的地址空间中,必须保留一部分为VMM使用// VMM的有些指令,监控功能是直接运行在guest-os上的

4.非特权敏感指令,有些指令敏感,需要隔离,

5.静默特权失败,x86的某些特权指令在执行失败以后不会返回错误,因此不能被VMM捕获

6.中断虚拟化,在guest中的{屏蔽中断和非屏蔽中断},都应该由VMM进行,然而guest对特权资源的每次访问,都会触发处理器异常,需要VMM在两种模式之间来回切换

//中断虚拟化会导致性能降低

模拟:得到指令后,翻译为其他指令,得到相同的结果

虚拟:给你虚拟一个设备,当你要使用的时候,指令直接在物理主机上运行

B-T技术 实现虚拟化 //二进制翻译

硬件:VMM(ring 0):guest os.(kernel)--ring 1 :ring 2空闲:ring 3--APP

App运行非特权指令:直接在cpu上直接运行

特权指令:guest os会交给自己的内核,向VMM发送请求,

//例如使用shutdown指令,显然VMM是不允许guest关闭宿主机的,因此翻译指令让guest关机,vmm让gues认为自己是出于ring 0中,

CPU虚拟化:3种 //硬件辅助虚拟化

半虚拟化:

硬件由VMM直接执行,VMM运行在ring 0,guest os运行也在ring 0

Ring 2, ring1都是空闲的,app运行在ring 3上

需要修改guest.Kernel

//app直接运行在cpu上,加入guest os要运行特权指令,交给guest.kernel

//guest.kernel知道自己是虚拟的,直接调用vmm,使用hypyercall实现,调用hypercall实现

//VMM和guest.kernel都运行在ring 0

//必须要修改内核

硬件辅助虚拟化:

Ring -1:VMM,hypervisor,

Ring 0,guest os的内核 //ring0没有特权指令,

Ring1,ring 2空闲 //guest的内核不再需要修改

半虚拟化:gutst知道自己是虚拟的,需要修改内核

完全虚拟化:速度比较慢,性能相对比较差,全是虚拟的

硬件辅助虚拟化:guest也是完全虚拟化,//因为guest仍然不知道自己是被虚拟出来的

//内核不能修改的时候,只能使用完全虚拟化,硬件辅助虚拟化

内存虚拟化//MMU,TLB

X86为了实现进程隔离,和内存保护,早都已经实现了虚拟化//已经实现了物理地址到线性地址的转化

//这种转化依赖于MMU:硬件

进程使用的地址是线性地址:是虚拟的,需要转化为物理地址//这个对应关系放在  page table中

转化过程:

由CPU直接把地址{进程的虚拟地址}发送给MMU,MMU查找这个page table转换成物理地址

MMU还有一个作用:内存保护,任何时候,一个进程发送给MMU一个 自己并不属于的地址,它是访问不到的,因此在一定程度上实现了内存保护

MMU:负责VA-PA的转化,虚拟地址到物理地址----以及内存保护

虚拟化后地址需要转化三次:

GVA--GPA---HPA // 最后在真实的内存中运行

这个转化过程相当麻烦:

因此:

Shadow MMU EPT,APT //intel和AMD的MMU

通过MMU转换的是GVA-GPA,

进程需要转换的时候,cpu将地址分别给MMU和shadow MMU一份,这样线性地址就直接转换成了HA

Shadow:直接从GVA--HPA//一次转换成功,加速了访问

//一个MMU供实际使用,一个供虚拟转化

//MMU的转换速度 比较慢,为了加快速度,引入了TLB的机制//加速缓存命中率

但是guest a的TLB和guest b的TLB很有肯能会冲突,这样的话,TLB就没有意思了,而且很有可能会混淆导致故障或,泄露 //因此guest os在CPU上切换的时候,必须要清空TLB,

为了避免这种情况,tagged TLB //打标记的TLB,标记是哪一个guest-os的TLB

I/O虚拟化

IO速度本身就比较慢,如果虚拟一次后,

VMM的实现方式:

Type-I型:hypervisor运行在硬件上,各个OS都是虚拟机实例 //实例1是特权实例,其他都是guest

Hypervisor需要驱动各个硬件,需要为hypervisor提供驱动

Typ-II型:某一个OS运行在硬件上,在该OS上安装一个软件是VMM//

//可以把VMM和hypervisor当做一个东西

    

 Type-I               type-II

//xen只驱动内存和cpu,其他的驱动由domain 0 实现

//guest使用IO的时候,转发给domain 0,然后domain  0再次使用

假如使用纯软件的方式模拟出:SATA设备

IO完全虚拟化://性能比较差

Guest os对该设备的访问过程:

1.Guest os的某个进程需要访问硬盘上的某个文件时,通过内核调用实现

2.内核调用该硬盘的驱动程序,去封装指令,发送给虚拟出来的接口 //第一次封装

3.但是这个接口在domain 0上只是一个文件,软件解码,解码完以后,提取内容,发起对本地文件的调用,

4.调用domain 0上的对应磁盘的驱动程序,最后封装起来,向硬件发送//再次封装

//软件模拟出来的设备通常都是比较通用的,容易驱动的

IO半虚拟化:

Domain 0直接做成调用,你一半,我一半,guest知道这是一个特殊设备,需要的驱动是domain 0上简化后的驱动,直接调用即可,前半段,guest完成,后半段domain 0完成

混合虚拟化:hybrid

有些IO半虚拟化,有些IO模拟,

Vmware  ESX  //自己提供了domain 0,精简版的OS,VMM

//

VMM:对IO驱动有三种模式:

1.自主VMM,IO由VMM自己提供驱动和控制台 //专用VMM,什么都是专用的

2.混合VMM,借助于外部OS提供驱动   //外部OS的驱动

//依赖于外部OS

//自我提供特权域

3.寄宿VMM;type-II//通过domain 0直接调用驱动,封装好的,我也知道

IO虚拟化模型:

1.纯模拟//软件模拟实现,完全,需要两次封装

2.半虚拟化//使用的时候,type-II,还要通过domain 0的后半段实现,驱动使用的是domain 0//的

3.透传//直接分配硬件,例如3个硬盘,guest1使用第一块,guest2使用第二块

//但是分配需要使用domain 0实现,但是真正使用的时候,不再通过domain 0

//假如只有一块硬盘,只有一个网卡的时候就有点难办了--因此

//出现了IOV的技术,改技术可以把多个物理硬件轮流给多个OS来使用,

//例如vmnet-0,vmnet-2就是多个网卡,可以直接使用,但是底层是轮流来调用//的

案例:

完全虚拟化:vmware workstation {type-II},kvm,virtual box

半虚拟化:Xen,//type-I ,vmware-ESX {type-I},   //

//type-I:硬件上是hypervisor,hypervisor之上的guest-os

//type-II:host之上的guest-os

KVM:kernel-based virtual Machine //不属于type-I,也不属于type-II

//KVM实现了type-I的功能,又实现了type-II的特性

//KVM仅仅是linux内核的一个模块而已,OS安装好kvm之后,内核立马变成了hypervisor

//这个内核就可以直接创建虚拟机了

KVM装载进内核以后,内核可以虚拟CPU和内存,但无法虚拟IO

KVM装载进入内核之后,内核就会运行在ring -1上//硬件支持

使用软件模拟IO,KVM本身并不会虚拟IO设备

借助qemu实现IO模拟//qemu 可以模拟CPU,memory,IO

Qemu:创建并管理机的工具 //模拟器

CPU:底层cpu和虚拟的cpu架构可以不一样,但是性能差

//kqemu:使用qemu的二进制,kqemu是qemu的加速器,否则需要翻译

//qemu好像bug太多,因此应用场景不多见,不稳定

//可以认为KVM就是kqemu的替代产品

//kvm要求硬件必须支持虚拟化的

1.查看是否支持

Lsmod |grep kvm

Modprobe kvm  //KVM是通用,AMD和intel的

Ls /dev/kvm  //直接会在dev目录下建立一个kvm设备

Qemu-kvm //专用于结合KVM的qemu

Qemu可以独立使用,kvm为了结合KVM自己开发的

//没有KVMqemu可以独立生存,只不过性能不那么好,但是KVM就离不开qemu了,因为他要创建硬件

KVM是Qumranet公司,生产的,2008.9月被redhat 大约1.07亿美元现金美金收购

2.KVM架构

//借助于kvm的工作的那一部分叫做hypervisor,不借助于kvm内核工作的那一部分,仍然是一个内核

用户模式:包括{来宾模式,} //来宾模式:{来宾内核模式+来宾用户模式}

内核模式:

//VCPU:KVM使用一个线程来事项guest访问CPU

3.KVM组件

1./dev/kvm:管理虚拟机的设备节点,用户空间的程序可通过ioctl()系统调用集成来完成虚拟机的创建启动管理工作,它是一个字符设备,其主要完成的操作包括,

创建虚拟机啊;

为虚拟机分配内存

读、写VCPU的寄存器

向vcpu注入中断

运行vcpu

2.qemu进程:工作于用户空间的组件,用于仿真PC机的I/O类硬件设备;

4.半虚拟化:virt-IO

红帽半虚拟化:virt-IO通过IBM等其他公司,做了半虚拟化,vmware,virtual box都支持的半虚拟化技术:virIO

半虚拟化:两段,前一段在guest上,后半段在hypervisor上

//常见组成:CPU完全虚拟化,IO半虚拟化,IO也可以使用完全虚拟化

半虚拟化的问题:

1.网卡半虚拟化,windows驱动不了,网卡,怎么办//,红帽直接为其提供了半虚拟化windows驱动

但是在IDC上,openvz使用的可能更多一点 ,不会对内核进行虚拟化,而是虚拟了多个用户空间,所以性能损失比较小,但是任何一个用户空间,加入直接把内核整挂了,那就大家都玩完,性能特别好

任务:openVZ的了解实现,安装

时间: 2024-12-19 20:05:31

kvm-1的相关文章

Linux 部署KVM虚拟化平台

简单介绍 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案.KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度:虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程.这使得 KMV 能够使用 Linux 内核的已有功能. 但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示

KVM的基础功能(网络、内存、cpu、存储的配置)

KVM的基础功能(网络.内存.cpu.存储的配置) cpu的配置 1)查看cpu插槽数量 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id" |wc -l 24 2)查看cpu核心数量 [[email protected] ~]# cat /proc/cpuinfo |grep "core id"| wc -l 24 3)查看cpu的模型 [[email protected] ~]# cat /p

kvm一键shell自动生成 windows 虚拟机,无人值守操作方案(step1)

kvm一键shell自动生成 windows 虚拟机,无人值守操作方案分为四个步骤来联合完成: 第一步:开机启动脚本编写,使机器在一启动的时候能够执行该脚本,完成所有需要完成的基本操作(诸如设置密码,绑定Ip,加域,激活),这一步在单独一台机器上反复测试反复编写: 第二步:制定自动应答文件,使其能够无人自动安装,不需要人为干预:也就是消除机器第一次启动时候,需要人工选择<安装语言>,<接受许可协议>等等这些步骤: 第三步:完成以上几步,剩下就需要linux 通过virt-copy-

KVM虚拟化技术(二)KVM介绍

KVM:Kernel Virtual Machine KVM是基于虚拟化扩展的x86硬件,是Linux完全原生的全虚拟化解决方案.部分半虚拟化支持,主要是通过半虚拟网络驱动程序的形式用于Linux和Windows客户机系统的. KVM被设计为是一个内核模块,支持广泛的客户机操作系统:在KVM架构中,虚拟机实现为常规的Linux进程.这使KVM能够享受Linux内核的所有功能. KVM模块是KVM虚拟机的核心部分.其主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟机客户机运行在虚拟机模式下,

CloudStack扁平化安装+KVM

一.环境 1.软件信息 名称 版本 备注 CloudStack 4.3.1 Centos 6.5 Mysql 5.x 系统自带 Tomcat 6.x/7.x 系统自带 二.配置Cloudstack计算节点 1.配置YUM源安装cloudstack-agent [[email protected] ~]#  mkdir /opt/cloudstack     #创建Cloudstack文件夹,将安装包安装上传至此 [[email protected] cloudstack]# ls cloudst

kvm虚拟化技术应用实战

本文根据上课笔记整理,大家都知道云计算的基础就是虚拟化,而开源的虚拟化基本以kvm技术为主导,因此kvm技术已成为运维工程师必备的技术,也是云时代必不可少的技术 在介绍kvm之前 我们先来了解一下vnc这个软件,后面安装kvm需要vnc来支持 1.vnc的安装及使用 # yum -y install tigervnc-server 首次启动 # vncserver :1 会提示输入两次密码 然后编辑/root/.vnc/xstartup,将最后一行twm替换为gnome-session或者sta

KVM虚拟化笔记(十四)------kvm虚拟机动态迁移

相比kvm虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件,本文这部分内容通过nfs来实现,当然也可以采用GFS2集群文件系统来实现,本文以共享存储进行动态迁移 KVM动态迁移目前有两种,一种是基于共享存储的动态迁移,一种是基于基于数据块的动态迁移,需要qemu-kvm-0.12.2以上版本支持,OEL6.3版本是qemu-kvm-0.12.1.2,其它发行版可能有支持 由于资源有限,现在还没有实

KVM虚拟化笔记(六)------kvm虚拟机的克隆

kvm虚拟机的克隆分为两种情况:kvm主机本机虚拟机直接克隆和通过复制配置文件与磁盘文件的虚拟机复制克隆.接下来我们一一进行测试: (一)kvm主机虚拟机的直接克隆 1,查看虚拟机的配置文件和磁盘文件: [[email protected] qemu]# cat /etc/libvirt/qemu/hadoop1.xml  <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE  OVERWRITT

KVM虚拟化笔记(七)------kvm虚拟机时间配置

由于在虚拟化环境中,虚拟机在长时间的运行过程中,时间会变慢,通常的做法是配置ntpdate定时与时间服务器进行时间同步的计划任务.Kvm虚拟机默认采用的是UTC时间,需要进行专门的修改,还有考虑时间同步的问题,具体步骤如下: 1,kvm虚拟机修改时间配置文件 kvm虚拟机采用utc时间,需要先修改配置文件使用kvm虚拟机的时间与虚拟主机同步. [[email protected] qemu]# virsh edit hadoop3 最后重启下虚拟机 2. 关于kvm虚拟机时间问题解决思路 (1)

KVM虚拟化笔记(四)------kvm虚拟机日常管理

一,查看KVM虚拟机配置文件及运行状态 1,KVM虚拟机默认的配置文件路径:/etc/libvirt/qemu/ 而autostart目录是配置kvm虚拟机开机自启动的目录. [[email protected] qemu]# cd /etc/libvirt/qemu [[email protected] qemu]# ll total 24 drwxr-xr-x 2 root root 4096 Feb  2 15:03 autostart      ###开机自启动目录   -rw-----