引言

  说起虚拟机,大家都不陌生。需要使用虚拟机的场景也非常的多,比如有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统;再比如喜欢研究网络体系结构的朋友,需要在自己的电脑上虚拟出 N 个系统组成各种各样的网络。(这个需要电脑的配置够强大才行,幸好本人的电脑够。)还比如用 Windows 的想玩 Linux,用 Linux 想玩 Windows,这样用虚拟机玩起来也比较方便;最后比如有人想研究一下目前最流行的大数据啊、云计算啊,想试一试 Hadoop、Spark、OpenStack 什么的,没有虚拟机怎么搭建实验环境。我自己也经常用虚拟机,在 Windows 中用的是 VMWare,感觉它功能强大、使用方便,运行效率也非常的高。我的博客中有不少内容都是在虚拟机中折腾出来的,你们能分得出来吗?在 Linux 系统下,我也用虚拟机。比如在我的这一篇《使用GCC和GNU Binutils编写能在x86实模式运行的16位代码》中,我就使用 QEMU 来运行一个 FreeDOS 系统,用来调试我的 16 位代码。其实我自己也是一个喜欢研究操作系统的主,结识 QEMU 就是从《自己动手写操作系统》这本书开始的。

  虚拟机的分类很复杂。什么全虚拟、半虚拟什么的搞得人头晕。我用过的虚拟机也不少了,也总是分不清这些概念。而且桌面用户和企业级用户对虚拟机的期望值是不一样的。比如说,我可能期望这样一个虚拟机:

  1.它能模拟出一台完整的个人电脑,我可以给它安装任何我想安装的操作系统;

  2.它要有比较好用的图形界面,模拟出的电脑也要能无障碍运行 Windows 或 Gnome 这样的图形系统,能打游戏最好;

  3.客户操作系统所用的硬盘就是宿主操作系统中的一个镜像文件,随时可复制粘贴,随时可打包带走;

  4.最好能模拟出一些本身不存在的硬件,比如多个网卡什么的。

  很显然,VMWare Workstation 就是这样一个可以完美满足我要求的桌面用户最满意的虚拟机。我经常使用它来折腾各个 Linux 发行版,而且运行流畅。当然,在 Linux 这个开源的世界我们是不该去使用破解版这样的东西的。不过不用担心,在 Linux 江湖中,还有 VirtualBox、QEMU 这样的虚拟机软件可用。

  而企业级用户呢,他们期望的虚拟机可能是这样的:

  1.它不一定要能模拟出一台完整的电脑,重点是 CPU、内存、磁盘和网卡,重点是能当服务器使用;

  2.它性能一定要好,虚拟的 CPU 性能一定要接近物理 CPU,一定要充分利用物理 CPU 的所有特性,为了性能,甚至只能安装经过修改过内核的操作系统;(所谓的半虚拟化技术。)

  3.它隔离性一定要好,它的目的是把一台机器分成 N 台机器用,而管理这 N 台虚拟机的宿主机要越不占用资源越好,客户机是主,宿主机是次;(正如 Xen 这样。)

  4.由于企业级用户对性能的追求,所以客户机所用的硬盘可能真是一个独立的物理硬盘、磁盘阵列、网络文件系统什么的,而不仅仅只是宿主机上的一个镜像文件;

  5.它不一定需要有图形界面,因为使用命令行界面更容易管理,比如自动化啊、远程化啊、批量化啊什么的;

  6.更多的企业级高可用性需求,比如什么热备份啊、动态迁移啊什么的。

  从上面这些期望值可以看出,虚拟机领域水很深,市场前景也比较广阔。各个虚拟机厂家把自家产品吹得天花乱坠那也是很常见的,因为每一个用户期望的点都可以大做文章嘛。所谓临渊羡鱼,不如退而结网,各种虚拟机看得再过瘾,也不如自己尝试一下。

QEMU 实战

  今天我介绍的是 QEMU。还是老规矩,我的博文并不是该软件的使用手册,所以,它的学习资料还请参考 QEMU 的官网:

  http://wiki.qemu.org/Main_Page

  或者,在自己的系统中输入如下命令:

  man qemu-system-i386

  man qemu-img

  等等...

  QEMU 本身是一个非常强大的虚拟机,甚至在 Xen、KVM 这些虚拟机产品中都少不了 QEMU 的身影。在 QEMU 的官方文档中也提到,QEMU 可以利用 Xen、KVM 等技术来加速。为什么需要加速呢,那是因为如果单纯使用 QEMU 的时候,它自己模拟出了一个完整的个人电脑,它里面的 CPU 啊什么的都是模拟出来的,它甚至可以模拟不同架构的 CPU,比如说在使用 Intel X86 的 CPU 的电脑中模拟出一个 ARM 的电脑或 MIPS 的电脑,这样模拟出的 CPU 的运行速度肯定赶不上物理 CPU。使用加速以后呢,可以把客户操作系统的 CPU 指令直接转发到物理 CPU,自然运行效率大增。

  QEMU 同时也是一个非常简单的虚拟机,给它一个硬盘镜像就可以启动一个虚拟机,如果想定制这个虚拟机的配置,比如用什么样的 CPU 啊、什么样的显卡啊、什么样的网络配置啊,指定相应的命令行参数就可以了。它支持许多格式的磁盘镜像,包括 VirtualBox 创建的磁盘镜像文件。它同时也提供一个创建和管理磁盘镜像的工具 qemu-img。QEMU 及其工具所使用的命令行参数,直接查看其文档即可。

  下面开始体验。先看看 Ubuntu 软件源中和 QEMU 有关的包有哪些:

  我的电脑是 Intel 的 CPU,而我想虚拟的也是个人电脑,所以我安装的自然是 qemu-system-x86,另外一个有用的是 qemu-utils。查看 QEMU 软件包中的工具及文档:

  使用 qemu-img 创建磁盘映像文件,使用 qemu-system-i386 启动虚拟机,并安装操作系统:

  WinXP 估计是目前全网络上最好下载的操作系统了。运行以上命令后,弹出熟悉的系统安装界面。安装过程我就不啰嗦了。下图是安装完 WinXP 操作系统之后的效果。可以给 qemu-system-i386 指定更多的参数,在再一次启动 WinXP 的时候,我除了给它分配了 2G 内存,我还使用 -smp 2 参数为它分配了两个 CPU,还使用 -vga vmware 为它指定和 VMWare 虚拟显卡一样的显卡。虽然指定两个 CPU,但是性能仍较差。随便拖动一下窗口 CPU 使用率就飙升到 100%。

  而且从上图中可以看到,虚拟机中的 CPU 虽然显示为 3.5GHz,但是很显然是 QEMU 模拟出来的,和物理 CPU 有显著差别。事实上我的电脑配置相当强悍,Core i7-4770K 的四核八线程 CPU,请看 lshw 的输出结果:

结论:

  Intel Core i7-4770K 的 CPU,虚拟出的 XP 也分配了 2G 的内存和两个 CPU,但是流畅度仍较差。说明单纯使用 QEMU 还是不能满足我们桌面用户的需要。配合Xen 或者 KVM 呢?性能是否会有质的飞跃?敬请期待下篇。

(京山游侠于2015-02-17发布于博客园,转载请注明出处。)

虚拟机体验之 QEMU 篇的更多相关文章

  1. Linux入门学习教程:虚拟机体验之KVM篇

    本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2.       dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...

  2. 虚拟机体验之 KVM 篇

    在上一篇中,我展示了虚拟机软件 QEMU 的使用.效果及其性能,同时也分析了不同用户对虚拟机的不同追求.但是不管是桌面用户还是企业级用户,对虚拟机软件的追求有一点是共同的,那就是性能.QEMU 是一个 ...

  3. 虚拟机体验之 VirtualBox 篇 —— 性能强大的经典架构

    前两篇体验了 QEMU 和经过 KVM 加速的 QEMU,并体验了第三方虚拟机管理工具 virt-manager,让我们见识了开源社区的强大和开源虚拟机软件的高质量和高性能.这一篇,我来剖析一下 Vi ...

  4. 虚拟机体验之 Xen 篇 —— 令人脑洞大开的奇异架构

    这一篇我要体验的虚拟机系统是 Xen.在虚拟机领域,Xen 具有非常高的知名度,其名字经常在各类文章中出现.同时 Xen 也具有非常高的难度,别说玩转,就算仅仅只是理解它,都不是那么容易.之所以如此, ...

  5. Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  6. 面试体验:Microsoft 篇(转)

    http://www.cnblogs.com/cathsfz/archive/2012/08/14/microsoft-interview-experience.html 在上一篇<面试体验:G ...

  7. 阿里云物联网平台体验(树莓派+Python篇)

    阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...

  8. 【OK210试用体验】进阶篇(2)视频图像采集之MJPG-streamer编译(arm移植)

    上一篇([OK210试用体验]进阶篇(1)视频图像采集之MJPG-streamer编译(Ubuntu系统下))进行了MJPG-streamer在Ubuntu下的编译及测试,这一篇针对OK210,进行a ...

  9. 虚拟机体验NAS私人云全揭秘:序言——虚拟机体验NAS私人云缘由

    "世界在新冠肺炎疫情后将永远改变",对于2020春天在全球蔓延的新冠肺炎疫情,美国前国务卿基辛格做了这样的评价.确实,也改变了我们.春节期间,本着少添乱的原则,响应国家号召,自我隔 ...

随机推荐

  1. 05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器

    LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...

  2. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

  3. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  4. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  5. 走进缓存的世界(三) - Memcache

    系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

  6. slf4j中的MDC

    slf4j中MDC是什么鬼 slf4j除了trace.debug.info.warn.error这几个日志接口外,还可以配合MDC将数据写入日志.换句话说MDC也是用来记录日志的,但它的使用方式与使用 ...

  7. BPM任务管理解决方案分享

    一.方案概述任务是企业管理者很多意志的直接体现,对于非常规性事务较多的企业,经常存在各类公司下达的各种任务跟进难.监控难等问题,任务不是完成效果不理解,就是时间超期,甚至很多公司管理层下达的任务都不了 ...

  8. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  9. 项目自动化建构工具gradle 入门1——输出helloWorld

    先来一个简单的例子,4个步骤: 1.进入D:\work\gradle\java 目录  ,您电脑没这目录? 那辛苦自己一级一级建立起来吧 新建文件build.gradle,文件内容是: apply p ...

  10. EQueue 2.3.2版本发布(支持高可用)

    前言 前段时间针对EQueue的完善终于告一段落了,实在值得庆祝,自己的付出和坚持总算有了成果.这次新版本主要为EQueue实现了集群功能,基本实现了Broker的高可用.另外还增加了很多实用的功能, ...