KVM 虚拟化api
KVM 模块是KVM 虚拟机核心部分,其主要功能是初始化CPU 硬件,打开虚拟化模式,而后将虚拟客户机运行在虚拟模式下,并对虚拟客户机的运行提供必定的支持。
QEMU 设备模型,QUMU 自己并非KVM 一部分,其自身就是一个著名的开源虚拟机软件,与KVM 不一样,QEMU 虚拟机是一个纯软件的实现,因此性能不高,可是优势是在支持QEMU 自己编译运行的平台上就能够实现虚拟机的功能,
甚至虚拟机与宿主机并非一个同一个架构,QEMU 代码中有整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及KVM 使用到的虚拟设备(好比网卡,显卡,存储控制器和硬盘等)
KVM 在QEMU 的基础上进行了修改,虚拟机运行期间,QEMU 经过KVM 提供的系统调用进入内核,由KVM 模块负责将虚拟机置于处理器的特殊模式。遇到虚拟机进行输入输出操做,KVM 模块会从上次的系统调用出口返回QEMU,
由QEMU 负责解析和模拟这些设备。
Intel 虚拟化技术: Intel 虚拟化技术实际上是一系列硬件技术的结合,虚拟机监控机软件经过选择利用各项技术,从而提升虚拟化软件的性能或者实现各类不一样的功能。
KVM: Kernel-based Virtual Machine, Qumranet公司, 依赖于HVM;Intel VT-x, ADM ADM-V; KVM模块载入后的系统的运行模式: 内核模式:GuestOS执行I/O类操做,或其它的特殊指令的操做;称做“来宾-内核”模式; 用户模式:表明GuestOS请求I/O类操做; 来宾模式:GuestOS的非I/O类操做;事实上,它被称做“来宾-用户”模式; kvm hypervisor:
KVM 组件架构
KVM的组件: 两类组件: /dev/kvm:工做于hypervisor,在用户空间可经过ioctl()系统调用来完成VM建立、启动等管理功能;它是一个字符设备,功能: 建立VM、为VM分配内存、读写VCPU的寄存器、向VCPU注入中断、运行VCPU等等; qemu进程:工做于用户空间,主要用于实现模拟PC机的IO设备;
KVM的工具栈: qemu: qemu-kvm qemu-img libvirt GUI: virt-manager, virt-viewer CLI: virt-install, virsh QEMU主要提供了如下几个部分: 处理器模拟器 仿真IO设备 关联模拟的设备至真实设备; 调试器 与模拟器交互的用户接口
安装工具
#检查是否支持虚拟化Intel 系列CPU 支持虚拟化的标志是vmx ,AMD 系列CPU 的标志为svm 。
[root@localhost ~]# grep -E --color "(vmx|svm)" /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm epb tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt dtherm arat pln pts [root@localhost ~]#
[root@localhost ~]# modprobe kvm #装载模块
[root@localhost ~]# ls /dev/kvm #验证
/dev/kvm
[root@localhost ~]# 性能
[root@localhost /]# modinfo kvm #查看装载的模块 filename: /lib/modules/3.10.0-862.el7.x86_64/kernel/arch/x86/kvm/kvm.ko.xz license: GPL author: Qumranet retpoline: Y rhelversion: 7.5 srcversion: 8A3372406CDF0ACF69A0E58 depends: irqbypass intree: Y vermagic: 3.10.0-862.el7.x86_64 SMP mod_unload modversions signer: CentOS Linux kernel signing key sig_key: 3A:F3:CE:8A:74:69:6E:F1:BD:0F:37:E5:52:62:7B:71:09:E3:2B:96 sig_hashalgo: sha256 parm: ignore_msrs:bool parm: min_timer_period_us:uint parm: kvmclock_periodic_sync:bool parm: tsc_tolerance_ppm:uint parm: lapic_timer_advance_ns:uint parm: vector_hashing:bool parm: halt_poll_ns:uint parm: halt_poll_ns_grow:uint parm: halt_poll_ns_shrink:uint [root@localhost /]# modinfo kvm-amd #查看装载的模块 filename: /lib/modules/3.10.0-862.el7.x86_64/kernel/arch/x86/kvm/kvm-amd.ko.xz license: GPL author: Qumranet retpoline: Y rhelversion: 7.5 srcversion: D8DE38BB5E913565DEFB99E alias: x86cpu:vendor:*:family:*:model:*:feature:*00C2* depends: kvm intree: Y vermagic: 3.10.0-862.el7.x86_64 SMP mod_unload modversions signer: CentOS Linux kernel signing key sig_key: 3A:F3:CE:8A:74:69:6E:F1:BD:0F:37:E5:52:62:7B:71:09:E3:2B:96 sig_hashalgo: sha256 parm: npt:int parm: nested:int parm: avic:int parm: vls:int parm: vgif:int [root@localhost /]#
管理工具ui
KVM的工具栈: qemu: #管理工具 qemu-kvm qemu-img
libvirt GUI: virt-manager, virt-viewer CLI: virt-install, virsh#libvirt是一套用于管理硬件虚拟化的开源API、守护进程与管理工具。[3]此套组可用于管理KVM、Xen、VMware ESXi、QEMU及其余虚拟化技术。libvirt内置的API普遍用于云解决方案开发中的虚拟机监视器编排层(Orchestration Layer)。