Archive for December, 2012

2012/12/22

KVM保证guest OS正确执行的手段就是当guest执行I/O指令或者其他特权指令时,引发处理器异常,从而进入到根操作模式(Intel 的VT-x技术)。 当guest OS执行一些特权指令或者外部事件时,比如I/O访问,对控制寄存器的操作,对MSR(Machine Special Register)的读写操作、数据包的到达等,都会引起CPU发生 VM Exit,发生VM Exit后,KVM 会将guest OS 的状态保存到VMCS中,把Host的状态装入物理CPU,处理器进入根操作模式。接着KVM会读取保存的VMCS中 VM_EXIT_REASON字段的内容,从而知道虚拟机退出的原因。如果由于I/O信号到达,则退出到用户模式,交给Qemu来处理,处理完毕后,再通过KVM重新进入guest OS运行;如果是外部中断,则有KVM做一些必要的处理再返回。

10,259 views
2012/12/15

最近用一些零碎的时间学习KVM,算算大概也快有一个月了吧,进度还是很缓慢的,感觉该写一些类似读书笔记的东西了。欢迎大家来讨论,如果有错误,还请不吝赐教 KVM 即 Kernel Based Virtual Machine, 是一个内核模块,使用它需要CPU支持虚拟化。加载KVM模块后,系统中会有一个 /dev/kvm 设备,这个设备提供 ioctl 和 mmap操作。目前,KVM还必须和修改过的Qemu配合起来使用(这样说是不准确的,因为已经有一个叫 native kvm tool的东东了),KVM 使用Qemu做I/O模拟,虽然Qemu也提供CPU的模拟,但是KVM不用,也许这正是KVM+Qemu比单纯用Qemu进行虚拟化性能高的原因吧。 运行在Qemu中的虚拟机被称为Guest,运行Qemu的物理机称为Host, 每一个guest是host上的一个进程,guest的每一个cpu对应进程中的一个线程。Qemu和KVM之间通过ioctl进行交互,KVM和guest之间通过VM Entry和VM Exit进行切换。

8,484 views