2024年5月29日发(作者:)

一、

KVM是修改过的QEMU,而且使用了硬件支持的仿真,仿真速度比QEMU快。

二、

Qemu:

是一个完整的可以单独运行的软件,它可以用来模拟机器,非常灵活和可移植。它主要通过

一个特殊的'重编译器'将为特定处理器编写二进制代码转换为另一种。(也就是,在PPCmac

上面运行MIPS代码,或者在X86 PC上运行ARM代码)

KQemu:

当源和目标代码有同样的架构的时候(就像最普通的情况 x86运行在x86上面),同样需要

解析代码去出去任

何'特权指令'并且把它们替换为上下文转换。为了尽量使这个过程有效,有个内核模块KQemu

处理这个事情。

作为一个内核模块,KQemu仅仅需要替换最底层的ring0-only指令。在这个情况下,Qemu

仍然为模拟的机器分配所有的RAM并且加载代码。不同的是,KQemu不需要重新编译代码,

它仅仅调用KQemu去扫描/打补丁/执行。所有外围的硬件仿真是在Qemu中做的。

由于大部分代码都是没有变换的,但是KQemu还是需要转换ring0代码(VM内核的绝大部

分代码),所以性能仍然不好。

KVM:

KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器

到一种新的用户 (guset)模式。用户模式有自己的ring状态集合,但是特权ring0的指令会

陷入到管理器(hypervisor)的代码。由于这是一个新的处理器执行模型,代码不需要任何的改

动。

除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用

于管理VM)和一部分PCI模拟的硬件。

在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块

(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移进来)和与剩下的用

户空间代码的交互。

kvm-qemu可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用

callingKQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用

户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会KVM内核模块,该内

核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。

这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使

用通常Linux工具管理。如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4

个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或

者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小

当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,

USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。

三、

qemu+kvm 虚拟机

首先要搞清楚是 qemu,kqemu,kvm三者之间的关系。实际上,qemu 是一套完

整的虚拟系统,kqemu 是qemu加速器,相当于其增强插件。kvm是另一套虚拟

系统,包括内核虚拟构架和处理器相关模块,但其借用了 quem 其它一些组件。

qemu 在没有 kqemu 增强下,的确是很慢得让人受不了,因为要编译 kqemu 模

块,但因为 debian 源里的 source 中 makefile 中缺少某些 rules ,导致编

译不成功,再加上 kvm 已经很快了,所以就没有试 kqeum。

kvm 采用 qemu 一样的参数,网上有很多相关的帖子。

以前一直用 virtualbox,它的性能也很不错,cpu 占用也很少,和 qemu 一样,

图形性能较差,但也比 qemu 好那么一点。然而,vbox 中 cpu 占用就高了一点。

相比较 kvm 存在的一些缺点如下:

1,不能使用 direct3d,

2,不能和主机一起使用声音系统,可能是设置没有弄好而已,

3,鼠标有点慢,最大化后还原就好了,

4,缺少一些 vbox 中的小功能,如“自动调整显示尺寸”,“无缝模式”,”

鼠标自动移出“等

参数:

kvm -daemonize -hda -m 512 -smp 2 -std-vga -net nic,model=virtio

-net user -soundhw all -localtime

注:用 std vga 可以用更多的显示分辨率(要装驱动),用 virtio 可以用 1gb

网卡。

参考:

kvm全教程

/?f=65&t=130210

kvm windows显卡驱动安装

/?f=65&t=156644&start=0

kvm官方

/page/Main_Page [+❤]