首页 > 代码库 > KVM
KVM
KVM相关概念
全虚拟化(Full Virtualization)
全虚拟化也称为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件
VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。
全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为Hypervisor需要占用一些资源。
半虚拟化(Para Virtualization)
半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。
该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。
半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。
KVM虚拟化技术(Kernel-based Virtual Machine)基于内核的虚拟机
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。
它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
是基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。
是第一个整合到 Linux 内核的虚拟化技术。
在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。支持linux以外的其它系统。如windows。
一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)
KVM,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使 用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM 之一。KVM的虚拟化需要硬件支持(如Intel VT技术戒者AMD V技术)。是基于硬件的完全虚拟化。而 Xen早期则是基于软件模拟的Para-Virtualization,
结构包含两部分
1、设备驱动/dev/kvm
2、针对模拟PC硬件的用户控件组件
Intel VT技术
主要由三部分技术组成:VTx、VTd和VTc。其中,VTx是处理器技术,提供内存以及虚拟机的硬件隔离,所涉及的技术有页表管理以及地址空间的保护。VTd是处理有关芯片组的技术,它提供一些针对虚拟机的特殊应用,如支持某些特定的虚拟机应用跨过处理器I/O管理程序,直接调用I/O资源,从而提高效率,通过直接连接I/O带来近乎完美的I/O性能。VTc是针对网络提供的管理,它可以在一个物理网卡上,建立针对虚拟机的设备队列搜索。
EPT——降低虚拟内存访问的系统开销
EPT即Extended Page Tables(扩展页表)的缩写。CPU要通过主机物理地址来访问内存。如果只是一台物理服务器,这个物理地址就只为一个操作系统服务,但如果进行了虚拟化部署,有多个虚拟机时,就存在着稳定性的隐患。因为在进行VM Entry(虚拟机进入)与VM Exit(虚拟机退出)时(尤其是后者),都要对内存页进行修改。但物理内存是多个虚拟机共享的,因此不能让虚拟机直接访问物理地址,否则一个虚拟机出现内存错误,就会殃及整个物理服务器的运行。所以必须要采取虚拟地址,而EPT的作用就在于加速从虚拟机地址至主机物理地址的转换过程,节省传统软件处理方式的系统开销。
结构包含两部分
1、设备驱动/dev/kvm
2、针对模拟PC硬件的用户控件组件
Intel VT技术
主要由三部分技术组成:VTx、VTd和VTc。其中,VTx是处理器技术,提供内存以及虚拟机的硬件隔离,所涉及的技术有页表管理以及地址空间的保护。VTd是处理有关芯片组的技术,它提供一些针对虚拟机的特殊应用,如支持某些特定的虚拟机应用跨过处理器I/O管理程序,直接调用I/O资源,从而提高效率,通过直接连接I/O带来近乎完美的I/O性能。VTc是针对网络提供的管理,它可以在一个物理网卡上,建立针对虚拟机的设备队列搜索。
EPT——降低虚拟内存访问的系统开销
EPT即Extended Page Tables(扩展页表)的缩写。CPU要通过主机物理地址来访问内存。如果只是一台物理服务器,这个物理地址就只为一个操作系统服务,但如果进行了虚拟化部署,有多个虚拟机时,就存在着稳定性的隐患。因为在进行VM Entry(虚拟机进入)与VM Exit(虚拟机退出)时(尤其是后者),都要对内存页进行修改。但物理内存是多个虚拟机共享的,因此不能让虚拟机直接访问物理地址,否则一个虚拟机出现内存错误,就会殃及整个物理服务器的运行。所以必须要采取虚拟地址,而EPT的作用就在于加速从虚拟机地址至主机物理地址的转换过程,节省传统软件处理方式的系统开销。
Xen虚拟化技术
Xen是第一类运行在裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化。
Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。
Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),
能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。需要升级内核,只能支持和物理系统一样的操作系统。
QEMU
是一套由 Fabrice Bellard 所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux 平 台上使用广泛。
QEMU具有高速度和跨平台的特性,QEMU能模拟至接近真实电脑的速度。
QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。
KVM和QEMU的关系
准确来说,KVM是Linux kernel的一个模块,可以用命令modprobe去加载KVM模块。
加载了模块后,才能进一步通过其他工具创建虚拟机。
但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。
这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件 QEMU。
说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。
KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。
所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。
也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。
安装kvm
#rpm -ivh http://mirrows.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 或rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm #rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #yum install qemu-kvm qemu-kvm-tools virt-manager libvirt qenu-kvm kvm是linux的一个模块,管理和创建完整的虚拟机需要相应的一些管理工具
由于kvm是在qemu的基础上开发的,KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具QEMU-KVM qemu-kvm-tools kvm管理工具 virt-manager 图形化管理工具 libvirt 支持Linux下主流虚拟化工具的C函数库,旨在为包括Xen、kvm在内的各种虚拟化工具提供一套方便、可靠的编程接口
=========================使用图形化管理工具方法
# yum groupinstall "X Window System"
# yum groupinstall Desktop
#virt-manager
=========================使用图形化管理工具方法
kvm管理 cpu0 disabled perfctr wrmsr: 0xc1 data 0xabcd搞不定
#增加主机hosts解析 #/etc/init.d/libvirtd start #chkconfig libvirtd on #lsmod | grep kvm #查看模块是否加载安装 kvm_intel 55624 0 kvm 341551 1 kvm_intel
接下来创建2个实践虚拟机 创建一个分区,挂载/kvmdata,用于放置虚拟机镜像盘 #qemu-img create -f raw /kvmdata/CentOS-6.7test1.raw 7G #qemu-img create -f raw /kvmdata/CentOS-6.7test2.raw 7G Formatting ‘/kvmdata/CentOS-6.7test1.raw‘, fmt=raw size=7516192768 #file /kvmdata/CentOS-6.7test1.raw /kvmdata/CentOS-6.7test1.raw: data #qemu-img info /kvmdata/CentOS-6.7test1.raw image: /kvmdata/CentOS-6.7test1.raw file format: raw virtual size: 7.0G (7516192768 bytes) disk size: 0 # dd if=/dev/cdrom of=/kvmdata/CentOS-6.7-x86_64.iso #virt-install --virt-type kvm --name CentOS-6.7-x86_64_test1 --ram 512 --cdrom=/kvmdata/CentOS-6.7-x86_64.iso
--disk path=/kvmdata/CentOS-6.7test1.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6 #virt-install --virt-type kvm --name CentOS-6.7-x86_64_test2 --ram 512 --cdrom=/kvmdata/CentOS-6.7-x86_64.iso
--disk path=/kvmdata/CentOS-6.7test2.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6 Starting install... Creating domain... | 0 B 00:01 Domain installation still in progress. You can reconnect to the console to complete the installation process.
# netstat -tlnup | grep 590
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 12575/qemu-kvm
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 12709/qemu-kvm
==》之后可以通过VNC连接,进行操作系统安装(略) ===================================================================== vnc无法远程连接的问题 vnc-options expert-colourlevel 改为 full 即可。
编辑xml文件支持vnc连接方法 <graphics type=‘vnc‘ port=‘-1‘ autoport=‘yes‘ listen=‘0.0.0.0‘> <listen type=‘address‘ address=‘0.0.0.0‘/> </graphics> ===================================================================
虚拟机的xml文件 # ls -l /etc/libvirt/qemu #virsh edit通过此命令修改xml文件
-rw------- 1 root root 3077 Apr 4 05:10 CentOS-6.7-x86_64_test1.xml
-rw------- 1 root root 3077 Apr 4 05:11 CentOS-6.7-x86_64_test2.xml
drwx------ 3 root root 4096 Apr 4 03:23 networks ===============根据xml文件,重建虚拟机的方法 cp CentOS-6.7-x86_64_test.xml /opt/CentOS-6.7-x86_64_test.xml virsh undefine CentOS-6.7-x86_64_test virsh define /opt/CentOS-6.7-x86_64_test.xml ===============根据xml文件,重建虚拟机的方法 # virsh list (显示运行的vm) 或 virsh list --all(显示所有) #virsh --help 重要命令参数 dumpxml reboot shutdown start suspend undefined define [root@test93 opt]# virsh start CentOS-6.7-x86_64_test Domain CentOS-6.7-x86_64_test started [root@test93 opt]# virsh list --all Id Name State 2 CentOS-6.7-x86_64_test running yum install virt-top 监控kvm (zabbix agent更好) 优化项,默认开启,实现4k内存合并 [root@test93 qemu]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never [root@test93 qemu]# ps aux | grep ksm 定期会对页面合并,相同内容的内存合并 root 34 0.0 0.0 0 0 ? SN 13:50 0:00 [ksmd]
# virsh list
Id Name State
----------------------------------------------------
# brctl show #kvm创建的网桥设备
# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400c58f2d yes virbr0-nic
# ifconfig | tail -8
# ifconfig | tail -8
virbr0 Link encap:Ethernet HWaddr 52:54:00:C5:8F:2D
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
KVM
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。