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 [+❤]


发布评论