在KVM(Kernel-based Virtual Machine) 里面一直会谈论到QEMU 什么是QEMU 究竟在KVM 的虚拟化中QEMU 占了什么重要的地位.
![](http://benjr.tw/files/images/virtualization/kvm_qemu02.png)
- QEMU
- machine emulator (User mode emulation)
当QEMU当成machine emulator时它可以让其他平台的作业系统OSes或是程式Programes比如是ARM (一种常用于可携式装置的处理器)系统可以直接执行在不同的平台上,比如是我们的桌机.使用的技术叫做dynamic translation( JIT : just-in-time compilation http://en.wikipedia.org/wiki/Just-in-time_compilation ).借此可以得到较佳的较能.
- virtualizer(System mode)
当QEMU当成virtulizer时, QEMU几乎可以以模拟的方式模拟出一台PC ,包含了CPU以及其他的周边装置,所以透过这种方式,QEMU可以模拟出不同的硬体出来,如x86, AMD64, ARM , Alpha, ETRAX CRIS, MIPS, MicroBlaze和SPARC.不过目前可以执行QEMU的virtualizer只有x86 x86_64和Power PC详细资料请参考QEMU的官方网页 http://www.nongnu.org/qemu/status.html 也因此市面上的作业系统都可以模拟出来如Linux, Solaris, Microsoft Windows, DOS,以及BSD.但是这种模拟的方式像是在Host的作业系统上跑应用程式(application),所以效能不是很好,所以在Linux kernel下的是使用另外一种的方式去模拟KQEMU.
我们来看看QEMU的官方网页对于QEMU的定义是什么. http://www.nongnu.org/qemu/about.html QEMU属于Open source也就是可以让大家免费来使用的,而且它就有两种功能1.是machine emulator 2.是virtualizer各代表什么意思呢!
光是看完QEMU 官方网站的说明可以会让人更搞不懂到底KVM 和QEMU 是谁在做模拟的动作.
- KVM & QEMU
一开始我对于KVM和QEMU的概念有点分不太清楚,但这两个东西其实是主要构成Linux虚拟化的最重要的两个元件(components).我们可以先上KVM官方网站的FAQ查看一下.里面的其中有一点就清楚的说明了KVM和QEMU的关系
http://www.linux-kvm.org/page/FAQ#What_is_the_difference_between_KVM_and...
Q:What is the difference between KVM and QEMU?
A:QEMU uses emulation; KVM uses processor extensions (HVM) for virtualization.
原来KVM只负责虚拟化的部份HVM (hardware-assisted virtualization),也就是KVM负责VMM(Hypervisor)的工作,至于模拟硬体装置就交给了QEMU .QEMU的FAQ
http://qemu-buch.de/cgi-bin/moin.cgi/FrequentlyAskedQuestions
Q:Can QEMU use hardware virtualization extensions - Intel's VT or AMD's SVM?
A:At present, no. A separate project named Kernel Virtual Machine currently uses a
modified QEMU to provide this ability for Intel's VT and AMD's SVM technologies.
上面也是讲述同样的关系.KVM主要的功能就只是一个VMM (hypervisor)他并没有去模拟硬体的装置.模拟硬体的动作全都是交给QEMU,不过QEMU只是存在user space的程式它必须透过/dev/kvm来和kernel与硬体沟通.- KQEMU
那KQEMU又是什么?
在Linux KVM上使用的的QEMU是修改过的版本叫做KQEMU(也准备转移到FreeBSD和Windows的系统上).主要是QEMU的公司Fabrice Bellard针对x86有虚拟化处理器的系统,修改一个只能使用在这种系统上的模拟器.这改写过的QEMU被称为KQEMU或是QEMU Accelerator.最主要就是为了提升x86虚拟化处理器对于虚拟化效能的提升.所以我们在使用KVM + KQEMU 时其处理器必须具有Intel (VT) 或是AMD (AMD-V) 功能才能使用.
- Guest Mode
- Guest Model: 执行关于Guest OS的Memory & CPU的I/O请求.
- User Model: 透过KQEMU所模拟的装置,User mode接受Guest OS的Storage和Network I/O请求.
- Kernel Model: 就负责Guest Model所提出的Storage和Network I/O请求并做转换.
系统会将工作模式分为3 种,除了原本的Kernel , User mode 之外还添加了Guest Mode.这三种模式各处理不同的工作.
note: kernel space和user psace在作业系统中会将virtual memeory(记忆体技术的一种)区分成两块,分别为kernel space和user psace.很明显的是kernel space就是保留给kernel, kernel extensions,或是device drivers.这保留的空间是不会再释放出来的.相对应的user space就是给一般使用者的应用程式(applications)来使用.这边的空间会依据需求会被释放出来给其他的程式来使用.