KVM学习笔记

来源:互联网 发布:微信玩色子作弊软件 编辑:程序博客网 时间:2024/06/08 05:36
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的X86 硬件的开源的 Linux 原生的全虚拟化解决方案
KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚拟机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是QEMU
kernel-based virtual machine,基于Linux内核的虚拟机,kvm.ko负责CPU和内存虚拟化。IO虚拟化由Linux内核和Qemu实现。KVM的管理工具为libvirt,openstack底层也使用libvirt
kvm安装:直接在Linux系统上安装KVM所需包。其中qemu-kvm、qemu-systerm负责CPU、内存和IO虚拟化,libvirt-bin为libvirt,virt-manager为KVM图形管理工具,网络虚拟化由bridge-utils、vlan实现。
使用virt-manager启动虚拟机, /var/lib/libvirt/images/ 目录为KVM默认存放镜像文件的地方。virt-manager也可以用来管理其他宿主机上的虚拟机,注意此处需要配置被管理宿主机中的两个文件。
virsh list 命令用于查看宿主机上的虚拟机,还可以使用其他virsh命令管理虚拟机。
注:一个KVM虚拟机在宿主机中作为一个qemu-kvm进程运行,与其他Linux进程一样被调度。
CPU虚拟化由vmx 或 svm 实现。虚拟机中每一个vCPU对应qemu-kvm进程中的每一个线程。因此虚拟机中vCPU总数可以超过物理CPU总数,这个叫CPU超配。
内存虚拟化实现客户机物理内存到宿主机机器内存的转化,客户机操作系统负责客户机虚拟地址到客户机物理地址的转化,也可以实现超配。KVM实现内存虚拟化的方式有两种:影子页表EPT页表,可参考http://www.cnblogs.com/sammyliu/p/4543597.html
存储虚拟化由存储池(storage pool)和volume卷实现,存储池为宿主机中可见的一块内存,volume为存储池中分配给虚拟机的一块空间。KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool,是一种目录类型的存储池,而volume则为该目录下的文件,如一个镜像文件则为一个volume,volume有多种类型,包括raw,qcow,vmdk,vdl。
网络虚拟化通过Linux bridge实现vnet br0 eth0之间的数据传输。