kvm虚拟化技术实现原理

一、 虚拟化技术

  • 虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
    物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)

1、虚拟化技术的分类:

(1) 模拟:Emulation

Qemu, PearPC, Bochs, ...

(2) 完全虚拟化:Full Virtualization,Native Virtualization
  • 完全虚拟化提供底层物理系统的全部抽象化,且创建一个新的虚拟系统,客户机操作系统可以在里面运行。不需要对客户机操作系统或者应用程序进行修改(客户机操作系统或者应用程序像往常一样运行,意识不到虚拟环境的存在)。
  • VMware是一款完全虚拟化软件。完全虚拟的弱点是效率不如半虚拟化的高
    半虚拟化系统性能可以接近在裸机上的性能。

VMWare Workstation, VirtualBox, VMWare Server, Parallels Desktop, KVM(hvm), XEN(hvm)

(3) 半虚拟化:Para-Virutalization
  • 半虚拟化需要对运行在虚拟机上的客户机操作系统
    进行修改(这些客户机操作系统会意识到它们运行在虚拟环境里)并提供相近的性能,但半虚拟化的性能要比完全虚拟化更优越。

  • 特点:GuestOS明确知道自己运行虚拟机之上;
    xen, UML(user-mode linux)

(4) 容器级虚拟化:

LXC, OpenVZ, libcontainer, runC, rkt, Linux V Servers, Virtuozzo, ...

(5) 库级别虚拟化:

wine

(6) 程序级虚拟化

jvm, pvm, ...

2、主机虚拟化:Emulation, Full Virtualization, Para-Virutalization

Type-I:Hypervisor直接运行于硬件;
Type-II:Hypervisor运行主机OS之上;

3、云栈的类别:

  • IaaS(Infrastructure-as-a-Service)基础设施服务
  • PaaS(Platform-as-a-Service)系统平台服务
  • SaaS(Software-as-a-Service)软件服务
  • FWaaS(FireWall as a Service)防火墙服务
  • DBaaS(DataBase-as-a-Service)数据库服务
  • LBaas (load-balancer-as-a-service)负载均衡服务

二、主机虚拟化:

1、cpu的虚拟化:

  • 模拟类型:emulation,虚拟机的arch与物理平台的arch可以不同;qemu
  • 虚拟类型:virtualization
    完全虚拟化(full-virt)
    * BT:通过软件二进制转换
    * HVM:硬件辅助的虚拟化
    半虚拟化: (pare-virt)
    * GuestOS明确知道自己运行于虚拟技术中
硬件级物理cup虚拟化技术
  • 英特尔硬件虚拟化技术interl-VT
  • AMD硬件虚拟化技术AMD-V

2、内存虚拟化管理

  • 早期,虚拟机中的内存到物理内存地址机制,用软件实现, shadowmmu很低效
    硬件内存中添加了,标识虚拟机标签机制tagged TLB。

  • MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。

硬件级内存虚拟化:

硬件级物理内存映射到虚拟机

  • 英特尔硬件虚拟化技术EPT,Extended Page Table
  • AMD硬件虚拟化技术NTP,Nested Page Table

3、硬盘的虚拟化:

  • 虚拟机如何使用硬盘的空间:虚拟机在物理硬盘上划分一个文件来使用,此文件也是靠宿主机通过文件系统将磁盘分区后,并创建文件系统后,分给虚拟机一个文件的大小的空间。在宿主机上表现的就是一个文件,而在虚拟机上表现的就是一块硬盘。所以还需要用软件的方式模拟一个适配器,将此文件,模拟成硬盘。

4、网络虚拟化

  • 用软件的方式给每个虚拟机虚拟一块网卡和MAC地址,当通信时使用同一块物理网卡,网卡通讯有排队方式,在同一台物理网卡上,排队执行任务。(将物理网卡设为混杂模式;无论是不是发向本机物理网卡的内容都给与接收);此时将物理网卡也虚拟化一个MAC地址,把物理网卡当作交换机来使用。

5、IO虚拟化

I/O全虚拟化技术
  • 通过VMM模拟I/O设备(磁盘和网卡等)实现虚拟化。
    Guest OS所能看到就是一组统一的I/O设备。VMM截获Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对Guest而言非常透明,无需考虑底层硬件的情况。
I/O半虚拟化技术
  • 通过前端(Front-End)/后端(Back-End)模拟实现虚拟化。
    Guest OS中的驱动程序为前端,VMM提供的与Guest通信的驱动程序为后端。前端驱动将Guest OS的请求通过与VMM间的特殊通信机制发送给VMM的后端驱动,后端驱动在处理完请求后再发送给物理驱动。
I/O透传技术
  • 设备透传就是向一个特定客户操作系统提供一种设备隔离,对于性能而言,使用设备透传可以获得近乎本机的性能。对于某些网络应用程序(或那些拥有高磁盘 I/O 的应用程序)来说,这种技术简直是完美的。这些网络应用程序没有采用虚拟化,原因是穿过管理程序(达到管理程序中的驱动程序或从管理程序到用户空间模拟)会导致竞争和性能降低。但是,当这些设备不能被共享时,也可以将它们分配到特定的客户机中。例如,如果一个系统包含多个视频适配器,则那些适配器可以被传递到特定的客户域中。

6、一型虚拟化type-1

  • 特点:于硬件级别直接运行hypervisor虚拟机管理控制
    xen,vmware ESX/ESXI


    xen虚拟过程

7、二型虚拟化type-2

  • 特点:host主机上建立guest虚拟系统,有宿主机
    在硬件级别运行一个os(host os),而此上运行一个vmm监视器,用于管理guest虚拟系统
    vmwarworkstations, kvm,virtualbox

三、容器级级虚拟化

  • 缺点:相较于主机级虚拟化隔离的不彻底
    方案:lxc, libcontainer, runC, openvz

  • Linux内核运行在物理设备上;在内核上运行多个操作系统如:centos,wubantu;susan;等,因为他们都是基于linux内核来开发的不同界面的操作系统而已,底层运行的内核是相同的。在每个操作系统上在运行每个应用。在内核上运行一个软件来创建和管理容器,是一个很小的软件,基本不消耗性能。

  • 由于多个操作系统使用的是同一个内核,当在操作系统上执行关机命令,就会将内核关闭,所以需要将每个操作系统隔离开来,关掉的只是自身容器 本身而已。各个操作系统之间的操作互补干扰。(共享内核)

四、KVM虚拟技术

1、KVM概述

  • 以色列qumranet公司研发,后被RedHad公司收购
    (1)kvm只支持x86平台
    (2)依赖于 HVM,inter VT AMD-v
  • KVM是(Kernel-based Virtual Machine)的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。
  • KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
工作原理

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


virtio虚拟方案

2、KVM的核心组件:

(1)、 kvm.ko内核模块
  • (kvm.ko)/dev/kvm:工作为hypervisor,在用户空间可通过系统调用ioctl()与内核中的kvm模块交互,从而完成虚拟机的创建、启动、停止、删除等各种管理功能;
(2)、 qemu-kvm:用户空间的工具程序
  • qemu-kvm进程:工作于用户空间,用于实现IO设备模拟;用于实现一个虚拟机实例;
(3)libvirt:工具箱用于与主流操作系统虚拟化进行交互工具
  • libvirt是cs架构应用:
    • 客户端:libvirt-client
      virt-manager
    • daemon:图像化工具
      libvirt-deaemon

3、KVM运行模式

KVM模块load进内存之后,系统的运行模式:

  • 内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为“Guest-Kernel”模式;
  • 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
  • 来宾模式:GuestOS的用户模式;所有的非IO类请求;

4、KSM机制

扫描物理内存,发现多个虚拟机实例有相同的内存空间,合并成为一个共享内存空间,节省内存。

5、kvm工具集:

image.png
  • qemu工具

    • qemu-kvm:用户空间的工具程序,创建管理虚拟机

    • qemu-img:是 QEMU 的磁盘管理工具

  • libvirt工具

    • GUI:virt-manager, virt-viewer:图形化管理
    • CLI: virsh, virt-install:创建管理虚拟机
  • 集群工具:
    libvirtd:管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。Libvirt是一个C工具包的虚拟化功能与最新版本的Linux(以及其他操作系统)。主包包含libvirtd服务器虚拟化支持出口。

5、KVM快速安装

(1)判断CPU是否支持硬件虚拟化:
grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:Intel VT-x
svm:AMD AMD-v

运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;

(2)、装载内核模块

kvm:核心模块

kvm-intel|kvm-amd
(3)、使用virt-manager管理KVM
# yum install qemu-kvm libvirt-daemon-kvm  virt-manager
# modprobe kvm

# systemctl start libvirtd.service

# virt-manager &
(4)、网络虚拟化:

CentOS 7创建物理桥,使用内核自带的桥接模块实现:
桥接口配置文件保留地址信息;

TYPE=Bridge
Device=BRIDGE_NAME

物理网卡配置文件:
删除地址、掩码和网关等相关的配置,添加

BRIDGE=BRIDGE_NAME

重启网络服务即可:

五、安装KVM示例

  • 安装前首先开启虚拟机Inter VT


    实验前开启
#检查主机cpu是否支持虚拟化
[root@node-64 ~]# grep -E -i "svm|vmx" /proc/cpuinfo
..........vmx ......... #出现这个字段即可支持虚拟化

#安装kvm模块
[root@node-64 ~]# modprobe kvm
[root@node-64 ~]# lsmod | grep kvm
kvm_intel             170086  0 
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
[root@node-64 ~]# ls /dev/kvm
/dev/kvm

[root@node-64 ~]# yum install libvirt libvirt-daemon virt-manager -y
[root@node-64 ~]# systemctl start libvirtd.service
[root@node-64 ~]# systemctl enable libvirtd.service

#安装物理桥
[root@node-64 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.64  netmask 255.255.255.0  broadcast 192.168.1.255
#创建网桥
[root@node-64 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33

此时会断网,到虚拟机重启一下,发现已生成网桥,但还要配置网桥的dns,否则无法上网。

[root@node-64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.1.64"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
DNS1=202.106.46.151   #添加
DNS2=8.8.8.8          #添加

#重启网络
[root@node-64 ~]#systemctl restart network.service

[root@node-64 ~]# ifconfig
br0:    #生成虚拟网桥,并获得物理网卡的地址
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.64  netmask 255.255.255.0  broadcast 192.168.1.255

ens33:    #原物理网卡变成虚拟交换机
 flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:79:2e:94  txqueuelen 1000  (Ethernet)

其他终端图形登录[root@node-60 ~]# ssh -X root@192.168.1.64

 ssh -X root@192.168.1.64
[root@node-64 ~]# virt-manager

参考链接:
http://www.178linux.com/103971
https://www.cnblogs.com/sunhao96/p/7605865.html
https://bbs.csdn.net/topics/391040787
https://www.ibm.com/developerworks/cn/linux/l-pci-passthrough

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容