在上一篇中,我展示了虚拟机软件 QEMU 的使用、效果及其性能,同时也分析了不同用户对虚拟机的不同追求。但是不管是桌面用户还是企业级用户,对虚拟机软件的追求有一点是共同的,那就是性能。QEMU 是一个强大的虚拟机软件,它可以完全以软件的形式模拟出一台完整的电脑所需的所有硬件,甚至是模拟出不同架构的硬件,在这些虚拟的硬件之上,可以安装完整的操作系统。QEMU 的运行模式如下图:

  很显然,这种完全以软件模拟硬件的形式虽然功能强大,但是性能难以满足用户的需要。模拟出的硬件的性能和物理硬件的性能相比,必然会大打折扣。为了提高虚拟机软件的性能,开发者们各显神通。其中,最常用的办法就是在主操作系统中通过内核模块开一个洞,通过这个洞将虚拟机中的操作直接映射到物理硬件上,从而提高虚拟机中运行的操作系统的性能。如下图:

  其中 KVM 就是这种加速模式的典型代表。在社区中,大家常把 KVM 和 Xen 相提并论,但是它们其实完全不一样。从上图可以看出,使用内核模块加速这种模式,主操作系统仍然占主导地位,内核模块只是在主操作系统中开一个洞,用来连接虚拟机和物理硬件,给虚拟机加速,但是虚拟机中的客户操作系统仍然受到很大的限制。这种模式比较适合桌面用户使用,主操作系统仍然是他们的主战场,不管是办公还是打游戏,都通过主操作系统完成,客户操作系统只是按需使用。至于 Xen,则完全使用不同的理念,比较适合企业级用户使用,桌面用户就不要轻易去碰了,具体内容下一篇我再讲。

  其实 VirtualBox 也是采取的这种内核模块加速的模式。我之所以这么说,是因为在安装 VirtualBox 时,它会要求安装 DKMS。如下图:

  熟悉 Linux 的人知道,DKMS 就是为了方便用户管理内核模块而存在的,不熟悉 DKMS 的人 Google 一下也可以了解个大概。关于 VirtualBox 的具体使用方面的内容,我下一篇再讲。这一篇主要讲 KVM。

  KVM 和 QEMU 是相辅相成的,QEMU 可以使用 KVM 内核模块加速,而 KVM 需要使用 QEMU 运行虚拟机。从上图可以看到,如果要使用 Ubuntu 的包管理软件安装 KVM,其实安装的就是 qemu-kvm。而 qemu-kvm 并不是一个什么很复杂的软件包,它只包含很少量几个文件,如下图:

  用 man 命令查看一下它的文档,发现 qemu-kvm 包不仅包含的文件很少,而且它的可执行文件 kvm 也只是对 qemu-system-x86_64 命令的一个简单包装,如下图:

  那么问题来了,kvm 内核模块究竟是由哪个包提供的呢?其实,自从 Linux 2.6 开始,kvm 就已经被加入内核了。如果非要找出 kvm 内核模块 kvm.ko 是由哪个包提供的,可以用如下命令考察一下:

  写到这里,已经可以看出 KVM 的使用是很简单的了。下面,我使用 KVM 运行一下上一篇中安装的 WinXP 操作系统,体验一下 QEMU 经过 KVM 加速后的运行效率。使用如下命令运行使用 KVM 加速的 QEMU:

  可以看出,使用 KVM 加速后,虚拟机中的 WinXP 运行速度提升了不少,开机只用了 34 秒。我将分辨率调整为 1366*768,图形界面运行也很流畅,不管是打开 IE 浏览器还是 Office 办公软件都没有问题,再也没有出现 CPU 使用率飙升到 100% 的情况。如果用 ps -ef | grep qemu 命令查看一下,发现 kvm 命令运行的还是 qemu-system-x86_64 程序,只不过加上了 -enable-kvm 参数,如下图:

  另外,对于桌面用户来说,有一个好用的图形化界面也是很重要的。虽然 QEMU 和 KVM 自身不带图形界面的虚拟机管理器,但是我们可以使用第 3 方软件,比如 virt-manager。只需要使用 sudo apt-get install virt-manager 即可安装该软件。该软件依赖于 libvirt,在安装过程中也会自动安装。运行 virt-manager 的效果如下图,注意必须使用 sudo 运行,因为该软件需要超级用户权限:

  该软件可自动识别系统中的虚拟机环境是 QEMU+KVM 还是 Xen。新建一个虚拟机,由于之前安装过一个 WinXP 系统,所以选择导入现有硬盘镜像。点下一步后,出现如下界面:

  这一步没什么好说的,再点下一步,如下图:

  这里可以设置网络选项。如果勾选“在安装前自定义配置”的话,还可以对硬件进行进一步的自定义,如下图:

  在上图中,我们可以看到虚拟机支持的所有虚拟显卡的类型,在这里,我当然选择的是 VMVGA,因为我以前经常用 VMWare,知道这些操作系统在 VMWare 的虚拟显卡设置下运行得都没有问题。当然,其它的选项都可以试一下,不过在虚拟的操作系统中需要安装相应的驱动程序。

  最后,虚拟机运行的效果图如下:

  可以看到,该程序提供的界面有非常丰富的功能菜单,功能是非常强大的,甚至可以向虚拟机中的操作系统发送组合按键。

  可以这么说,如果没有 VirtualBox 的话,QEMU+KVM 的组合应该是桌面用户的首选。下一篇我将尝试 VirtualBox,VirtualBox 号称是最强大的开源虚拟机系统,敬请期待。

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

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

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

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

  2. 虚拟机体验之 QEMU 篇

    引言 说起虚拟机,大家都不陌生.需要使用虚拟机的场景也非常的多,比如有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统:再比如喜欢研究网络体系结构的朋友,需要在自己的电脑上虚拟出 N 个 ...

  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. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  2. .Net中的AOP系列之构建一个汽车租赁应用

    返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...

  3. iOS开源项目周报0105

    由OpenDigg 出品的iOS开源项目周报第四期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. He ...

  4. javaScript的原型继承与多态性

    1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...

  5. 创建几个常用table展示方式插件

    这次和大家分享的是自己写的一个table常用几种展示格式的js插件取名为(table-shenniu),样式使用的是bootstrap.min.css,还需要引用jquery.min.js包,这个插件 ...

  6. Nginx如何处理一个请求

    看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...

  7. AFNetworking 3.0 源码解读(九)之 AFNetworkActivityIndicatorManager

    让我们的APP像艺术品一样优雅,开发工程师更像是一名匠人,不仅需要精湛的技艺,而且要有一颗匠心. 前言 AFNetworkActivityIndicatorManager 是对状态栏中网络激活那个小控 ...

  8. javascript动画系列第一篇——模拟拖拽

    × 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...

  9. ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知

    一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...

  10. 【转】外部应用和drools-wb6.1集成解决方案

    一.手把手教你集成外部应用和drools workbench6.1 1.         首先按照官方文档安装workbench ,我用的是最完整版的jbpm6-console的平台系统,里面既包含j ...