KVM虚拟化介绍
KVM运行在Linux kernel下的一个模块,是免费、非商业、开源的虚拟机管理程序,代表基于内核的虚拟机。
它把VMM里的指令发到Guest里,Guest里的事件转换到VMM
现在常用两种虚拟化方案:
- Qemu
- kvm tools
KVM使用起来比VirtualBox等工具要复杂,主要用在服务器。kvm使用稍改动的qemu程式来创建虚拟机。KVM目前没有支持Windows的版本。
KVM目前不支持动态迁移,不支持在32位系统里模拟运行t64位系统。
Intel VT-X和AMD's AMD-V
Intel VT和AMD’s AMD-V是一套和支持该技术的虚拟机监视器相结合的硬件增强特性(指令集扩展)。kvm可在原始硬件速度下通过运行完全隔离的虚拟机来执行任务。在Linux内核(2.6.16+)运行
egrep ‘^flags.*(vmx|svm)’ /proc/CPUinfo
可以查看是否支持VT。
KVM API
用于VMM和KVM间通讯,是一些通讯的规范,不是通讯函数API。文档位置在Linux Kernel的Documentation/virtual/kvm/api.txt。
System IOCTLs
创建VM,配置整体环境
示例:
system_fd = open("/dev/kvm",...) <span style="white-space:pre"> </span>//对应vm的system_fd
vm_fd=ioctl(system_fd,KVM_CREATE_VM,...) <span style="white-space:pre"> </span>//对system_fd创建vcpu等操作
VM IOCTLs
配置VM虚拟机属性
vcpu_fd=ioctl(vm_fd,KVM_CREATE_VCPU,...)
VCPU IOCTLs
创建一个VCPU
status=ioctl(vcpu_fd,KVM_RUN,...) //返回运行状态
什么样的事件要转换到VMM?
如要访问一个网卡,
三个要模拟的基本资源
文档位置:
- CPU
KVM_SET_REG 设置寄存器
KVM_GET_REG 得到寄存器值
KVM_GET_SREGS 一次得到多个寄存器
KVM_SET_SREGS 一次设置多个寄存器 - Memory
- Device
KVM 资源管理
CentOS 上的KVM的安装
yum install kvm kmod-kvm qemu kvm-qemu-img virt-viewer virt-manager libvirt libvirt-python python-virtinst 或yum groupinstall KVM
查询:lsmod | grep kvm
后面创建过程以后再补上。