5年匠心之作,深度探索Linux虚拟化

01

为什么写这本书

大约在2014年底,我参与了一个项目,使用Android模拟器在x86架构的机器上运行各种Android游戏。当时项目遇到的核心问题是游戏运行卡顿严重,印象中普通的小游戏每秒大约只能渲染十几帧,大型游戏则完全无法成功加载。运行模拟器的机器都有顶配的显卡,因此硬件性能并不存在问题。那么问题就出在软件架构上了。当时采用的软件架构是:使用虚拟机运行Android程序,Android中有一个模块会将数据通过网络传送给另外一个本地应用进行渲染。对于游戏这种数据量很大的应用,采用网络包传输显然不是一个最优的方案。除了网络包在协议栈中的各种复杂处理外,大量的网络包传输会导致虚拟机和主机之间的频繁切换,这将耗费大量的计算资源。基于此,我们设计的新方案是在VMM层实现一个虚拟设备,在Guest内部通过这个虚拟设备向渲染程序发送数据。虚拟设备通过IPC方式与负责渲染的程序进行通信。方案实现后,原来无法加载的大型游戏每秒都可以达到Android的渲染上限60帧。

2015年我参与了另外一个项目,将虚拟机的块设备数据存储到块存储集群。原有的方案是在宿主机上采用SCSI创建一个块设备,然后将这个块设备传给Qemu,SCSI设备再通过iSCSI协议将块数据传递给远端块存储集群。这个方案有很多弊端,块数据经历了两次I/O栈,一次是Guest内核中的,另外一次是Host内核中的,因此效率很低。另外,这个方案还有个致命的问题:那时偶尔会遇到内核中iSCSI协议的Bug,此时除了重启宿主机外别无他法,而且那时热迁移还不是很成熟,可以想象一下重启宿主机的后果。为了解决这些问题,我们设计了另外一种方案,在Qemu中实现一个虚拟块设备,绕过内核的I/O栈,在该虚拟块设备中直接将块数据通过TCP/IP发给块存储集群,从而不再依赖iSCSI协议。方案实现后,IOPS获得了极大的提升,系统的稳定性也增强了。

经历了很多类似上述的情况,因此我打算写一本Linux系统虚拟化方面的书,希望能让读者更深刻地认识和理解系统虚拟化,于是我和本书的第二作者谢广军博士相约,一起撰写本书。从2015年开始,历时近6年,中间历经多次易稿,从最开始过多地聚焦于烦琐的技术细节,到尝试从系统结构、操作系统和硬件等多角度去解释原委。书中全部采用可以说明问题的早期代码版本,而不是采用因各种特性迭代而变得纷繁复杂的最新代码。

在这5年多的时间里,每每不想坚持时,就会想起自己年轻气盛时经常质疑前辈们为我们留下了什么,而如今我扪心自问,从事了这么多年计算机工作,我又为这个行业做了什么?最后,希望本书能让大家有所收获。

02

内容简介

本书探讨了软件如何虚拟计算机系统,包括CPU、内存、中断和外设等。此外,在云计算中,网络虚拟化也至关重要,因此,本书最后一章探讨了网络虚拟化。

第1章讨论CPU虚拟化。

这一章介绍了x86架构下的VMX扩展,讨论了在VMX下虚拟CPU的完整生命周期。以Guest通过内存映射(MMIO)方式访问外设为例,展示了KVM如何完整地模拟一个CPU指令。然后,我们探讨了KVM是如何模拟多处理器系统的。最后,通过一个具体的KVM用户空间部分的实例,带领读者直观地体会CPU虚拟化的概念。

第2章讨论内存虚拟化。

这一章首先简略地介绍了内存寻址的基本原理,然后分别探讨了实模式Guest以及保护模式Guest的内存寻址,包括大家比较熟悉的影子页表等。最后,我们讨论了在硬件虚拟化支持下,即EPT模式下从Guest的虚拟地址到Host的物理地址的翻译过程。

第3章讨论中断虚拟化。

这一章我们从最初IBM PC为单核系统设计的PIC(8259A)开始,讨论到为多核系统设计的APIC,再到绕开I/O APIC、从设备直接向LAPIC发送基于消息的MSI。最后,我们讨论了Intel为了提高效率是如何从硬件层面对虚拟化中断进行支持的,以及KVM是如何使用它们的。

第4章和第5章讨论外设虚拟化。

我们从完全虚拟化开始,讨论到半虚拟化,最后讨论到Intel的VT-d支持下的硬件辅助虚拟化。其间,我们通过实现一个模拟串口,带领读者直观地体会设备虚拟化的基本原理,然后带领读者深入了解Virito标准。最后,我们还探讨了支持SR-IOV的DMA重映射和中断重映射。

第6章讨论网络虚拟化。

以一个典型的Overlay网络为例,从虚拟机访问外部主机、外部主机访问虚拟机两个方面,分别探讨了计算节点、网络节点上的网络虚拟化技术。

03

本书读者收获

  • 云计算从业人员

    虚拟化是云计算的基础,运行各种服务的云主机都是通过虚拟化方式虚拟出来的,需要深入地掌握虚拟化技术。

  • 云计算平台的研发人员

    只有更好地掌握虚拟化技术,才能更好地管理云主机等计算资源。

  • 云计算解决方案架构师

    只有更好地了解虚拟化技术,才能为客户设计更合理的解决方案。

  • 虚拟化相关底层技术的研发人员

    只要参透虚拟化技术,才能为用户提供更高性能的云主机。

  • IT技术从业者

    虚拟化技术是一门跨领域的技术,涉及操作系统、系统结构、硬件等多个领域。虚拟化提供了一个全方位窥探计算机技术的途径,通过虚拟化技术,我们可以更好地研究在物理环境下无法观察到的各种行为,虚拟化为研究计算机核心基础技术提供了一个无与伦比的环境。

04

    作者介绍    

王柏生

资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。

著有畅销书《深度探索Linux操作系统》(2013年出版)。

谢广军

计算机专业博士,毕业于南开大学计算机系。

资深技术专家,有多年的IT行业工作经验。现担任百度智能云副总经理,负责云计算相关产品的研发。多年来一直从事操作系统、虚拟化技术、分布式系统、大数据、云计算等相关领域的研发工作,实践经验丰富。

更多精彩回顾

书讯 |11月书讯(下)| 这些好书必须“买买买”!

书讯 |11月书讯(上)| 这些好书必须“买买买”!

资讯 |DB-Engines 10月数据库排名:“三大王”无人能敌,PostgreSQL紧随其后

上新 | 百度官方出品 | 全面解读PaddlePaddle,零基础快速入门深度学习
书单 | 开学季——计算机专业学生必读的10本畅销经典

干货 | 数据分析必读干货:简单而实用的3大分析方法

收藏 | (万字长文)Spring的核心知识尽揽其中

视频 | 大佬出镜推荐不可不读系列——程序员陈彼得

点击阅读全文购买

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值