KVM简介KVM,为Kernel-basedVirutal Machine的缩写,即基于内核的虚拟机,是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个Hypervisor。K
KVM简介
KVM,为Kernel-basedVirutal Machine的缩写,即基于内核的虚拟机,是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个Hypervisor。KVM是开源的系统虚拟化工具,自Linux2.6.20之后集成在Linux的各个主要发行版中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已经成为学术界的主流VMM之一。KVM的虚拟化需要硬件支持(如Intel的VT技术或者AMD的V技术),运行在X86平台上。是基于硬件的完全虚拟化。它也被移植到S/390,PowerPC,IA-64平台上。在Linux内核3.9版本中,加入的ARM架构的支持。KVM的特点:
- KVM是开源软件,全称Kernel-based virtual machine(基于内核的虚拟机)。
- 是x86架构且硬件支持虚拟化技术(如Intel VT或AMD-V)的Linux全虚拟化解决方案。
- 它包含一个为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
- KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
- KVM能在不改变Linux或Windows镜像的情况下同时运行多个虚拟机(即,多个虚拟机使用一个镜像),并为每一个虚拟机配置个性化硬件环境(网卡,磁盘,图形适配器……)。
- 在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。KVM主要用于服务器,对图形界面支持较弱。
- KVM的内存管理
KVM继承了Linux系统管理内存的诸多特性。比如,分配给虚拟机使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞度量。此外,KVM还借助于KSM(kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各个相关虚拟机共享的单独页面。在某个虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很高的,比如共享库、内核或其他内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提升整体性能。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)相关连接:
KVM 的官方地址: http://www.linux-kvm.org/page/Main_Page
KVM 的 Howto 文档: http://www.linux-kvm.org/page/HOWTO
Kqemu 源码地址: http://sourceforge.net/projects/kqemu/
Qemu 下载地址: http://wiki.qemu.org/Main_Page
- KVM虚拟化平台的实践
实践的环境是在windows下,之前尝试使用Virutalbox来进行实验,后来发现Virutalbox不支持KVM虚拟化,最后又重新在windows环境下使用VMware。
- 安装准备
查看硬件是否支持虚拟化。执行命令:
[root@Test-41]~# egrep '(vmx|svm)' /proc/cpuinfo –colorflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dts tpr_shadow vnmi ept vpid fsgsbase smepflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep
如果没有任何输出,则又两种可能,一种你的硬件不支持硬件虚拟化技术,首先查看bios里面是否有对应的项目,如果有则开启,如果没有则实验无法进行。开启后查看你的VMware虚拟机是否开启了对应的虚拟化支持。
Bios开启:
虚拟机开启:
另外,操作系统需要是64位,32位系统无法安装KVM。
- 安装
这里由于是新装RHEL6.5所以需要注意几点:首先安装后,安装增强插件VMware的,需要重启虚拟机,直接安装会提示错误。
安装后需要配置本地yum源:
创建目录:
[root@Test-41 Desktop]# mkdir /mnt/RHEL6.5_ISO
编辑fstab,开机自动挂载光驱镜像
[root@xuegod-41 Desktop]# vim /etc/fstab/dev/sr0 /mnt/RHEL6.5_ISO iso9660 defaults 0 0
注意:这里iso9660的英文字母需要小写,大写会报错。
修改yum配置文件:
[root@Test-41 Desktop]# vi /etc/yum.repos.d/rhel-source.repo[rhel-source]name=Red Hat Enterprise Linux $releasever - $basearch - Sourcebaseurl=file:///mnt/RHEL6.5_ISOenabled=1gpgcheck=0
现在就可以进行KVM的安装了:
[root@Test-41 Desktop]# yum install kvm virt-manager libvirt –y
- 启动服务:
[root@Test-41 Desktop]# service libvirtd start
配置开启自启动:
[root@Test-41 Desktop]# service libvirtd start
查看启动状态:
[root@Test-41 Desktop]# ps aux |grep virtroot 12523 0.0 0.4 414860 17960 ? Sl Mar28 0:00 /usr/bin/python /usr/share/virt-who/virt-who.pyroot 12539 0.0 0.1 438388 7456 ? Sl Mar28 0:00 libvirtd --daemonnobody 12655 0.0 0.0 12888 748 ? S Mar28 0:00 /usr/sbin/dnsmasq --strict-order --local=// --domain-needed --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --bind-interfaces --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override --dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile --addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhostsroot 13717 0.0 0.0 103248 868 pts/0 S+ 00:10 0:00 grep virt
查看自启动配置是否成功:
[root@Test-41 Desktop]# chkconfig --list |grep virtlibvirt-guests 0:off 1:off 2:on 3:on 4:on 5:on 6:offlibvirtd 0:off 1:off 2:on 3:on 4:on 5:on 6:offvirt-who 0:off 1:off 2:on 3:on 4:on 5:on 6:off
查看虚拟机状态:
[root@Test-41 Desktop]# virsh list Id Name State``----------------------------------------------------``
没有可用的虚拟机,因为还没建虚拟机。
本文就到这里,下篇文章会介绍KVM的配置和使用