/dev/kvm到底是什么?

1./dev/kvm设备是kvm(kernel-based virtual machine)虚拟机出来的一个设备文件

2.说到kvm,不得不提qemu,qemu是一个模拟软件,运行于linux的用户空间。qemu可以模拟我们能见到的所有操作系统,如在x86平台上模拟andrio,ios等,当然也可以模拟windows,linux(gnu),BSD。由于是通过模拟的方法来实现系统虚拟化,它产生的所有CPU指令都翻译转换一次,因此其性能非常低。

3.那么问题来了,kvm提供了什么呢?其实,kvm只提供了三个模块,分别是kvm.ko,kvm_intel.ko,kvm_amd.ko,后两个模块是根据物理主机的CPU所属厂家自动匹配的。

4.由上可知,qemu是一个用户空间的程序,kvm是一个运行于内核空间的程序。为了提供一个整体的解决方案(包括用户空间工具集[由qemu提供],管理各种设备(由kvm内核模块提供)),kvm开发团队借用了qemu代码,并作了一些修改,形成了一套工具,也就是qemu-kvm(不是linux中的命令)

5.如何让qemu与kvm内核模块结合起来,这时,/dev/kvm就起作用了。/dev/kvm是一个字符设备,当qemu打开这个设备后,通过ioctl这个系统调用就可以获得kvm模块提供的三个抽象对象:

kvm:代表kvm模块本身,用来管理kvm版本信息,创建一个vm(通过)

vm:代表一个虚拟机。通过vm的io_ctl接口,可以为虚拟机创建vcpu,设置内存区间,创建中断控制芯片,分配中断等等

vcpu:代表一个vcpu。通过vcpu的io_ctl接口,可以启动或者暂停vcpu,设置vcpu的寄存器,为vcpu注入中断等等

Qemu的使用方式:

1.打开/dev/kvm设备

2.通过KVM_CREATE_VM创建一个虚拟机对象

3.通过KVM_CREATE_VCPU为虚拟机创建vcpu对象

4.通过KVM_RUN设置vcpu运行起来

6.So,/dev/kvm只是kvm内核模块提供给用户空间的一个接口,这个接口被qemu-kvm调用,通过ioctl系统调用就可以给用户提供一个工具用以创建,删除,管理虚拟机等