KVM虚拟化原理与实践(连载)

云计算概念很火,其底层虚拟化技术也是近年来的研究热点,KVM (kernel-based virtual machine,内核虚拟机) 也越来越流行了,大名鼎鼎的Google公司在其云计算平台GCE(Google Compute Engine)中全部使用KVM来做底层的虚拟化,而且国内的互联网巨头(如Taobao等)也开始研究或者在生产环境部署KVM(或者Xen)虚拟化。  本人2010年时接触KVM,从2011年初开始专注于KVM、Xen等开源虚拟化技术的研究、开发与测试,对Linux上的KVM虚拟化技术的研究和测试也是日常工作中非常重要的一部分,同时也积累了一些KVM学习心得和测试方法,希望与大家分享。

本页是我正在写作的一本关于KVM的书籍的部分章节连载,书名暂为《KVM虚拟化原理与实践》(后正式出版时,名为《KVM虚拟化:实战与原理解析》)吧;这里连载的是我写作过程中的草稿(算α或β版本吧),可能最终成书之时的内容与这里的连载略有不同之处。

update:《KVM虚拟化:实战与原理解析》已经由机械工业出版社于2013年10月正式出版,见:
http://smilejay.cn/kvm-principles-and-practices/
欢迎想了解KVM技术的童鞋购买一本来看看~

欢迎大家阅读和指正,衷心感谢您对本书内容、形式、错别字的任何建议和批评!

本页中的转载有如下几个特点,请大家知晓:

1. 是KVM书籍的部分章节而不是全部内容(等出版后,请大家购买一本支持一下哦 ^_^);

2. 是草稿内容而不是最后书籍发行版中的内容;

3. 小的错别字或格式问题不一定会在本博客连载中修改(但一定会在书籍正式发行前尽量完善);

4. 感谢您的阅读,更感谢您能提出一些批评以便让我做得更好。 Thanks, All.

 

部分章节转载如下:

第3章 构建KVM环境

3.1 KVM硬件系统的配置

3.2 安装Linux系统

3.3.1 下载KVM源代码

3.3.2 配置KVM

3.3.3 编译KVM

3.3.4 安装KVM

3.4 编译和安装qemu-kvm

3.5 安装客户机

3.6 启动第一个KVM客户机

3.7 本章小结

 

第4章 KVM核心基础功能

4.1.3 CPU过载使用

4.1.5 进程的处理器亲和性和vCPU的绑定

4.2.4 内存过载使用

4.3.2 qemu-img命令详解

4.3.4 QEMU支持的镜像文件格式

4.4.1 QEMU支持的网络模式

4.4.2 使用网桥模式(bridge networking mode)

4.5.1 SDL显示的使用

4.5.3 非图形模式

4.6/4.7 本章小结、注释、参考阅读

 

第6章 KVM的管理工具

6.1.1 libvirt简介

6.1.2 libvirt的编译、安装

6.1.3 libvirt、libvirtd的配置和使用

6.1.5 libvirt API 简介

6.1.7 libvirt API 使用示例(C API)

6.1.7 libvirt API 使用示例(Python API)

6.5.1 OpenStack简介

6.5.2 使用DevStack安装和配置OpenStack开发环境

 

第8章 KVM性能测试及参考数据

 8.1 虚拟化性能测试简介

8.2.1 CPU性能测试工具

8.2.2 KVM CPU测试环境配置

8.2.3 KVM CPU性能测试方法

8.2.4 KVM CPU性能测试数据


 

《KVM虚拟化原理与实践》大致目录如下:

0. 推荐序、前言

1. 虚拟化与云计算

2. KVM原理简介

3. 构建KVM环境

4. KVM核心基础功能

5. KVM高级功能详解

6. KVM的管理工具

7. Linux发行版中的KVM

8. KVM性能测试及参考数据

9. 参与KVM开源社区

附录、索引、参考资料等

(限于能力和时间问题,本书没有详细的代码分析部分了)

 

125 Comments

    • 本书我在3天之类看完了,讲解的很浅显代码和架构层次讲解很少,基本是KVM的扫盲书籍适合测试团队看....建议在写第二版的时候能够在深入点....至少让研发人员看了一遍觉得这本书还行得留着....

      • 嗯 是的,谢谢批评~ 对于直接开发KVM内核的同学确实只是一个浅显的入门~ 对于测试、运维、云平台上层的开发者,了解这些KVM知识基本还是就够用了。KVM/Linux内核方面,我的理解还没到能写书的水平。

    • 谢谢关注~ 第4、5章是纯qemu/kvm的功能介绍和实例,而系统架构和代码分析在第9章。

    • 谢谢支持! 我是在尽力快点写,只是参考资料比较少,没有一本讲KVM的书,有不少东西,我也得一边自己做实验和看源码,一边写出来分享。

  1. KVM与QEMU唇齿相依,建议添加相应章节进行介绍。
    支持你的新书,会经常光顾你的博客。

    • 谢谢廖哥的支持! 嗯,QEMU是必不可少的,介绍各个KVM的特性时,大多数都是有QEMU命令行操作的一些介绍,相当于部分介绍QEMU,估计QEMU相关的东西能占到30%以上篇幅,只是没有专门在章节名称上说是QEMU。

  2. 支持博主,我现在正在把我们生产环境全部虚拟化,而使用的虚拟化软件是KVM,希望和博主多多学习。
    如果需要什么数据支持,我会鼎力支持!

    • 嗯 非常谢谢!~ 看来确实是越来越多的公司开始用KVM做虚拟化了~ 需要你数据时,我联系你哦。

  3. 非常期待,一直想找KVM的专业书籍找不到。希望快点出版!!

    • 还没呢,初稿已经基本完成,还需要编辑审阅和修改之类的;估计3、4月份能出版吧(比我原来的预期也慢了点)~ 谢谢关注!

  4. 楼主厉害,期待尽快看到新书,找了半天资料,没有找到合适入门的。

  5. 老大,新书完成否,迫切需要,能否先发本给我啊,预定中我邮箱chenlisongtianya@163.com

    • 基本成型了的;再等等吧。。 哎,比我预期的要晚点了。。

    • 哎呀,确实抱歉啊,还没出版(编辑审稿没有完成),你先把这些部门连载内容看看吧~~ 下次出版了,我贴出来;大家去支持买一本哦 ^_^

    • 嗯,谢谢~ 我最近会加紧时间修订我的初稿,争取早日出来!~

      • 有没有大致的日期的?也希望你能推荐一些和kvm相关的书籍或文章,谢谢。

        • 没有具体日期;不过我最近会话更多力气推动该书的出版。

    • 呃,还需要点时间~~ 有时候不完全由自己控制的;要是以我的做事风格,所有事情都能控制,应该已经出版出来了.. ^_^

  6. 第五章怎么没有了?书中是否有关于源代码的解读呢?好像么有看到啊,也需要这方面的带领,小弟最近也在研究KVM,所以这方面的知识对我而言很重要啊

    • 代码导读部分比较少~~ 原本计划专门写代码导读的;不过由于各种变化,估计就没太多直接分析代码的了。

    • 谢谢支持。还在努力中,内容已经基本完成,只是编辑审稿和一些简单的修补;我也希望早点出来~

  7. 也在等书的出版啊,书出版了,老大能不能也邮箱提醒下,我要直接去买一本来看啊,老大可以考虑放到taobao上挂出来卖啊
    老大能不能写一篇关于kvm要使用多网段的一些内容啊,现在看到的大多都是在同一网段,或者只有虚拟机一网段,主机一网段的情况进行桥接的方式,假如虚拟机数量多,是要使用vlan来进行划分多网段的情况的话,是否只能通过openvswitch的方式,或者还有其它方式啊

    • 首先谢谢支持哦,到时我也将本书上市的消息发email到这里留言说需要的朋友吧(卖书,我脸皮真厚..);先是出版社出版后,估计到时当当、京东、淘宝都能买到.
      要是虚拟机很多,网络可以考虑通过第三层路由来转发?(可以配置内网的DHCP Sever,然后根据你设置的虚拟机中网卡MAC来分配相应的IP地址,这样也很有规律)。另外,如你所说,就是桥接,用vlan也可以进行划分的。对于open vswitch 我还没研究过~ 如果(仅仅是如果)我有时间或者工作需要,我了解ovs后可以写两篇博客出来。。

      • OVS虚拟交换机,现在来看已经是和KVM密不可分的技术了,至少短时间来看,KVM少了OVS的支援,基本就不可能在实际的生产应用,包括vmware和citrix也是使用的OVS,还有openflow的应用

  8. 哥们,写的不错,一看就是在搞这个。
    网络方面现在都转到nicira的OVS了,那个东西才是企业级的虚拟交换机,考虑到了FT,HA,teaming等, 有时间加上那部分就最好了。

    我最近也是在研究OVS,和ESX的vswitch很像的一个东西,有时间可以交流下。

    • 谢谢;不过 OVS 我还没啥经验~~我会稍微了解一下;但是估计没时间把它写到书中了

  9. 请问书什么时候能出来啊,现在正在做这方面的东西,期待中~

  10. 等着博主主动卖书给我,blog就不看了,直接买书支持!
    看CV,应该在Intel OTC,好地方啊

  11. 谢谢大家支持,应该会比较快出来了,我开始写最后一章“参与KVM开源社区”了。
    P.S. 忽然发现今天博客网站留量猛增,Google Analytics 分析了下referrals,发现是因为上了 http://news.dbanotes.net/ 谢谢了~ @Fenng做的东东 还有“地瓜哥”的友情推荐~

  12. 老大,书还没出啊,最近也在弄KVM虚拟化,在网上看的资料都是零零散散的。很需要你的大作好好系统学习一下,啥时候能出呢,期待中。。。

  13. 有几个问题想请问博主,还望解疑: Xen为什么一定要进入内核呢,进入内核意味着它也要借助linux内核对硬件资源管理和调度吗? 博主能不能简单说点对KVM和Xen的看法? 谢谢

    • 对的,应该是你说的那样的,不过注意xen hypervisor本身几乎是永远不能进入Linux内核的,只是说和Xen配合使用的dom0 kernel已经可以完全直接使用Linux kernel upstream了(意思是Linux内核这边的为了xen进行的相关改动已经全部进入到Linux原生内核中了)。我工作和学习对KVM、Xen都是涉及到的,其实很早就准备写一篇KVM/Xen的看法的,等等吧~~ 我的大致观点与这篇文章有点类似(我不敢自称专家哈):
      http://chucknology.com/2012/04/15/kvm-is-still-linux-xen-is-still-not/

      • 文章我仔细看了,挺好的~~ 呵呵,大概意思是Linux 3.0 内核开始,直接可以拿linux系统来当Dom0(配合最新版本Xen)和DomU,如果要用Pre 3.0版本的Linux要做Dom0需要modified kernel 和 Xen modifications(不明白啥意思,重新配置内核?重新编译内核?Xen还要做修改?),做客户机如果要用pv-ops还要重新编译内核。

        反正就是说,新版本的Xen和linux 3.0配合起来使用比原来容易啦(我会装个Xen试试看对比一下,博主有好资料可以推荐参考一下吗?)。

        但是呢,Xen的hypervisor始终是自己的技术,KVM可以利用linux本身来做hypervisor的一些工作,这个是最大的区别了。(但是我对这一点没啥感性的认识,因为我其实很小白菜吧,不了解内核,不了解linux,不明白这一点何以让KVM有优势,得到大公司青睐)

        老大布置任务看看Xen,KVM用哪个好,从网上看来的资料,感觉Xen挺成熟啊,性能也好,很多企业在用,就是不知道用起来是不是麻烦些,鼓捣了好几天根据博主文档装了个KVM可以跑起来,也觉得很好用啊。现在自己感觉用哪个都好的样子。。。Xen不会一下子败下阵来吧,KVM发展势头又很猛的样子。。苦恼了。。呵呵

  14. 呵呵,我们ibm公司有个专门做kvm的team,不知道楼主有没有兴趣。。。。
    有的话 hejiashcn.ibm.com :)

    • 谢谢,暂不考虑~~ 今天在oVirt那个workshop上 还看到IBM中国的KVM technical leader做了一个演讲~~

    • 下周一开始写前言部分了,其他都写好了。唉,比最开始乐观估计的年初,完了半年了。辜负大家的期待了。

  15. 冒昧问一下,是否可以发我一份书的完整目录,我从11年低开始接触这方面技术,读过libvirt源码,使用libvirt/kvm做过项目。

    • 过段时间(应该就一两个月内)就可以出版了,到时我会把目录以及更多章节public出来~ 我也对libvirt做了下简介,不过比较粗浅哦,呵呵

    • 很少上Q,联系我,请先发email给我;email地址在本博客中找~~~

    • 出版社编辑说9月中旬能出版,估计9月末或10月初可以在市面上买到~ 谢谢关注哦~

  16. 大虾~~书出版了之后 发邮件告诉偶一声呗 偶买一本~~~

  17. 同样是为SCUTER,师兄好牛。COMPUTER SCIENCE毕业两年了,感觉还没怎么找到发展的方向。目前正在倒腾一下openstack、kvm和libvirt api库,搜索来到这里了。看到师兄的工作经历,应该是Intel公司要发行自身版本的OpenStack吧,就像intel的hadoop一样。
    1.不知道kvm书出了没有?出版了我就买本学习学习..
    2.无代理情况下kvm里面虚拟机的实际使用内存如何进行监控?貌似libvirt关于具体使用内存的api是空的。
    3.kvm的虚拟机流量如何控制?有没有推荐的方案?

    • 欢迎校友啊~~ 没有准备出定制版的OpenStack啊;目前,据我所知,对OpenStack贡献的所有代码都是直接提交到OpenStack社区。(Hadoop确实有Intel优化定制版)
      1. kvm书,出版社最后阶段,他们封面都做好了。这个月底,最迟下个月中旬可以上市吧。
      2. 没有特别好的办法,在宿主机中可以考虑直接监控QEMU进程(及其子线程)消耗的内存(这是从宿主机这边拿过去的资源),而虚拟机里面具体怎么分配,估计还得到虚拟机中才看得到。
      3. KVM本身没提供流量控制,现在比较热门的Open vSwitch 方案,感觉还算相对靠谱,可以试试。

      • 谢谢指导哦。关于虚拟机的流量控制问题,openvswitch确实是挺好的方案,也有考虑过;不过libvirt里面好像也有关于流量控制qos的设置,好像是用tc做的,不过不知道靠不靠谱,因为没有测试过,不知道你是否了解这个,这个方法的效果如何?http://libvirt.org/formatnetwork.html

        • tc的话貌似不能直接提供收包的速率控制,需要中间插一个虚拟的模块,再控制

          • tc是额外的软件包,但是libvirt已经实现用tc工具来控制虚拟机网速的

        • 我对TC也不熟,没尝试过~ 只是知道有这个东西~ 另外,用cgroup也可以做到一些按进程控制的网络控制~

    • 估计 10月中旬才能正式上市吧~ 如前面hejianet说的,现在可以预定购买的了,当当、京东、亚马逊都可以预售,请搜索“kvm虚拟化”~~

    • 10月才正式上市 当当、京东、亚马逊都可以预售可,请搜索“kvm虚拟化”~~

  18. 貌似京东可以预定了,不过书貌似小贵了哦:)

    • 你比我还先知道啊~ 看到你的评论,我才去查了下~~ 确实是可以预定了。 是有点小贵(当当网好像便一点哦),不过价格方面不是我能控制的,不做评论~ 现在真正懂虚拟化的技术人员,如果确实需要,也还买得起~

  19. 终于出来了,果断京东预订一本,期待好久了。

  20. 大家对kvm这么热情,欢迎来我的blog,我会连载对kvm代码的理解,和大家共同交流,http://blog.csdn.net/fanwenyi

  21. 书名叫什么,好像不叫了,是叫<KVM虚拟化技术:实战与原理解析〉这本吗?

    • 嗯 是这个~~ 后来根据编辑的意思改了下书名。

  22. 今天早上刚收到在亚马逊购买的这边书,很赞,以后有得事情做了,细细拜读~

  23. lz您好,很喜欢你博客的内容,我是在一家银行工作,也准备用了,希望能多点交流或者提供一些架构资料,比如kvm在高可用和资源集中管理方面一般如何去做的?谢谢。。。您的书一定买一本看一下,很多都是我在测试研究中经历的,走了很多弯路才来到你这。。。

  24. 楼主你好,根据书中,使用virt-v2v 迁移xen to kvm
    出现错误
    virt-v2v: WARNING: There is no virtio block driver available in the directory specified for this version of Windows. The guest will be configured with a {block} block storage adapter, but no driver will be installed for it. If the {block} driver is not already installed in the guest, it will fail to boot.block
    virt-v2v: WARNING: There is no virtio net driver available in the directory specified for this version of Windows. The guest will be configured with a rtl8139 network adapter, but no driver will be installed for it. If the rtl8139 driver is not already installed in the guest, you must install it manually after conversion.
    virt-v2v: net_128 configured without virtio drivers.
    之前xen有装过GPL PV dirver 已经卸载了。kvm虚拟化中也装了virtio-win 所需要的驱动。使用转换后的镜像创建虚机,出现蓝屏。不知道你是否遇到此类问题。

    • 哈哈,问题已经解决了主要是我的xen 里面的GPL PV dirver,没卸载干净。

      • 嗯,谢谢回复反馈。如果没有GPL PV driver,我以前做时就是可以成功的。

  25. KVM官方网站已经列出了三本相关的书籍,楼主可以拿来做参考,只不过有一本是日语,两本是德语写的。。。而且主要也是讲的运维和使用方面的,唉,真正想研究代码还是得参与到开源项目中去

    • 嗯 谢谢~~ 翻了下这几本书在Amazon的目录,感觉也比较浅(可能比我写的还浅,^_^),而且不全面和有点老旧了。。 不过其中的目录,看起来和我的一部分比较像~~ 嗯 研究纯代码,还是去kvm邮件列表中去了,我在书中也提到了~

  26. 发现个奇怪的事情,我在fedota20 在qemu或libvirt安装的虚拟机无法进行域名解析,但是能ping通外网,DNS也设置了。。这是什么问题?是我的宿主机少配置了什么吗?

    • 虚拟机中的DNS和宿主机配置无关。你可以看看虚拟机中是否能ping同DNS Server?解析域名,你用用nslookup看看。

    • 如果你确实要买 我自己手上还有两本之前出版社送给我的书 可以到“关于本博客”页面找email发邮件给我 你随便给点邮费 我寄给你一本

foxmailed进行回复 取消回复

邮箱地址不会被公开。 必填项已用*标注

*