免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11723 | 回复: 10
打印 上一主题 下一主题

qemu究竟是什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-14 01:41 |只看该作者 |倒序浏览
跟KVM是什么关系?
是第三方软件吗?还是KVM的一个模块?

急用,烦请各位大侠说一下~
谢谢!

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-02-05 06:20:00
2 [报告]
发表于 2012-05-15 06:09 |只看该作者
是一个独立的虚拟机吧,kvm是必须要求vt的,qemu没有这方面的限制

论坛徽章:
8
亥猪
日期:2014-02-09 10:55:252015小元宵徽章
日期:2015-03-06 15:57:20数据库技术版块每日发帖之星
日期:2015-06-08 22:20:00综合交流区版块每日发帖之星
日期:2015-06-14 22:20:002015亚冠之阿尔沙巴布
日期:2015-09-01 20:23:45IT运维版块每日发帖之星
日期:2015-09-04 06:20:00IT运维版块每日发帖之星
日期:2015-11-04 06:20:00IT运维版块每日发帖之星
日期:2015-12-04 06:20:00
3 [报告]
发表于 2012-05-15 09:29 |只看该作者
tianxiay2ren 发表于 2012-05-14 01:41
跟KVM是什么关系?
是第三方软件吗?还是KVM的一个模块?


当然不是啊,作者是个神人,大家都知道。

简单的说,KVM是大幅修改过的QEMU,而且使用了硬件支持的处理器扩展实现虚拟化,仿真速度比QEMU快。

可以看看百度的知道:

QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

 QEMU有两种主要运作模式: * User mode模拟模式,亦即是使用者模式。QEMU能启动那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。 * System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上虚拟数部不同虚拟电脑。QEMU的主体部份是在GPL下发布的,而其系统模式模拟与kqemu加速器则是在GPL下发布。使用kqemu可使QEMU能模拟至接近实机速度,但其在虚拟的操作系统是 Microsoft Windows 98或以下的情况下是无用的。

QEMU的优点

可以模拟 IA-32 (x86)个人电脑,AMD 64个人电脑,MIPS R4000, 升阳的 SPARC sun3 与 PowerPC (PReP 及 Power Macintosh)架构
  支持其他架构,不论在主机或虚拟系统上
  在支持硬件虚拟化的x86构架上可以使用KVM加速配合内核ksm大​页​面​备​份​内​存,速度稳定远超过VMware ESX
  增加了模拟速度,某些程序甚至可以实时运行
  可以在其他平台上运行Linux的程序
  可以储存及还原运行状态(如运行中的程序)
  可以虚拟网络卡

QEMU的缺点

对微软视窗及某些主机操作系统的不完善支持(某些模拟的系统仅能运行)
  对不常用的架构的支持并不完善
  除非使用kqemu加速器,否则其模拟速度仍不及其他虚拟软件,如VMware
  比其他模拟软件难安装及使用

参数简介

-L dir 指向BIOS和VGA BIOS所在目录
  -hda/-hdb/-hdd/-hdc “文件名” 使用“文件名”作为硬盘0/1/2/3镜像。
  -cdrom “文件名” 使用“文件名”作为光盘镜像(文件应该是ISO类型)。
  Windows 下的使用者,可以透过下列指令使用实体光盘:
  -cdrom //./x: -> x 代表光盘名称/位置
  例如:-cdrom //./e: -> 使用 E:\ 为光盘
  -fda/-fdb “文件名” 使用“文件名”作为磁盘0/1镜像。
  -boot [a|d|c] 使用磁盘<a>,光盘<d>,或者硬盘<c>启动。
  -m 容量 指定内存的大小,单位是MB。
  -soundhw c1,... 使用声卡设备。
  -soundhw ? 列出所有可使用的声卡
  -soundhw all 使用全部声卡
  -usb 允许使用usb设备。
  -usbdevice 名字 添加一个usb设备“名字”。
  -net nic 创建一块新的网卡。


论坛徽章:
8
亥猪
日期:2014-02-09 10:55:252015小元宵徽章
日期:2015-03-06 15:57:20数据库技术版块每日发帖之星
日期:2015-06-08 22:20:00综合交流区版块每日发帖之星
日期:2015-06-14 22:20:002015亚冠之阿尔沙巴布
日期:2015-09-01 20:23:45IT运维版块每日发帖之星
日期:2015-09-04 06:20:00IT运维版块每日发帖之星
日期:2015-11-04 06:20:00IT运维版块每日发帖之星
日期:2015-12-04 06:20:00
4 [报告]
发表于 2012-05-15 09:32 |只看该作者
tianxiay2ren 发表于 2012-05-14 01:41
跟KVM是什么关系?
是第三方软件吗?还是KVM的一个模块?


这里还有一个更加详细的,你可以看看

Qemu:
是一个完整的可以单独运行的软件,它可以用来模拟机器,非常灵活和可移植。它主要通过一个特殊的'重编译器'将为特定处理器编写二进制代码转换为另一种。(也就是,在PPC mac上面运行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,加载代码,不同于重新编译或者调用calling KQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会KVM内核模块,该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。


这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小。


当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。




当产很火的KVM可以理解为:

KVM 本身不执行任何模拟,一个用户空间程序会使用 /dev/kvm 接口设置一个来宾虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。


在 KVM 架构中,虚拟机实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度。事实上,每个虚拟 CPU 显示为一个常规的 Linux 进程。这使 KVM 能够享受 Linux 内核的所有功能。

设备模拟由提供了模拟的 BIOS、PCI 总线、USB 总线和一组标准的设备(比如 IDE 和 SCSI 磁盘控制器、网络卡等)的修改的 qemu 版本来模拟。

论坛徽章:
0
5 [报告]
发表于 2012-05-31 11:26 |只看该作者
还是没整明白qemu , kqemu, kvm-qemu,  kvm ,它们之间的关系?

尤其是, kqemu  和 kvm-qemu 是同一回事吗?

论坛徽章:
0
6 [报告]
发表于 2012-06-01 07:50 |只看该作者
本帖最后由 liwangli1983 于 2012-06-01 07:55 编辑

同问,如果以-enable-kvm参数启动qemu,和直接用qemu-kvm会有什么区别么?

因为我还有用到qemu-arm这些,所以不能装qemu-kvm。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
7 [报告]
发表于 2012-06-02 20:50 |只看该作者
kvm是个driver,把硬件提供的虚拟化手段暴露给"用户"。qemu-kvm是可能的用户之一,它通过kvm这个driver启动硬件虚拟化,driver则协助硬件完成虚拟化。但IO方面的东西不好虚拟化(x86平台上应该是),于是涉及到IO的地方就从虚拟化状态中退出来,把虚拟IO的任务交给用户态的qemu-kvm,后者虚拟IO以后再度通过kvm进入硬件虚拟化。

纯粹的qemu是一个完整的仿真器,它要仿真CPU和外设,但是手段跟bochs似乎不一样。bochs应该是完全仿真了一台计算机。

总结:qemu是一个完整的仿真程序,不要KVM也能运行,能仿真多种平台。kvm是driver,能让用户态程序使用硬件提供的虚拟化功能(e.g.直接让真实CPU执行虚拟机内存里的指令)。它只是提供了这个功能,总得有人要使用,搞KVM的那帮人就把qemu略加修改(除掉CPU的仿真保留外设的仿真?),使其作为使用kvm的用户态程序。

这几天看了一点资料,不知道理解的对不对。

论坛徽章:
0
8 [报告]
发表于 2012-06-11 10:34 |只看该作者
本帖最后由 Unixell 于 2012-06-11 10:34 编辑

回复 7# tempname2

差不多吧,我的理解是

qemu-kvm会需要内核来配合使用硬件上的加速功能 比如intel的VT-x 和AMD的svm,qemu-kvm没有QEMU新,在qemu的基础之上作了一些修改。
qemu可以加入--enable-kvm 来显式的使用kvm,qemu的更新非常快。如果不使用kvm,qemu可以作一个完整的emulator,各种硬件都模拟。

kqemu现在貌似已经不用了,已经不需要关注了。

kqemu是早期用来加速qemu的 不是qemu-kvm

论坛徽章:
8
亥猪
日期:2014-02-09 10:55:252015小元宵徽章
日期:2015-03-06 15:57:20数据库技术版块每日发帖之星
日期:2015-06-08 22:20:00综合交流区版块每日发帖之星
日期:2015-06-14 22:20:002015亚冠之阿尔沙巴布
日期:2015-09-01 20:23:45IT运维版块每日发帖之星
日期:2015-09-04 06:20:00IT运维版块每日发帖之星
日期:2015-11-04 06:20:00IT运维版块每日发帖之星
日期:2015-12-04 06:20:00
9 [报告]
发表于 2012-06-12 00:05 |只看该作者
Unixell 发表于 2012-06-11 10:34
回复 7# tempname2

差不多吧,我的理解是


学习了,嘿嘿

论坛徽章:
0
10 [报告]
发表于 2012-06-12 16:48 |只看该作者
学习了  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP